![]() |
Tastendruck an Fremdsoftware
Hallo Zusammen,
es gibt zwar schon viel zu dem Thema, aber leider habe ich die Lösung damit nicht zusammenbekommen. Ich übergebe verschiedene Daten an eine Fremdsoftware und drücke dort auch Buttons. Das klappt mittlerweile auch. Jetzt muss ich in dem Menü einen Eintrag auswählen. Das ist ein Menü, dass wie ein MainMenü aussieht. Ich kann zwar das Handle von der Anwendung und das Handle des gesamten Menüs ermitteln, aber nicht die einzelnen Menüpunkte. Jetzt war mein Gedanke, dass die der Software einfach ein paar Tastendrücke übermittle. Die Taste F10 aktiviert das Menü, genau wie die ALT-Taste.
Delphi-Quellcode:
Ich habe versucht, sowohl dem Menür selber, als auch der ganzen App eine Taste zu übermitteln. Leider reagiert sie nicht.
procedure TFrm_BD_Orga.Select_Module(hApp: HWND; Module: integer);
var I: Integer; wnd: HWND; CName: array [0 .. 255] of Char; begin if hApp = 0 then begin hApp := FindWindow(nil, 'Fremdsoftware'); //Handle der Software GetClassName(hApp, CName, 256); wnd := FindWindowEx(hApp, 0, CName, 'MenuStrip1'); // Handle des Menüs end; PostMessage(wnd, WM_KEYDOWN, VK_F10, 0); PostMessage(wnd, WM_KEYUP, VK_F10, 0); PostMessage(wnd, WM_KEYDOWN, VK_RIGHT, 0); PostMessage(wnd, WM_KEYUP, VK_RIGHT, 0); for I := 0 to Module -1 do begin PostMessage(wnd, WM_KEYDOWN, VK_Down, 0); PostMessage(wnd, WM_KEYUP, VK_Down, 0); end; PostMessage(wnd, WM_KEYDOWN, VK_RETURN, 0); PostMessage(wnd, WM_KEYUP, VK_RETURN, 0); end; Hat jemand eine Idee? Vielen Dank Patrick |
AW: Tastendruck an Fremdsoftware
![]() |
AW: Tastendruck an Fremdsoftware
Ich will keinen auf Schlauscheißer machen, aber wenn du den ersten Satz der
![]() |
AW: Tastendruck an Fremdsoftware
Hallo Zusammen,
Ich habe gerade noch ein bißchen getestet und probiert und dabei eine Lösung gefunden, die ich morgen in schöner bauen werde:
Delphi-Quellcode:
Damit scheint es zu funktionieren... Offensichtlich brauche ich das Menü garnicht mit ALT oder F10 zu aktivieren. Mit dem entsprechenden Handel kann ich darin direkt navigieren...
procedure TForm1.Button1Click(Sender: TObject);
var I: Integer; wnd, hApp: HWND; CName: array [0 .. 255] of Char; begin hApp := FindWindow(nil, 'FremdSoftware'); //Handle der Software GetClassName(hApp, CName, 256); wnd := FindWindowEx(hApp, 0, CName, 'Menue'); // Handle des Menüs //Wählt den ersten Hauptmenüpunkt PostMessage(wnd, WM_KEYDOWN, VK_Right, 0); PostMessage(wnd, WM_KEYUP, VK_Right, 0); //Wählt den zweiten Hauptmenüpunkt PostMessage(wnd, WM_KEYDOWN, VK_Right, 0); PostMessage(wnd, WM_KEYUP, VK_Right, 0); //Öffnet mit ENTER das PullDownMenü des zweiten Hauptmenüpunkt PostMessage(wnd, WM_KEYDOWN, VK_RETURN, 0); PostMessage(wnd, WM_KEYUP, VK_RETURN, 0); //Markiert den ersten Eintrag des PullDownMenüs PostMessage(wnd, WM_KEYDOWN, VK_Down, 0); PostMessage(wnd, WM_KEYUP, VK_Down, 0); //Markiert den zweiten Eintrag des PullDownMenüs PostMessage(wnd, WM_KEYDOWN, VK_Down, 0); PostMessage(wnd, WM_KEYUP, VK_Down, 0); //Markiert den dritten Eintrag des PullDownMenüs PostMessage(wnd, WM_KEYDOWN, VK_Down, 0); PostMessage(wnd, WM_KEYUP, VK_Down, 0); //Markiert den vierten Eintrag des PullDownMenüs PostMessage(wnd, WM_KEYDOWN, VK_Down, 0); PostMessage(wnd, WM_KEYUP, VK_Down, 0); //Führt den vierten (markierten) Menüpunkt aus PostMessage(wnd, WM_KEYDOWN, VK_RETURN, 0); PostMessage(wnd, WM_KEYUP, VK_RETURN, 0); end; Gute Nacht Patrick |
AW: Tastendruck an Fremdsoftware
Zitat:
|
AW: Tastendruck an Fremdsoftware
Ich bin eher ein fan von
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12: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