Demo AHK Script erweitern

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

greenhorst
Posts: 6
Joined: 07 Feb 2019, 16:41

Demo AHK Script erweitern

07 Feb 2019, 17:00

Hallo, ich bin recht neu hier dabei und habe in der Onlinehilfe folgendes Script gefunden:

https://ahkde.github.io/docs/misc/ImageHandles.htm

Code: Select all

; Zeigt ein Menü der ersten n Dateien an, die dem Muster entsprechen, und ihre Symbole.
Muster = %A_ScriptDir%\*
n = 15

; Stellt Speicher für eine SHFILEINFOW-Struktur bereit.
VarSetCapacity(Dateiinfo, Dateigröße := A_PtrSize + 688)

Loop, Files, %Muster%, FD
{
    ; Fügt ein Menüpunkt für jede Datei ein.
    Menu F, Add, %A_LoopFileName%, nix
    
    ; Ruft das Symbol der Datei ab.
    if DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath
        , "UInt", 0, "Ptr", &Dateiinfo, "UInt", Dateigröße, "UInt", 0x100)
    {
        hicon := NumGet(Dateiinfo, 0, "Ptr")
        ; Setzt das Symbol des Menüpunktes.
        Menu F, Icon, %A_Index%&, HICON:%hicon%
        ; Da wir hier ":" anstelle von ":*" verwenden, wird das Symbol automatisch
        ; freigegeben, wenn das Programm beendet oder wenn das Menü oder der Menüpunkte gelöscht wird.
    }
}
until A_Index = n
Menu F, Show
nix:
return

Und nun meine Frage, wie kann ich das ergänzen, bitte um Hilfe, das man in dem "Menue" auch eine Datei auswählt und starten kann ?
Das würde mir meine tägliche Arbeit sehr vereinfachen.

Über eine Lösung, Hilfe zur Selbsthilfe würde ich mich sehr freuen.

Danke
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Demo AHK Script erweitern

08 Feb 2019, 05:35

Moin,

wenn man einem Menü per Menu, Menüname, Add, ... oder ]Menu, Menüname, Insert, ... einen Eintrag hinzufügt, bestimmt der Parameter LabelOderUntermenü, welche Subroutine beim Klick auf den Eintrag aufgerufen wird. Im Beispiel hat die Routine den treffenden Namen nix, weil sie tatsächlich nichts tut.

Damit nach dem Klick etwas geschieht, sollten
  1. der Name der Subroutine geändert.
  2. die Subroutine 'mit Leben' gefüllt werden.
Z.B.:

Code: Select all

#NoEnv
; Zeigt ein Menü der ersten 'N' Dateien im Ordner 'Folder' und ihre Symbole an.
Folder := A_ScriptDir ; Skriptordner - bitte den Ordnerpfad ggf. anpassen
N := 15

; Stellt Speicher für eine SHFILEINFOW-Struktur bereit.
SHFI_Size := A_PtrSize + 688
VarSetCapacity(SHFI, SHFI_Size)
; Dateinamen einlesen
Loop, Files, %Folder%\*, F
{
   ; Fügt ein Menüpunkt für jede Datei ein.
   Menu Start, Add, %A_LoopFileName%, Start
   ; Ruft das Symbol der Datei ab.
   If DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath, "UInt", 0, "Ptr", &SHFI, "UInt", SHFI_Size, "UInt", 0x100)
   {
      HICON := NumGet(SHFI, 0, "Ptr")
      ; Setzt das Symbol des Menüpunktes.
      Menu Start, Icon, %A_Index%&, HICON:%HICON%
      ; Da wir hier ":" anstelle von ":*" verwenden, wird das Symbol automatisch freigegeben,
      ; wenn das Programm beendet oder wenn das Menü oder der Menüpunkte gelöscht wird.
   }
}
Until (A_Index = N)

Menu Start, Show
Return

Start:
; Im einfachsten Fall reicht hier eine 'Run' Anweisung
Run, "%Folder%\%A_ThisMenuItem%"
Return
greenhorst
Posts: 6
Joined: 07 Feb 2019, 16:41

Re: Demo AHK Script erweitern

08 Feb 2019, 17:15

Genial !!!
Danke für die Erklärung, habe es sogar verstanden ……… !!!
User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: Demo AHK Script erweitern

14 Feb 2019, 19:48

ich bekomme es nicht hin, dass die Icons nicht nur im ersten Submenu erscheinen.

Code: Select all

#NoEnv
; Zeigt ein Menü der ersten 'N' Dateien im Ordner 'Folder' und ihre Symbole an.
Folder := A_ScriptDir ; Skriptordner - bitte den Ordnerpfad ggf. anpassen
N := 999

; Stellt Speicher für eine SHFILEINFOW-Struktur bereit.
; Dateinamen einlesen
Loop, Files, %Folder%\*, F
{
	SHFI_Size := A_PtrSize + 688
	VarSetCapacity(SHFI%A_Index%, SHFI_Size)

	first := SubStr(A_LoopFileName,1,1)

   ; Fügt ein Menüpunkt für jede Datei ein.
   Menu %first%, Add, %A_LoopFileName%, Start
   ; Ruft das Symbol der Datei ab.
   If DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath, "UInt", 0, "Ptr", &SHFI%A_Index%, "UInt", SHFI_Size, "UInt", 0x100)
   {
      HICON := NumGet(SHFI%A_Index%, 0, "Ptr")
      ; Setzt das Symbol des Menüpunktes.
	  try
		Menu %first%, Icon, %A_Index%&, HICON:%HICON%
      ; Da wir hier ":" anstelle von ":*" verwenden, wird das Symbol automatisch freigegeben,
      ; wenn das Programm beendet oder wenn das Menü oder der Menüpunkte gelöscht wird.
   }
   ; Menu,Start,Add,%first%,:%first%
	Menu,Start,Add,%first%,:%first%

}
Until (A_Index = N)
; Menu %first%, Show
Menu Start, Show
Return

