![]() |
Funktion für mehrere Fenster (n help)
hi, ich habe hier diese funktion gefunden:
Delphi-Quellcode:
die funktion sollte mir ermöglichen fenster mit dem gleichen titel anzusprechen. In meinem Fall wäre das mit
type THandleArray = array of HWND;
function FindAllWindows(const WindowCaption: String): THandleArray; type PParam = ^TParam; TParam = record WindowCaption: String; Res: THandleArray; end; var Rec: TParam; function _EnumProc(_hWnd: HWND; _LParam: LPARAM): LongBool; stdcall; var cTitle: array[0..1023] of Char; begin with PParam(_LParam)^ do begin GetWindowText(_hWnd, cTitle, SizeOf(cTitle)); if (CompareText(cTitle, WindowCaption) = 0) then begin SetLength(Res, Length(Res)+1); Res[Length(Res)-1] := _hWnd; end; Result := True; end; end; begin Rec.WindowCaption := WindowCaption; SetLength(Rec.Res, 0); EnumWindows(@_EnumProc, Integer(@Rec)); Result := Rec.Res; end; Postmessage(); Also nehmen wir an ich habe 2 programme am laufen (2 mal das gleiche) wie kann ich damit nun auf ein bestimmtes der beiden fenster zugreifen? wie wird das angewendet? (postmessage) dankeschön =) |
Re: Funktion für mehrere Fenster (n help)
Du brauchst ein zweites Unterscheidungsmerkmal, sonst kannst du die Fenster nicht auseinander halten.
|
Re: Funktion für mehrere Fenster (n help)
danke, hast mir fast geholfen.
bei der beschreibung der oben geposteten funktion stand dabei dass sie genau für solche zwecke sei (2 gleiche fenster zu unterscheiden). hab noch gehört es würde z.B. mit lauf"zeit" unterscheidbar sein aber wie ich das jetzt umsetzen kann weiß ich leider immer noch nicht. vll findet sich ja noch wer der mir helfen kann/will =) |
Re: Funktion für mehrere Fenster (n help)
@110110:
Erst einmal herzlich willkommen inder der DP :dp: Du hast geschrieben: Zitat:
den Quelltext gefunden hast. Gruß Wolfgang |
Re: Funktion für mehrere Fenster (n help)
Zitat:
und dieses Array, bzw. die Fenster-Handle darin, kannst du nun auswerten, wie du willst und wie man es mit Arrays so im allgemeinen auch macht. Zitat:
Hier bekommst du erstmal nur die Handle von allen (Toplevel)Fenstern, welche den gesuchten Namen im Titel haben. |
Re: Funktion für mehrere Fenster (n help)
Die Fenster unterscheiden sich durch ein unterschiedliches Handle. D.h. wenn zwei Fenster mit dem gleichen Titel geöffnet sind, gibt es zwei unterschiedliche Handles im THandleArray.
|
Re: Funktion für mehrere Fenster (n help)
danke erstmal an alle!
also, wo ich die function genau gefunden habe weiß ich leider nicht mehr *schäm* (stand aber auch nicht mehr dabei "leider") wie ich euch jetzt verstanden habe gibt mir die function keinen normalen handle wie bei findwindow() sondern unterscheidet bei gleichen titeln auch noch bzw. gibt mir dann andere handles? hab leider noch nicht sehr viel erfahrung mit hwnd und hab daher auch noch kA wie ich jetzt sagen kann sende postmessage an das bestimmte handle das ich durch die function ausgewählt hab oO könnt ihr mir bitte ein wenig unter die arme greifen? :) hab hier mal was versucht:
Delphi-Quellcode:
habs grad mal am rechner ausprobiert und dachte ich könnte jetzt einfach im array unterscheiden zwischen 1. und 2. instanz vom rechner aber das ging leider nicht. postmessage sendet trotzdem noch an den zuletzt aktiven rechner.
procedure TForm1.Button1Click(Sender: TObject);
var h:thandlearray; begin h := FindAllWindows('Rechner'); //-- if h[0]<>0 then //0 oder 1 instanz begin sleep(4000); PostMessage(hwnd(h[0]), WM_KeyDown, $39, 0); //0 oder 1 instanz Application.ProcessMessages; //-- end; end; |
Re: Funktion für mehrere Fenster (n help)
Die FindWindow-Funktion ermittelt das Handle des ersten gefundenen Top-Level-Fensters.
Wenn z.B. zwei Notepad Instanzen geöffnet sind mit dem gleichen Titel, dann findet FindWindow immer nur eines der Fenster resp. gibt nur immer ein Handle einer Notepad Instanz zurück. FindAllWindows liefert dir alle Handles der geöffneten Top-Level-Fenster, bei welchen der Fenstertitel mit dem Parameter WindowCaption übereinstimmt. Diese Handles werden im Array THandleArray zurückgegeben. Anwendungsbeispiel der Funktion:
Delphi-Quellcode:
var
FensterHandles: THandleArray; i: Smallint; begin FensterHandles := FindAllWindows('Unbenannt - Editor'); // Alle Fenster mit Titel 'Unbenannt - Editor' suchen for i := Low(FensterHandles) to High(FensterHandles) do begin ShowMessage(IntToStr(FensterHandles[i])); // Handle des Fensters anzeigen end; end; |
Re: Funktion für mehrere Fenster (n help)
sieht für mich aus als würde die funktion dennoch nicht unterscheiden oO schaut euch doch mal bitte meinen vorletzten post an da hab ich mich dran versucht aber es sendet dennoch an die zuletzt aktive instanz vom rechner
|
Re: Funktion für mehrere Fenster (n help)
Bei mir sendet es an beide Instanzen.
Test:
Delphi-Quellcode:
h := FindAllWindows('Rechner');
if High(h) = 1 then // Wenn 2 Rechner Instanzen gefunden begin PostMessage(hwnd(h[0]), WM_KeyDown, $39, 0); // an erste Instanz senden PostMessage(hwnd(h[1]), WM_KeyDown, $39, 0); // an zweite Instanz senden end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 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