![]() |
FindWindow - gefundenes Fenster anzeigen und weitergeben
Sorry .. falsches Unterforum >.<
Aloa, ich bin gerade am programmieren eines Tools. Dieses habe ich auch schon fast fertig gestellt .. bis auf eine Funktion! Ich erkläre das Programm besser erst mal. Als erstes das wichtigste Stück vom Source.
Delphi-Quellcode:
Hiermit wird ja (ich habe einfach mal Word genommen) das Programm Word gesucht, gefunden, die Taste C gedrückt und anschließend wieder los gelassen.
procedure TForm1.Timer51Timer(Sender: TObject);
var Hwnd : THandle; dwKey : DWord; begin Hwnd := FindWindow('Nil, 'Word'); dwKey := Ord('C'); myPostMessageA(Hwnd, WM_KEYDOWN, dwKey, MapVirtualKey(dwKey, 0)); myPostMessageA(Hwnd, WM_KEYUP, dwKey, MapVirtualKey(dwKey, 0)); end; Nun kommt der Teil der noch fehlt und auf den ich auch einfach nicht komme, Google wird mich schon als Extrem Spam Searcher kennen (Ironie). So wie meine Prozedur zur Zeit aussieht, fragt der Timer immer wieder nach ob Word da ist, er findet es auch, aber was ist wenn ich Word 2 mal öffne, ja dann wird immer das Word gefunden, was vor dem 2ten liegt. Deshalb möchte ich gern einen Button einbauen und auf diesen FindWindow setzen, der ohne Schleife fungiert. Da jedes Programm (in diesem Fall Word) eine ID/Parameter/Prozessnummer/.. hat, möchte ich das diese, nach dem Klick auf dem Button, in einem Editfeld angezeigt wird. Jetzt kommt nun wieder der Timer in´s Spiel, da dieser ja nun kein FindWindow mehr hat, soll er jetzt die ID/Para.. aus dem Editfeld lesen und somit zu 100% den Tastendruck immer an das richtige Word senden, egal ob es im Vorder- oder Hindergrund ist. So ich denk mal jetzt wisst ihr wo rum es mir geht ^^. Ich bitte um eure Hilfe, und hoffe das einer so etwas schon mal gemacht/gesehen hat oder eine andere Möglichkeit kennt mit gleichem Effekt. mfg Lostriga |
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Zitat:
Ich verstehe nicht ganz den Sinn des Buttons. Wenn mehrere Instanzen offen sind, wie wird entschieden, welche genommen werden soll? |
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Ähm ja .. habe gemerkt das ich mich selber ein bisschen falsch ausgedrückt habe.
Beim weiteren googeln habe ich zwar keine Lösung gefunden, aber eine Art der besseren Beschreibung. Wenn man mit FindWindow ein Fenster findet (in diesem Fall war es ja Word), findet diese Funktion IMMER das Word, was sich im Vordergund befindet, d.h. hat man 2 mal Word geöffnet findet FindWindow dieses was sich vor dem anderen befindet. Holt man das 2te Word vor das erste, wird das 2te Word gefunden weil es vor dem Ersten ist. Da jedes Programm ein Handle hat, welches sich bei jedem Programmstart ändert, möchte ich gern dieses, mit FindWindow, gefundene Handle in ein Editfeld übertragen, womit ich somit das Handle des einen Word sehen kann. Der Timer soll dann das Handle nicht mehr aus dem FindWindow nehmen, sondern die "ID" die in das Editfeld übertragen wurde. Somit kann ich dann nämlich sagen, er soll genau dieses Word mit dieser ID benutzen, womit ich das andere Word in den Vordergrund holen kann, dieses aber nicht gefunden wird.. Erst wenn ich den Button erneut klicke, kann das Word was sich im Vordergrund befindet gefunden werden, womit dann dessen Handle in das Editfeld übertragen wird und der Timer dann diese ID benutzt. |
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Warum verwendest du nicht EnumWindows()?
Diese Funktion enumeriert alle Toplevel-Fenster und gibt deren Fensterhandle zurück. |
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Habe eben mal gegoogelt und das gefunden:
![]() Auch von dieser Site ^^. Zitat:
|
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Zitat:
![]() |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Multimedia" nach "Windows API / MS.NET Framework API" verschoben.
|
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Habs jetzt immer versucht .. aber ich bekomme es nicht hin. :coder2:
Kann mir da bitte vielleicht einer so ne kurze Demo oder so machen die alle Handles anzeigt? Ich verzweifle. :cry: |
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Ein Beispiel steht ja in #5..oder wo genau kommst du nicht weiter?
|
Re: FindWindow - gefundenes Fenster anzeigen und weitergeben
Ok kann geclosed werden .. habe mir doch etwas zusammen basteln können was auch einmanfrei funktioniert!
Delphi-Quellcode:
An dich toms, einliebes Dankeschön für das Enumwindows.
procedure TForm1.Button1Click(Sender: TObject);
begin Handle := FindWindow('D3D Window', '....'); Listbox1.Items.Clear; EnumWindows(@EnumWinProc, DWord(Listbox)); If Listbox1.Items.Text = '' Then Button1.Enabled := True Else begin Edit1.Enabled := True; Combobox1.Enabled := True; Button1.Enabled := False; Button2.Enabled := True; end; end; procedure TForm1.Bot1StopClick(Sender: TObject); begin Button1.Enabled := True; Listbox1.Clear; Button2.Enabled := False; Edit1.Enabled := False;; Combobox1.Enabled := False; Timer1.Enabled := False; end; procedure TForm1.Timer1Timer(Sender: TObject); var dwKey : DWord; begin if (Combobox1.ItemIndex <> -1) then begin dwKey := VK_F1 + Combobox1.ItemIndex; myPostMessageA(Handle1, WM_KEYDOWN, dwKey, MapVirtualKey(dwKey, 0)); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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 by Thomas Breitkreuz