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üpunkt eines fremden Programms betätigen (https://www.delphipraxis.net/18469-menuepunkt-eines-fremden-programms-betaetigen.html)

Cuchulainn 19. Mär 2004 08:29


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:
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;
Wie komme ich denn jetzt an diesen Menüpunkt und wie kann ich ihn betätigen?

toms 19. Mär 2004 10:05

Re: Menüpunkt eines fremden Programms betätigen
 
Hi,

Warum schliesst du jene Anwenung nicht einfach per WM_CLOSE?
Sollte auf dasselbe hinauskommen.

Cuchulainn 19. Mär 2004 10:06

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".

Luckie 19. Mär 2004 10:20

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.

Cuchulainn 19. Mär 2004 10:22

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?

toms 19. Mär 2004 10:26

Re: Menüpunkt eines fremden Programms betätigen
 
Hi,

Habe hier ein Beispiel
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;

Luckie 19. Mär 2004 10:31

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.

Cuchulainn 19. Mär 2004 10:40

Re: Menüpunkt eines fremden Programms betätigen
 
Es hat funktioniert. Vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 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