Start:
; Im einfachsten Fall reicht hier eine 'Run' Anweisung
Run, "%Folder%\%A_ThisMenuItem%"
Return

/*

#NoEnv
; Zeigt ein Menü der ersten 'N' Dateien im Ordner 'Folder' und ihre Symbole an.
Folder := A_ScriptDir ; Skriptordner - bitte den Ordnerpfad ggf. anpassen
N := 1

; Stellt Speicher für eine SHFILEINFOW-Struktur bereit.
SHFI_Size := A_PtrSize + 688
VarSetCapacity(SHFI, SHFI_Size)
; Dateinamen einlesen
Loop, Files, %Folder%\*, D
Loop, Files, %Folder%\*, 
{
	first := SubStr(A_LoopFileName,1,1)

   ; Fügt ein Menüpunkt für jede Datei ein.
   Menu %first%, Add, %A_LoopFileName%, Start
   ; Ruft das Symbol der Datei ab.
   If DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath, "UInt", 0, "Ptr", &SHFI, "UInt", SHFI_Size, "UInt", 0x100)
   {
      HICON := NumGet(SHFI, 0, "Ptr")
      ; Setzt das Symbol des Menüpunktes.
      Menu %first%, Icon, %A_Index%&, HICON:%HICON%
      ; Da wir hier ":" anstelle von ":*" verwenden, wird das Symbol automatisch freigegeben,
      ; wenn das Programm beendet oder wenn das Menü oder der Menüpunkte gelöscht wird.
   }
   ; Menu Start,Add, %first%,:%first%
}
Until (A_Index = N)

Menu %first%, Show
Return

Start:
; Im einfachsten Fall reicht hier eine 'Run' Anweisung
Run, "%Folder%\%A_ThisMenuItem%"
Return
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Demo AHK Script erweitern

15 Feb 2019, 02:46

Moin!

Code: Select all

	  try
		Menu %first%, Icon, %A_Index%&, HICON:%HICON%
A_Index zählt über alle Dateien. %A_Index%& muss aber ein Index innerhalb eines Submenüs sein. Es wäre hier einfacher, anstelle des Index auch %A_LoopFileName% zu verwenden.
User avatar
Gerdi
Posts: 185
Joined: 03 Aug 2015, 18:48
Location: Germany
Contact:

Re: Demo AHK Script erweitern

15 Feb 2019, 09:00

Danke,

Code: Select all

#NoEnv
; Zeigt ein Menü der ersten 'N' Dateien im Ordner 'Folder' und ihre Symbole an.
Folder := A_ScriptDir ; Skriptordner - bitte den Ordnerpfad ggf. anpassen
N := 9999
NN := 50
i := 0
; Stellt Speicher für eine SHFILEINFOW-Struktur bereit.
; Dateinamen einlesen
Loop, Files, %Folder%\*, F
{
	++i
}
Until (A_Index = NN)
if (i = NN)
{
	Submenue := true
}
first := "Start"
Loop, Files, %Folder%\*, F
{
	if Submenue
		first := SubStr(A_LoopFileName,1,1)
		
	if !Submenue
		S := A_Index
	else if (first <> Lfirst)
	{
		S:=1
	}
	else
		++s

	SHFI_Size := A_PtrSize + 688
	VarSetCapacity(SHFI%S%, SHFI_Size)
		
   ; Fügt ein Menüpunkt für jede Datei ein.
		Menu %first%, Add, %A_LoopFileName%, Start
		
   ; Ruft das Symbol der Datei ab.
   If DllCall("shell32\SHGetFileInfoW", "WStr", A_LoopFileFullPath, "UInt", 0, "Ptr", &SHFI%S%, "UInt", SHFI_Size, "UInt", 0x100)
   {
      HICON := NumGet(SHFI%S%, 0, "Ptr")
      ; Setzt das Symbol des Menüpunktes.
	  try
		Menu %first%, Icon, %S%&, HICON:%HICON%
      ; Da wir hier ":" anstelle von ":*" verwenden, wird das Symbol automatisch freigegeben,
      ; wenn das Programm beendet oder wenn das Menü oder der Menüpunkte gelöscht wird.
   }
   ; Menu,Start,Add,%first%,:%first%
   if Submenue
		Menu,Start,Add,%first%,:%first%
	Lfirst := first
}
Until (A_Index = N)
; Menu %first%, Show
Menu Start, Show
Return

Start:
; Im einfachsten Fall reicht hier eine 'Run' Anweisung
Run, "%Folder%\%A_ThisMenuItem%"
Return
Win 10 Home (x64) and Win 11 Pro N
https://github.com/Grrdi/ZackZackOrdner/archive/master.zip --> get folders on the quick

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 94 guests