Wie kann ich Symbolleisten an- oder abhaken

  • Hallo Zusammen,

    ich benutze gerne anstatt der Symbolleiste "Schnellstart" die Symbolleiste "Free Launch Bar..." die das Programm FreeLaunchBar mitbringt. Die Symbolleiste hat den Vorteil, daß man Untermenus bauen kann die aufklappen. Damit hat das Icon-Wirrwarr ein Ende und ich kann es schön gruppieren.

    Die Programminstallation via AutoIt war nicht weiter schwer, aber wie deaktiviere ich die Symbolleiste "Schnellstart" und aktiviere die Symbolleiste "Free Launch Bar..."? Die Suchfunktion hier hat leider nichts gebracht.

    Besten Dank im voraus und happy computing!
    R@iner

  • 1) Primitiv:

    MouseClicks

    2) Besser;

    Shell_TrayWnd :)

    Wie es genau mit diesen DLLCALLS geht, weiß ich aber auch nicht :)

    mfg

    • Offizieller Beitrag

    Die Einstellungen für die Taskbar findest du im Registry-Schlüssel: HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop\

    Im Schlüssel "TaskbarWinXP" sind alle Informationen als Binärwert abgelegt. Du kannst also nicht gezielt einzelne Einstellungen verändern, sondern müsstest vorher wissen, wie sich dabei der Binärwert ändert.
    Ist also z.B. für unattended installation interessant, dass gleich die Voreinstellungen für die Taskbar wieder installiert werden.

    Bleibt also nur der Mausklick in den Taskbareigenschaften zum Deaktivieren der Schnellstartleiste.

  • Hallo Ihr Zwei,

    ich hab noch nicht soviel Erfahrung mit AutoIt und in der Hilfe finde ich nichts zu "_TrayWnd ". Wie muß ich da anfangen?

    Das mit dem Registryschlüssel schaue ich mir mal an. Da es aber nicht immer eine Unattended ist, hilft mir das leider nicht immer. Ich muß eine allgemein gültige Lösung bauen. Zur Not halt, mit MouseClicks. Aber wie gehe ich da vor?

    Gibt es irgendwo ein Beispiel, wo ich die prinzipielle Steuerung des TryWin sehe?

    Besten Dank und happy computing!
    R@iner

  • Shell_TrayWnd ist wenn ich mich nicht irre der Objectname der Taskleiste. Ich würde es lieber mit Mausklicks machen weil es in deinem Fall schneller geht.

  • Mit den Mausklicks ist das ja so ne Sache ... jede Leiste unten sieht anders aus. Wie soll ich da dann gezielt in das leere Feld klicken, wie komme ich dann in das Menu "Symbolleiste". Auch die sieht auf jedem Rechner anders aus. Da hab ich noch keinerlei Erfahrung. Mit send( "{up}" ) und send( "{enter}" ) ist es ja leider nicht getan. Kann ich MenuItemNamen auslesen und vergleichen? Oder wie geht das?

    Happy computing!
    R@iner

    • Offizieller Beitrag

    Hier eine Lösung, die funktioniert. Leider dauert das Eintragen der Änderung bei Windows recht lang, sodass das Eigenschaftsfenster noch 4-5 Sekunden sichtbar ist.

    [autoit]

    AutoItSetOption("WinTitleMatchMode", 4)
    Dim $x = 0, $y = @DesktopHeight
    MouseClick("right", $x, $y, 1, 0) ; Rechtsklick in unterste linke Ecke
    Send("i") ; Aufruf Kontextmenü Eigenschaften
    WinWaitActive("Eigenschaften von Taskleiste und Startmenü")
    ControlClick("Eigenschaften von Taskleiste und Startmenü", "", 1107) ; egal welcher Tab gerade sichtbar, das Control wird direkt angesprochen
    Send("{ENTER}") ; dauert etwas

    [/autoit]
  • Hallo Bugfix,

    danke für das Script, aber das ist nur die halbe Miete. Damit kann ich entweder die Schnellstartleiste ein oder wieder ausschalten. Wie bist Du auf das "i" gekommen? Durch ausprobieren?

    Ich möchte zum einen die Schnellstartleiste ausschalten und zum anderen die Alternative einschalten, also wenn Du in der Taskbar bist, mit rechte Maustaste -> Symbolleisten -> "Free Launch Bar ...". Das geht natürlich nur, wenn Du vorher die Launchbar installiert hast.

    Aber wie aktivierst Du zum Beispiel die Symbolleiste "Adresse" oder "Windows Media Player" ? Wenn ich wüßte, wie ich das mache, dann gelingt es mir auch mit "Free Launch Bar ...". Die Kür wäre dann noch, die Größe der "Free Launch Bar" einzustellen und den "Titel" auszublenden.

    Durch ausprobieren bin ich auf "y" für Symbolleisten gekommen. Also mit folgendem Sript komme ich schon mal zu den Symbolleisten:

    [autoit]

    AutoItSetOption("WinTitleMatchMode", 4)
    Dim $x = 0, $y = @DesktopHeight
    MouseClick("right", $x, $y, 1, 0) ; Rechtsklick in unterste linke Ecke
    Send("y") ; Aufruf Symbolleisten

    [/autoit]


    Wie krieg ich jetzt raus, was angehakt ist und was nicht. Und wenn es angehakt ist, wie nehme ich z.B. bei "Schnellstart" den Haken raus und setze ihn bei "Adresse", falls er noch nicht gesetzt ist?

    Happy computing!
    R@iner

    • Offizieller Beitrag

    Hallo!

    Sicherer als der Rechtsklick mit der Maus ist es die Eigenschaften über RunDLL32 aufzurufen, dann ist es nämlich egal wo sich die Taskleiste befindet. Es soll ja Leute geben die die Taskleiste oben, links oder rechts auf dem Desktop anordnen!

    Der Aufruf lautet:

    [autoit]

    ShellExecute("rundll32.exe", "shell32.dll,Options_RunDLL 1")

    [/autoit]
    • Offizieller Beitrag

    Ja Bernd, da hast du natürlich recht.
    ich habe noch etwas rumprobiert. Sollte aber die Taskbar unten sein, ist folgende Variante schneller und darüber lässt sich auch die FreeLaunchBar aktivieren.

    [autoit]

    Dim $x = 0, $y = @DesktopHeight
    MouseClick("right", $x, $y, 1, 0)
    Send("y") ; Aufruf Menü Symbolleisten
    Sleep(100)
    Send("c") ; deaktiviert Schnellstart
    MouseClick("right", $x, $y, 1, 0)
    Send("y") ; Aufruf Menü Symbolleisten
    Sleep(100)
    Send("f") ; aktiviert FreeLaunchBar

    [/autoit]

    Ideal wäre natürlich, wenn per RunDLL32 auch dieses Menü direkt aufgerufen werden könnte. Hab aber k.P. ob das geht.

  • Hallo bugfix,

    danke, jow das klappt solange, solange vorher die Schnellstartleiste aktiv war. Wenn sie aber nicht angehakt war, dann hake ich sie damit auch noch an :(
    Kann ich irgendwie überprüfen, ob ein MenuEintrag bereits angehakt ist?

    Bernd
    Was brauch ich denn für eine include, damit ShellExecute funktioniert?

    Besten Dank und happy computing!
    R@iner

    • Offizieller Beitrag

    Du benötigst nur die neust autoIt-Version 3.2.2.0 dann sollte es klappen!

    • Offizieller Beitrag
    Zitat

    Wenn sie aber nicht angehakt war, dann hake ich sie damit auch noch an :(


    Ja, das stimmt leider. Momentan sehe ich aber keine Möglichkeit abzufragen, ob die Symbolleiste aktiviert oder deaktiviert ist. Vielleicht geht sowas durch Verwendung der WinAPI. Aber da bin ich nicht firm.

    Edit:
    Ich habe dir mal eine Möglichkeit mit Ermittlung der Taskbar-Position erstellt. Dann bist du zumindest dabei unabhängig.

    Spoiler anzeigen
    [autoit]

    $TrayBarPos = WinGetPos("", "Notification Area" )
    Select
    Case $TrayBarPos[0] = -4
    If $TrayBarPos[1] = -4 And $TrayBarPos[2] = (@DesktopWidth +8) Then
    ; Position = "unten"
    $x=0
    $y=@DesktopHeight
    ElseIf $TrayBarPos[1] = -4 And $TrayBarPos[3] = (@DesktopHeight +8) Then
    ; Position = "rechts"
    $x=@DesktopWidth
    $y=0
    Else
    ; Position = "oben"
    $x=0
    $y=0
    EndIf
    Case Else
    ; Position = "links"
    $x=0
    $y=0
    EndSelect
    MouseClick("right", $x, $y, 1, 0)
    Send("y") ; Aufruf Menü Symbolleisten
    Sleep(100)
    Send("c") ; deaktiviert Schnellstart
    MouseClick("right", $x, $y, 1, 0)
    Send("y") ; Aufruf Menü Symbolleisten
    Sleep(100)
    Send("f") ; aktiviert FreeLaunchBar

    [/autoit]
  • Hallo BugFix,

    danke für den Code! Ich hab jetzt den alten und neuen Code kombiniert, den Tipp von Bernd mit ShellExecute eingebaut, ControlCommand verwendet und so eine halbwegs brauchbare Lösung gefunden.

    Spoiler anzeigen
    [autoit]

    ; Schnellstartleiste deaktivieren
    Local $wtitel = "Eigenschaften von Taskleiste und Startmenü" ; Fenstertitel setzen
    ShellExecute("rundll32.exe", "shell32.dll,Options_RunDLL 1") ; Shell "Eigenschaften von Taskleiste und Startmenü" starten
    WinWaitActive($wtitel) ; Warten auf Eigenschaftenfenster
    ControlCommand($wtitel, "&Schnellstartleiste anzeigen", 1107, "UnCheck", "") ; Schnellstartleiste deaktivieren
    ControlClick($wtitel, "OK", "Button11") ; Eigenschaften-Fenster schliessen

    [/autoit] [autoit][/autoit] [autoit]

    ; TrayBar-Coordinaten ermitteln
    Local $TrayBarPos = WinGetPos("", "Notification Area" )
    Select
    Case $TrayBarPos[0] = -4
    If $TrayBarPos[1] = -4 And $TrayBarPos[2] = (@DesktopWidth +8) Then
    ; Position = "unten"
    $x=0
    $y=@DesktopHeight
    ElseIf $TrayBarPos[1] = -4 And $TrayBarPos[3] = (@DesktopHeight +8) Then
    ; Position = "rechts"
    $x=@DesktopWidth
    $y=0
    Else
    ; Position = "oben"
    $x=0
    $y=0
    EndIf
    Case Else
    ; Position = "links"
    $x=0
    $y=0
    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    ; Free Launch Bar aktivieren
    MouseClick("right", $x, $y, 1, 0)
    Sleep(100)
    Send("y") ; Aufruf Menü Symbolleisten
    Sleep(100)
    Send("f") ; aktiviert FreeLaunchBar

    [/autoit]

    Trotzdem wüßte ich gerne, wie ich Menus und MenuItems richtig bedienen kann, denn auf sowas treffe ich ja öfters. Oft weiß ich, wenn ich die Alt-Taste drücke, daß dann bei manchen Items ein Buchstaben unterstrichen ist, den ich mit Alt-Irgendwas dann anspringen kann. Ich würde nämlich noch gerne die Adress-Symbolleiste anhaken, wenn sich nicht aktiv ist. Ist sie aber bereits aktiv, dann hake ich sie damit ab :( Hat vielleicht jemand noch ne Idee?

    Und wie weiß ich bei dem ShellExecute, welche Optionen ich da bei der rundll32.exe angeben kann. Da gibt es gewiß noch mehr System-Optionen die ich auf diesen Weg einstellen könnte. Tante google hat nur viel unbrauchbare Infos geliefert. Gibt es da nähere Infos dazu?

    Happy computing!
    R@iner

    • Offizieller Beitrag

    Einiges kannst du mit ControlClick( ) oder ControlCommand( ) ausführen. Wie du die Controls ansprichst, erfährst du mit dem Tool: AutoIt Window Info.
    Es gibt auch die Möglichkeit mit WinApi zu arbeiten, aber da hab ich wenig Erfahrung mit.
    Eine gute Infoquelle ist auf jeden Fall das englische Forum. Die haben schon fast alles mal gemacht. :)

  • Hello again,

    Zitat

    Einiges kannst du mit ControlClick( ) oder ControlCommand( ) ausführen. Wie du die Controls ansprichst, erfährst du mit dem Tool: AutoIt Window Info.


    wie Du in meinem Code siehst, hab ich die Befehle ja schon benutzt.

    Zitat

    Es gibt auch die Möglichkeit mit WinApi zu arbeiten, aber da hab ich wenig Erfahrung mit.


    Was meinst Du mit WinAPI?

    Zitat

    Eine gute Infoquelle ist auf jeden Fall das englische Forum. Die haben schon fast alles mal gemacht. :)


    Das mag schon sein. Ich hab da mal ein bisschen mitgelesen, da werden viele Fragen erst garnicht beantwortet. Warum auch immer. Der ein oder andere Tipp ist schon brauchbar. Schade nur, daß dort natürlich die Beispiele für US-OSn sind. Aber für Denkanstöße reicht es allemal.

    Happy computing!
    R@iner