Context Menü in fremder Anwendung

  • Morgen,

    habe hier ein scheinbar unlösbares problem: Ich versuche ganz einfach nur in einer fremden anwendung ein Popup-Context Menü zu erstellen. Eigentlich nix aufregendes... es will jedoch einfach nicht klappen und ich verzweifle hier mittlerweile. In meiner eigenen GUI ist das kein problem. In der fremden passiert nix. Das Menü wird zwar erstellt, das sieht man daran,dass ein gültiges handle zurückgegeben wird,aber es ist nichts zu sehen.

    Hier mal ein bsp:

    [autoit]

    #include <WinAPI.au3>
    #include<GuiMenu.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include<Constants.au3>

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

    HotKeySet('{ESC}', '_EXIT')
    HotKeySet('{SPACE}',"Mach")
    $NOTEPID=Run("NOTEPAD.exe")
    WinWait("Editor")

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

    While 1
    sleep(100)
    WEnd

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

    Func _EXIT()
    Exit
    EndFunc

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

    Func OnAutoItExit()
    ProcessClose($NOTEPID)
    EndFunc

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

    func mach()
    ;WinKill("[CLASS:#32768]")
    local $h2Wnd=WinGetHandle("Editor")
    Local $hMenu

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

    $hMenu = _GUICtrlMenu_CreatePopup()
    ConsoleWrite($hMenu)
    _GUICtrlMenu_InsertMenuItem($hMenu, 0, "TEST", 1000)
    _GUICtrlMenu_TrackPopupMenu($hMenu, $h2Wnd,500,500)
    ;_GUICtrlMenu_DestroyMenu($hMenu)

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

    EndFunc

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

    Vielleicht weiss ja jemand,warum autoit hier wieder rumzickt.
    Gruß,
    taugenix

    Einmal editiert, zuletzt von taugenix (11. August 2012 um 01:02)

  • Falls jemand mal dasselbe vorhat. Ich konnte es folgendermaßen lösen:

    Klickt man mit rechts in die fremde gui so erscheint zunächst das gui-eigene context-menü.
    Dieses wird mit winkill(..) gekillt. Anschließend ein neues, SEHR KLEINES fenster erzeugen mit guicreate(...,$WS_POPUP).Und zwar genau an der Position der Maus.Es kann auch nur 1 Pixel groß sein, vielleicht kann man auch einfach eine DummyGui machen,ich weiss net.. Diesem kann nun ganz normal mit GuiCtrlCreateContextMenu ein Kontextmenü zugeordnet werden, es muss nur noch mit rechts geklickt werden-> MouseClick("right") und das eigene Kontextmenü erscheint. :rock:

  • Du kannst das Popup Menü auch für eine GUI erzeugen die nicht per GUISetState sichtbar geschalten wurde. Außerdem muss dieses Fenster auch nicht da sein, wo nachher das Menü erscheinen soll. Das Menü hat ein eigenes Fenster und ist größtenteils vom Parent unabhängig.
    Das PopupMenü erscheint immer im Vordergrund, egal wo das Hauptfenster ist. _GUICtrlMenu_TrackPopupMenu kann außerdem das Menü direkt an der Cursorposition erzeugen. wenn du keine Koordinaten angibst.
    Zusammengefasst, als GUI für das Popup Menü reicht das hier:

    [autoit]

    $hWnd = GUICreate("", 0, 0, 0, 0)

    [/autoit]

    Ach ja, pushen wird hier nicht gern gesehen ;).

  • Danke erstmal für die Antwort. Ja,habe eben auch gemerkt, dass das Popup menu sehr flexibel ist...

    Ach ja, pushen wird hier nicht gern gesehen

    Ich hab nur 1 mal gepusht.mein letzter beitrag war nur meine lösungsvariante,falls tatsächlich jemand dasselbe vorhaben sollte....