AutoHotkey: Popup-Menü für Buttons oder F4

Aus TCWikide
Wechseln zu: Navigation, Suche
Fehler beim Erstellen des Vorschaubildes: Die Miniaturansicht konnte nicht am vorgesehenen Ort gespeichert werden

Übersicht

Dieses Script zeigt ein Popup-Menü mit in einer Konfigurationsdatei definierten Programmen an. Nach Klick auf einen Eintrag wird das gewählte Programm mit den definierten Parametern gestartet. Dies ist nützlich, um verschiedene externe Programme auf einen einzigen Button in der Knopfleiste zu legen oder um nach Drücken von F4 mehrere Editoren zur Auswahl zu haben.

Quelltext

  #NoTrayIcon
  ;#ErrorStdOut
  
  SplitPath A_ScriptFullPath, null, IniDir, null, IniFile, null
  IniFile = %IniDir%\%IniFile%.ini
  
  IfNotExist %IniFile%
  {
    MsgBox Kann %IniFile% nicht finden.
    ExitApp
  }
  
  ProcessMenu("Menu")
  Menu Menu, Show
  
  Exit
  
  SplitFirst(ByRef OutLeft, ByRef OutRight, InpText, InpSep)
  {
    StringGetPos SepPos, InpText, %InpSep%
    If (SepPos >= 0)
    {
      StringLeft OutLeft, InpText, %SepPos%
      RemChars := StrLen(InpText)-SepPos-1
      StringRight OutRight, InpText, %RemChars%
    }
    Else
    {
      OutLeft  := InpText
      OutRight := ""
    }
  }
  
  ProcessMenu(Menu)
  {
    global IniFile
    IniRead MenuTitle, %IniFile%, %Menu%, Title
    If (MenuTitle <> "ERROR")
    {
      Menu %Menu%, Add, %MenuTitle%, AboutBox
      Menu %Menu%, Default, %MenuTitle%
  ;    Menu %Menu%, Disable, %MenuTitle%
      Menu %Menu%, Add
    }
    
    IniRead Count, %IniFile%, %Menu%, MaxItem, 0
    Loop %Count%
    {
      IniRead, CurItem, %IniFile%, %Menu%, %A_Index%
      If (CurItem = "-")
        Menu %Menu%, Add
      Else If (CurItem <> "ERROR")
      {
        SplitFirst(CurID, CurTitle, CurItem, "|")
        If (CurTitle = "")
          CurTitle := CurID
        
        IniRead IsSub, %IniFile%, %CurID%, MaxItem, 0
        If (IsSub = 0)
        {
          Menu %Menu%, Add, %CurTitle%, ProcessEvent
          IniRead CurCmd, %IniFile%, %CurID%, Cmd
          If (CurCmd = "ERROR")
            Menu %Menu%, Disable, %CurTitle%
        }
        else
        {
          ProcessMenu(CurID)
          Menu %Menu%, Add, %CurTitle%, :%CurID%
        }
        IniRead IsChecked, %IniFile%, %CurID%, Checked, 0
        If (IsChecked = 1)
          Menu %Menu%, Check, %CurTitle%
      }
    }
    Return
  }
  
  ProcessEvent:
    IniRead Count, %IniFile%, %A_ThisMenu%, MaxItem, 0
    Loop %Count%
    {
      IniRead, CurItem, %IniFile%, %A_ThisMenu%, %A_Index%
      If (CurItem <> "ERROR")
      {
        SplitFirst(CurID, CurTitle, CurItem, "|")
        If (CurTitle = "")
          CurTitle := CurID
            
        If (CurTitle = A_ThisMenuItem)
        {
          IniRead Cmd, %IniFile%, %CurID%, Cmd
          If (Cmd <> "ERROR")
          {
            empty := ""
            IniRead TargDir, %IniFile%, %CurID%, StartPath, %empty%
            IniRead StartMode, %IniFile%, %CurID%, StartMode, %empty%
            Loop 9
            {
              CurPar := %A_Index%
              StringReplace Cmd, Cmd, `%%A_Index%, %CurPar%
            }
            ; Use RunWait for ex. Total Commander, where the starting app has to know
            ; whether the launched app is still running. Otherwise use Run.
            RunWait %Cmd%, %TargDir%, %StartMode%, PID
          }
        }
      }
    }
    
  Return
  
  AboutBox:
    MsgBox 4160, Über ClickMenu..., ClickMenu zeigt ein Popup-Menü mit Einträgen, die aus einer INI-Datei ausgelesen werden und startet das gewählte Programm.`n`nMade in 2005 by Markus Birth <mbirth at webwriters.de>
  Return


Gebrauch

Vorbereitungen

Um den Gebrauch etwas einfacher zu gestalten, ist es empfehlenswert, das Script vorher mit ahk2exe zu kompilieren. (ahk2exe ist beim AutoHotkey download dabei.) Wenn jetzt das kompilierte Script z.B. ClickMenu.exe heißt, weisen Sie diese ClickMenu.exe einem neuen Button in der Knopfleiste des Total Commander zu. Tragen Sie alle benötigten Parameter (bis zu neun) in das "Parameter"-Feld des Knopfes ein. Sie können diese später in der ClickMenu.ini mit %1..%9 benutzen. Alternativ können Sie ClickMenu.exe aber auch der F4-Taste zuweisen, um eine Auswahl an verschiedenen Editoren zu erhalten.


Konfiguration

Die gesamte Konfiguration geschieht durch eine INI-Datei, welche den gleichen Basisnamen haben muss wie das Script bzw. das Kompilat. In diesem Beispiel muss die INI-Datei also ClickMenu.ini genannt werden.


Beispiel-Konfigurationsdatei

Eine Beispiel-INI-Datei sieht so aus:

[Menu]
;Maximum number to parse, starting at 1
;Empty values are ignored.
MaxItem=99
Title=blafasel
1=TE1|Test entry
2=-
3=TES|Test sub
4=TE3|Test sub2

[TE1]
Cmd=notepad.exe %1
;Checked=1
; (omit following to start in current path)
StartPath=C:\TEMP
; StartMode=(Max|Min|Hide)
; (omit following to start normally)
StartMode=Max
 
[TES]
;Checked=1
MaxItem=1
1=TE2|Test2 entry
 
[TE2]
Cmd=explorer.exe

[TE3]
MaxItem=1
1=TE2|Test2 entry again

Ausführliche Beschreibung

Menüs

Der Abschnitt [Menu] enthält das Hauptmenü, welches nach dem Drücken des Knopfes bzw. F4 erscheint. Jedes Menü enthält ein oder mehrere Einträge mit einem numerischen Schlüssel von 1 bis n. (Format: Schlüssel=Wert.) Die Numerierung muss nicht kontinuierlich sein, aber der Wert von MaxItem muss dem des höchsten Schlüssel entsprechen (oder noch höher), d.h. jeder Eintrag mit einem Schlüssel höher als MaxItem wird nicht angezeigt. Auch ist zu beachten, dass alle Einträge in der Reihenfolge der Schlüssel angezeigt werden, angefangen vom kleinsten bis zum höchsten.

Jedes Menü kann einen eigenen Titel haben, welcher durch den Schlüssel Title festgelegt wird. Dieser Titel wird fett über den Einträgen angezeigt.

Jeder Menüpunkt hat das Format x=Abschnitt|Titel wobei x der numerische Schlüssel, Abschnitt der diesen Eintrag näher definierende Abschnitt und Titel der im Menü angezeigte Text ist.

Eine Trennlinie wird durch x=- definiert.

Programm- und Untermenü-Abschnitte können auch noch Checked=1 enthalten, um ein Häkchen vor dem übergeordneten Menüpunkt anzuzeigen.

Programme

Um ein zu startendes Programm zu definieren, wird der Syntax Cmd=programm.exe /Parameter verwendet. Man kann die im "Parameter"-Feld des Knopfes angegeben Parameter mit z.B. folgender Zeile verwenden: Cmd=programm.exe %3, welche programm.exe mit dem dritten bei den Knopf-Optionen angegebenen Parameter starten würde.

Um ein Häkchen vor dem Menüeintrag anzuzeigen, kann man Checked=1 benutzen.

Zusätzlich kann man noch StartPath=c:\WINDOWS setzen, um das Programm in diesem Ordner zu starten und StartMode=Max um es maximiert zu starten, StartMode=Min für minimiert oder StartMode=Hide um es versteckt zu starten bzw. das Programmfenster unsichtbar zu lassen. Wenn man StartPath weglässt, wird das aktuelle Verzeichnis benutzt. Lässt man StartMode weg, wird das Programm normal gestartet.


Links


Zurück zu AutoHotkey