Hallo!
Ich beziehe mich auf folgenden Artikel: [ offen ] Context Menu
Ich möchte die Element-Liste aber nicht vordefinieren sondern per _FileListToArray () einspielen.
Leider wird dann die funktion WM_COMMAND nicht mehr ausgeführt. iCH habe die Abfrage-Schleife dann in die While-Schleife gepackt;sie gibt aber immer 1 zurück anstatt der ID des Elements
Hier mein Skript
Spoiler anzeigen
#include <array.au3>
#include <file.au3>
#include <GuiMenu.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Global Const $tagSHFILEINFO = "hwnd hIcon;int iIcon;dword Attr;wchar DisplayName[260];char TypeName[80]"
Global Const $SHGFI_ICON = 256
Global Const $SHGFI_DISPLAYNAME = 512
Global Const $SHGFI_TYPENAME = 1024
Global Const $SHGFI_ATTRIBUTES = 2048
Global Const $SHGFI_ICONLOCATION = 4096
Global Const $SHGFI_EXETYPE = 8192
Global Const $SHGFI_SYSICONINDEX = 16384
Global Const $SHGFI_LINKOVERLAY = 32768
Global Const $SHGFI_SELECTED = 65536
Global Const $SHGFI_ATTR_SPECIFIED = 131072
Global Const $SHGFI_LARGEICON = 0
Global Const $SHGFI_SMALLICON = 1
Global Const $SHGFI_OPENICON = 2
Global Const $SHGFI_SHELLICONSIZE = 4
Global Const $SHGFI_PIDL = 8
Global Const $SHGFI_USEFILEATTRIBUTES = 16
#include <Constants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
$dir = 'c:\applinks'
$dir = 'c:\users\girstmair\startfolder\apps'
$filfol = _FileListToArray ($dir)
$Handle = GUICreate("")
[/autoit] [autoit][/autoit] [autoit]Dim $entry[$filfol[0]+1]
[/autoit] [autoit][/autoit] [autoit]$hMenu = _GUICtrlMenu_CreatePopup ()
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $filfol[0]
If StringRight ($filfol[$i], 4) = ".lnk" Then
$name = StringTrimRight ($filfol[$i], 4)
Else
$name = $filfol[$i]
EndIf
_GUICtrlMenu_InsertMenuItem ($hMenu, $i-1, $name, $entry[$i])
If StringRight ($filfol[$i], 4) = ".lnk" Then
$ico = FileGetShortcut ($dir&"\"&$filfol[$i])
ConsoleWrite ($ico&@crlf)
;~ $hBmp = _WinAPI_LoadImage (0, $ico[4], $IMAGE_ICON, 16, 16, BitOR($LR_LOADTRANSPARENT, $LR_LOADFROMFILE))
$hbmp = _WinAPI_CreateSolidBitmap (0, 0x880055, 16, 16)
_GUICtrlMenu_SetItemBitmaps ($hMenu, $i-1, $hBmp, $hBmp)
Else
$hbmp = _WinAPI_CreateSolidBitmap (0, 0x550088, 16, 16)
_GUICtrlMenu_SetItemBitmaps ($hMenu, $i-1, $hBmp, $hBmp)
EndIf
Next
menue()
Func OnAutoItExit()
_GUICtrlMenu_DestroyMenu ($hMenu)
EndFunc
;~ ; Register message handlers
;~ GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
;~ ;;http://www.autoit.de/index.php?page…8530#post148530
While 1
;~ Sleep(10)
For $id = 1 To $filfol[0]
Switch GUIGetMsg ()
Case $entry[$id]
ConsoleWrite ($id)
Exit
EndSwitch
Next
Wend
;~ ; Handle WM_COMMAND messages
;~ Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam=True)
;~ For $id = 1 To $filfol[0]
;~ Switch $iwParam
;~ Case $entry[$id]
;~ ConsoleWrite ($i)
;~ Exit
;~ EndSwitch
;~ Next
;~ EndFunc ;==>WM_COMMAND
Func Menue()
_GUICtrlMenu_TrackPopupMenu ($hMenu, $Handle)
EndFunc
ich bin um jede Hilfe dankbar!
lg