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/)
-   -   Anderes Program -> Menü klicken (https://www.delphipraxis.net/158387-anderes-program-menue-klicken.html)

djrick 15. Feb 2011 16:39


Anderes Program -> Menü klicken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Ich versuche schon seit Stunden mein Delphi programm dazu zu überreden in einem anderen Programm auf einen Unterpunkt im Menü zu klicken.

Mit diesem Code ermittle ich das Handle des anderen Programms:
Delphi-Quellcode:
function FindWindowByTitle(WindowTitle: string): Hwnd;
var
  NextHandle: Hwnd;
  NextTitle: array[0..260] of char;
begin
  // Get the first window
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
  while NextHandle > 0 do
  begin
    // retrieve its text
    GetWindowText(NextHandle, NextTitle, 255);
    if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
    begin
      Result := NextHandle;
      Exit;
    end
    else
      // Get the next window
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
  end;
  Result := 0;
end;
Das funktioniert auch wunderbar.
Nun hab ich das Handle des Programms und nun möchte ich automatisch auf "Start Capture" klicken lassen....wie stelle ich das an? Wie man sieht gibt es dafür keinen Tasten-Shortcut. Der "klick" muss auch unabhängig von der Position des Programms auf dem Bildschirm sein.

Ich habe mir überlegt, dass es einfach wäre zu simulieren: ALT drücken => "nach unten taste" => 3x nach rechts bis "capture" => dann "ENTER"
Allerdings scheitert es schon daran, dass ich zwar Buchstaben simulieren kann mit:
Delphi-Quellcode:
PostMessage(h,WM_KEYDOWN,68,0);
      PostMessage(h,WM_CHAR,68,0);
      PostMessage(h,WM_KEYUP,68,0);
jedoch das drücken der ALT Taste funktioniert anscheinend nicht richtig.

Probiert hab ich es mit:
Delphi-Quellcode:
PostMessage(h,WM_SYSKEYDOWN,VK_MENU,0);
PostMessage(h,WM_SYSKEYUP,VK_MENU,0);
Für Tipps wäre ich sehr dankbar.

DeddyH 15. Feb 2011 17:37

AW: Anderes Program -> Menü klicken
 
Ich hoffe, ich habe nicht allzuviele Fehler gemacht, aber hier ein Beispiel, um in Notepad "Speichern unter" auszulösen:
Delphi-Quellcode:
procedure TfrmTest.btnSaveClick(Sender: TObject);
var
  Wnd: HWND;
  mnu: hMenu;
  ID: UINT;
begin
  //Fensterhandle ermitteln
  Wnd := FindWindow('notepad',nil);
  if Wnd <> 0 then
    begin
      //Menü des Fensters ermitteln
      mnu := GetMenu(Wnd);
      if mnu <> 0 then
        begin
          //Untermenü des ersten Items ("Datei")
          mnu := GetSubMenu(mnu,0);
          if mnu <> 0 then
            begin
              //4. Item ("Speichern unter")
              ID := GetMenuItemID(mnu,3);
              if ID <> 0 then
                //auslösen
                PostMessage(Wnd,WM_COMMAND,ID,0);
            end;
        end;
    end;
end;

djrick 15. Feb 2011 18:20

AW: Anderes Program -> Menü klicken
 
Perfekt.

Vielen Dank funktioniert wunderbar :)


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