Context menü ohne Gui

  • hi
    gibt es eine möglichkeit so ein context menü (das menü was sich bei rechtsklick öffnet)
    auch ohne gui zu verwenden, innerhalb geht das ja mit

    [autoit]

    GUICtrlCreateContextMenu(-1)

    [/autoit]


    nen passendes Beispiel dazu ist in der Hilfe vorhanden,

    was ich machen will ist das es in etwa so funktioniert

    [autoit]


    '#include <Misc.au3>

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

    While 1
    If _IsPressed(02) Then
    Sleep(1000)
    $x += 1
    If $x = 3 Then
    GUICtrlCreateContextMenu(-1)
    ;bzw die befehlfolge zum erzeugen des Context menüs)
    EndIf
    Else
    $x = 0
    EndIf
    Wend

    [/autoit]

    also das wenn 3 sec. die rechte maustaste gedrückt wurde. das veränderte Context menü erscheint,
    kann man den
    GUICtrlCreateContextMenu
    befehl dafür benutzten, oder gibts nen include oder andere befehle dafür?

    würd mich sehr über eure hilfe freuen

    lg Remus

    Einmal editiert, zuletzt von Remus (20. November 2008 um 19:26)

  • Du kannst eine unsichtbare GUI und _GUICtrlMenu_TrackPopupMenu nehmen :) ( Hilfe-Bsp etwas geändert)

    Spoiler anzeigen
    [autoit]

    #include <GuiMenu.au3>
    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    $Handle = GUICreate("")

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

    Global Enum $idOpen = 1000, $idSave, $idInfo, $idExit

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

    Local $hMenu

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

    $hMenu = _GUICtrlMenu_CreatePopup ()
    _GUICtrlMenu_InsertMenuItem ($hMenu, 0, "Open", $idOpen)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 1, "Save", $idSave)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 2, "", 0)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 3, "Info", $idInfo)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 4, "EXIT", $idExit)

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

    Func OnAutoItExit()
    _GUICtrlMenu_DestroyMenu ($hMenu)
    EndFunc

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

    ; Register message handlers
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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


    While 1
    If _IsPressed(02) Then
    Sleep(1000)
    $x += 1
    If $x = 3 Then
    _GUICtrlMenu_TrackPopupMenu ($hMenu, $Handle)
    EndIf
    Else
    $x = 0
    Sleep(10)
    EndIf
    Wend

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

    ; Handle WM_COMMAND messages
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Switch $iwParam
    Case $idOpen
    _WinAPI_ShowMsg ("Open")
    Case $idSave
    _WinAPI_ShowMsg ("Save")
    Case $idInfo
    _WinAPI_ShowMsg ("Info")
    Case $idExit
    Exit
    EndSwitch
    EndFunc ;==>WM_COMMAND

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • ok das hilft mir schonmal einganzes stück weiter,
    aber ich hab 2 neue probleme^^

    das erste ist das sich das normale context menü in firefox (dort will ich es benutzten), trotzdem mit öffnet,
    das 2te ist das es sich nicht schließt wenn man ausserhalb des context menüs klickt,

    für das 1te problem hab ich gar keine idee wie man das machen kann,
    beim 2ten kam mir die idee ihrgendwie abzufragen wo sich der mauszeiger befindet und dann wenn ein mausklick gemacht wird zu schauen ob er innerhalb oder ausserhalb des menüs war

  • Wenn du die GUISichtbar machst, geht es :)

    Spoiler anzeigen
    [autoit]

    #include <GuiMenu.au3>
    #include <GuiConstantsEx.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    $Handle = GUICreate("",10,10,-40,-40,$WS_POPUP)

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

    Global Enum $idOpen = 1000, $idSave, $idInfo, $idExit

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

    Local $hMenu

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

    $hMenu = _GUICtrlMenu_CreatePopup ()
    _GUICtrlMenu_InsertMenuItem ($hMenu, 0, "Open", $idOpen)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 1, "Save", $idSave)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 2, "", 0)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 3, "Info", $idInfo)
    _GUICtrlMenu_InsertMenuItem ($hMenu, 4, "EXIT", $idExit)

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

    Func OnAutoItExit()
    _GUICtrlMenu_DestroyMenu ($hMenu)
    EndFunc

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

    ; Register message handlers
    GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")

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


    While 1
    If _IsPressed(02) Then
    Sleep(1000)
    $x += 1
    If $x = 3 Then
    GUISetState()
    WinMove($Handle,"",MouseGetPos(0),MouseGetPos(1))
    _GUICtrlMenu_TrackPopupMenu ($hMenu, $Handle)
    GUISetState(@SW_HIDE)
    WinMove($Handle,"",-40,-40)
    ConsoleWrite("dsf" & @CRLF)
    EndIf
    Else
    $x = 0
    Sleep(10)
    EndIf
    Wend

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

    ; Handle WM_COMMAND messages
    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Switch $iwParam
    Case $idOpen
    _WinAPI_ShowMsg ("Open")
    Case $idSave
    _WinAPI_ShowMsg ("Save")
    Case $idInfo
    _WinAPI_ShowMsg ("Info")
    Case $idExit
    Exit
    EndSwitch
    EndFunc ;==>WM_COMMAND

    [/autoit]