![]() |
Menüpunkt eines fremden Programms betätigen
Guten Morgen :D
jetzt knoble ich gerade an folgendem Problem: Ich möchte, dass mein Programm in einer fremden Anwendung automatisch einen Menüpunkt betätigt, und zwar im Hauptmenü den Punkt "Datei" und darunter den Punkt "Beenden". Das Handle des Hauptmenüs und des Popup-Menüs "Datei" habe ich.
Delphi-Quellcode:
Wie komme ich denn jetzt an diesen Menüpunkt und wie kann ich ihn betätigen?
var hWindow: HWND;
hMenue, hDatei: HMENU; (...) hWindow := FindWindow(nil, 'Biss+'); hMenue := GetMenu(hWindow); if hMenu(hwindow) <> 0 then begin hDatei := GetSubMenu(hMenue, 0); if hDatei <> 0 then begin // Hier will ich jetzt den Menüpunkt "Beenden" auswählen und betätigen end; end; |
Re: Menüpunkt eines fremden Programms betätigen
Hi,
Warum schliesst du jene Anwenung nicht einfach per WM_CLOSE? Sollte auf dasselbe hinauskommen. |
Re: Menüpunkt eines fremden Programms betätigen
Ich schreibe ein Testprogramm, das unter anderem das Menü eines anderes Programms testen soll. Ich muss auch andere Menüpunkte noch ansprechen können. Ich habe das Problem also nicht nur beim Menüpunkt "Beenden".
|
Re: Menüpunkt eines fremden Programms betätigen
Ein Klick auf ein Menü generiert in der MessageLoop des Programmes eine WM_COMMAND Nachricht. Siehe dazu auch meine NonVCL Tutorials.
|
Re: Menüpunkt eines fremden Programms betätigen
Das habe ich mir schon gedacht. Aber wie kann ich jetzt einen bestimmten Menüpunkt ansprechen? Da brauche ich doch ein Handle, oder?
|
Re: Menüpunkt eines fremden Programms betätigen
Hi,
Habe ![]() in VB gefunden, um z.B bei Notepad "Datei", "Öffnen.." automatisch auszuführen. In Delphi sieht's so aus:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var hWnd : Integer; hMainMenu : Integer; hMenu : Integer; MenuID : Integer; begin hWnd := FindWindow('Notepad', nil); If hWnd <> 0 Then begin hMainMenu := GetMenu(hWnd); hMenu := GetSubMenu(hMainMenu, 0); MenuID := GetMenuItemID(hMenu, 1); SendMessage(hWnd, WM_COMMAND, MenuID, 0); end; end; |
Re: Menüpunkt eines fremden Programms betätigen
Kuck noch mal mein Edit an. Du holst dir mit GetMenuItemID die ID des Punktes und sendest dann ein WM_COMMAND an das Fenster mit der ID im LoWord des wParam und dazu benutzt du MAKEWPARAM.
|
Re: Menüpunkt eines fremden Programms betätigen
Es hat funktioniert. Vielen Dank.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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