Dateiliste in Context-Menü

  • 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
    [autoit]

    #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]"

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

    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

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

    #include <Constants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GDIPlus.au3>
    $dir = 'c:\applinks'
    $dir = 'c:\users\girstmair\startfolder\apps'
    $filfol = _FileListToArray ($dir)

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

    $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()

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

    Func OnAutoItExit()
    _GUICtrlMenu_DestroyMenu ($hMenu)
    EndFunc

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

    ;~ ; Register message handlers
    ;~ GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    ;~ ;;http://www.autoit.de/index.php?page…8530#post148530

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

    While 1
    ;~ Sleep(10)
    For $id = 1 To $filfol[0]
    Switch GUIGetMsg ()
    Case $entry[$id]
    ConsoleWrite ($id)
    Exit
    EndSwitch
    Next
    Wend

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

    ;~ ; 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

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

    Func Menue()
    _GUICtrlMenu_TrackPopupMenu ($hMenu, $Handle)
    EndFunc

    [/autoit]


    ich bin um jede Hilfe dankbar!
    lg

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)