![]() |
Andere Applikation Kontrollieren
Hi,
ich hab eine frage, ich hoffe das ich ist das richtige unterforum und es geht überhaupt, ich habe ein programm da, bei dem man eine nummer eintragen muss und dann einen button klicken, dannach spuckt er etwas aus, ich würde gerne um die nummer nicht jedesmal neu einzugeben (hat keine history und keine speicherfunktion, und nummern können variieren) per delphi programm die nummer eintragen lassden, den button betätigen (und wenn möglich, aber muss nicht sein, ein angezeigtes image ODER ein label auslesen) MfG Hybrid666 btw ich will keinen ganzen coe, nur die commands und die funktionsweiße, will ja auch was lernen ;) Danke Schonmal. |
Re: Andere Applikation Kontrollieren
Hi.
Ich glaube wenn du die Frage das nächste Mal genauer formulierst, dann bekommst du schneller ne Antwort. Also verstehe ich das richtig, du willst haben das dein Programm etwas in das Edit-Feld eines anderen Programmes schreibt. Folgender Code, mit Erklärung, da du ja was lernen willst :-)
Delphi-Quellcode:
Zu den einzelnen Funktionen:
function GetFocussedWindow(ParentWnd:HWnd):HWnd;
var OtherThreadID,Buffer : DWord; begin OtherThreadID:=GetWindowThreadProcessID(ParentWnd, @Buffer); if AttachThreadInput(GetCurrentThreadID, OtherThreadID, true) then begin Result:=GetFocus; AttachThreadInput(GetCurrentThreadID, OtherThreadID, false); end else Result:=0; end; var WindowHandle : HWND; begin WindowHandle := GetFocussedWindow(GetForegroundWindow()); PostMessage(WindowHandle , wm_KeyDown, Ord('A'),0); end;
Delphi-Quellcode:
PostMessage ist soweit ich weiß wie SendMessage, nur das PostMessage keine Bestätigung anfordert, ob die Message auch wirklich gesendet wurde. Damit senden wir Messages^^
function PostMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL; stdcall;
Zitat:
Die Anweisung
Delphi-Quellcode:
führt also in diesem fokussiertem Objekt die Anweisung wm_KeyDown aus, und drückt die Taste A, welche natürlich vorher in einen Ordinalwert umgewandelt werden muss.
PostMessage(WindowHandle , wm_KeyDown, Ord('A'),0);
Ich hoffe du hast wenigstens einen Teil verstanden :-P Dieser Code funktioniert nur wenn du den Fokus im Edit-Feld hast wo die Zahlen reinsollen, den Buttpn klickst du auf ähnliche Weise. |
Re: Andere Applikation Kontrollieren
danke, das hat mir erstmal (teilweiße) geholfen.
Also genauer formuliert: Ich starte mein programm und das programm des 3. herstellers, das 3. hersteller programm ist so aufgebaut: man gibt eine nummer in ein edit feld ein nd drückt einen button, dadurch begint die routine des programms und es sucht bestimmte dinge im internet. da das programm aber keine history hat und die nummer ständig variiert (je nachdem was man nachsehen will) will ich ein programm schreiben, das eine liste der nummern mit erklärung beinhaltet, wenn man nun mein programm tartet, wählt eine nummer aus und drückt start soll mein programm die nummer ins andere eintragen und den button des anderen programms starten. Ich hoffe das ist einleuchtender. Werde nun schaun wie weit ich mit obigem code komme ^^. und noch ne kleine frage, kann man das auch irgendwie ohne das fokusierte objekt achen? ich kann ja über ResHacker oder so die ID rausbekommen falls das geht. Das Handle des fensters kann ich ja problemlos mit FindWindows machen, aber wie bekomme ich das handle des editfeldes? Mir ist grade nochwas eingefallen...wenn man es nach deiner möglichkeit macht kann ich das auch mit fake keystrokes machen, wenn ich das edit feld sowieso fokusiert hab kann ich ja mit meinem programm auch simulieren das die tasten gedrückt werden, dann einmal tab das der button gewählt wird und einmal enter. Aber noch was: ich will das auch evtl so machen: ich will das das programm des anderen erst gestartet wird wenn ichmein zeug ausgesucht habe, das man nur ein programm dauerhaft anhat... MfG Hybrid666 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 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