Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Menühandle einer fremden Anwendung ermitteln? (https://www.delphipraxis.net/75682-menuehandle-einer-fremden-anwendung-ermitteln.html)

hitzi 23. Aug 2006 14:14


Menühandle einer fremden Anwendung ermitteln?
 
Hallo,

wie kann ich das Menühandle einer fremden Anwendung ermitteln? Das Handle der Anwendung habe ich, weiterhin komme ich auch - so weit ich das jetzt überblicken kann - auch an jedes Control, wie Buttons, Edits, .... Nur an das Menü komm ich nicht ran. Einen Hotkey für den gewünschten Menüpunkt ist leider auch nicht vorhanden.

Ich muss aber über das Menü einen Menüpunkt öffnen. Habe auch schon probiert über die Simulation der Tastatureingaben den Menüpunkt auszuwählen, was aber zu keiner Reaktion im Programm führte.

Quelltext zur Simulation der Tastatureingabe(dWindowHandle ist das Handle des Hauptfensters der Anwendung):
Delphi-Quellcode:
PostMessage(dWindowHandle, WM_SETFOCUS, 0, 0);
      PostMessage(dWindowHandle, WM_KEYDOWN, VK_LMENU, 0);
      Sleep(100);
      PostMessage(dWindowHandle, WM_KEYUP, VK_LMENU, 0);
      Sleep(100);
      PostMessage(dWindowHandle, WM_KEYDOWN, VK_DOWN, 0);
      Sleep(100);
      PostMessage(dWindowHandle, WM_KEYUP, VK_DOWN, 0);
      Sleep(100);
      PostMessage(dWindowHandle, WM_KEYDOWN, VK_DOWN, 0);
      Sleep(100);
      PostMessage(dWindowHandle, WM_KEYUP, VK_DOWN, 0);
      Sleep(100);
      PostMessage(dWindowHandle, WM_KEYDOWN, VK_RETURN, 0);
      Sleep(100);
      PostMessage(dWindowHandle, WM_KEYUP, VK_RETURN, 0);
Gibt es vielleicht sogar einen direkteren Weg ein Menüelement ferngesteuert auszuwählen?

Vielen Dank

Flocke 23. Aug 2006 15:10

Re: Menühandle einer fremden Anwendung ermitteln?
 
Versuche doch einfach, die Id herauszufinden, die beim WM_COMMAND übergeben wird, wenn man den entsprechenden Menüpunkt auswählt (hieß das Tool Spy++?). Die zu schicken müsste denselben Effekt haben wie manuell den Menüpunkt auszuwählen.

// EDIT

Anderer Weg (ungetestet):
Delphi-Quellcode:
hMenu := GetMenu(WindowHandle);
hPopup := GetSubMenu(hMenu); // das erste Popupmenü
idItem := GetMenuItemID(hPopup, 3); // der vierte Eintrag
PostMessage(WindowHandle, WM_COMMAND, idItem, 0);

hitzi 24. Aug 2006 06:39

Re: Menühandle einer fremden Anwendung ermitteln?
 
Vielen Dank Volker. Dein zweiter Lösungsansatz ist perfekt.
Nur eine Kleinigkeit fehlte:
Delphi-Quellcode:
hPopup := GetSubMenu(hMenu, 0); // für das erste Popupmenü muss noch der zweite Parameter 0 übergeben werden
Viele Grüße

Flocke 24. Aug 2006 06:58

Re: Menühandle einer fremden Anwendung ermitteln?
 
Zitat:

Zitat von hitzi
Nur eine Kleinigkeit fehlte: ...

Sorry - bin in letzter Zeit immer etwas gehetzt :pale: (zu viel Arbeit, zu wenig Zeit).

hitzi 24. Aug 2006 07:00

Re: Menühandle einer fremden Anwendung ermitteln?
 
Hehe ... macht doch nichts. Kann jeden mal passieren. Außerdem ist das doch kein kritischer Fehler.

Danke nochmal :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz