![]() |
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:
Gibt es vielleicht sogar einen direkteren Weg ein Menüelement ferngesteuert auszuwählen?
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); Vielen Dank |
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); |
Re: Menühandle einer fremden Anwendung ermitteln?
Vielen Dank Volker. Dein zweiter Lösungsansatz ist perfekt.
Nur eine Kleinigkeit fehlte:
Delphi-Quellcode:
Viele Grüße
hPopup := GetSubMenu(hMenu, 0); // für das erste Popupmenü muss noch der zweite Parameter 0 übergeben werden
|
Re: Menühandle einer fremden Anwendung ermitteln?
Zitat:
|
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 12:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz