![]() |
Window-Handel rausfinden, was mach ich falsch?
Hi,
Habe bisher nur ein bisschen mit Delphi rumgespielt, aber jetzt wollte ich mal wieder richtig anfangen. Mein Ziel ist es, das Handle eines Fensters herauszubekommen ("Delphi"). Durch rumspielen hab ich kein brauchbares Ergebnis erzielt, also hab ich den Code von ![]() Ich wäre für jegliche Hilfe echt dankbar. :drunken: --- Programm ---
Delphi-Quellcode:
[edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} type PFindWindowStruct = ^TFindWindowStruct; TFindWindowStruct = record Caption: string; ClassName: String; WindowHandle: THandle; end; function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): boolean; stdcall; var lpBuffer: PChar; WindowCaptionFound: boolean; ClassNameFound: boolean; begin GetMem(lpBuffer, 255); result:=true; WindowCaptionFound:=false; ClassNameFound:=false; try if GetWindowText(hWindow, lpBuffer,255)>0 then if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer))>0 then WindowCaptionFound:=true; if PFindWindowStruct(lParam).ClassName='' then ClassNameFound:=true else if GetClassName(hWindow, lpBuffer, 255)>0 then if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer))>0 then ClassNameFound:=true; if (WindowCaptionFound and ClassNameFound) then begin PFindWindowStruct(lParam).WindowHandle:=hWindow; result:=false; end; finally FreeMem(lpBuffer, sizeof(lpBuffer^)); end; end; function FindAWindow(caption: string; ClassName: string): THandle; var WindowInfo: TFindWindowStruct; begin with WindowInfo do begin caption:=caption; className:=ClassName; WindowHandle:=0; EnumWindows(@EnumWindowsProc,LongInt(@WindowInfo)); result:=WindowHandle; end; end; procedure TForm1.Button1Click(Sender: TObject); var TheWindowHandle: THandle; begin TheWindowHandle:=FindAWindow('Delphi', ''); if TheWindowHandle=0 then ShowMessage('Window not found!') else BringWindowToTop(TheWindowHandle); end; end. |
Re: Window-Handel rausfinden, was mach ich falsch?
Hi!
Ich mach das so:
Delphi-Quellcode:
Ciao fkerber
function EnumWindowsProc(const hWnd : Longword; Param: lParam): LongBool; stdcall;
var Buffer: array[0..1024] of Char; begin Result := True; GetWindowText(hWnd, Buffer, sizeof(Buffer)); if lstrlen(Buffer) = 0 then begin exit; end else begin Form1.listbox1.items.Add (buffer); end; end; procedure TForm1.Button1Click(Sender: TObject); var LPARRAM : DWord; begin EnumWindows (@EnumWindowsProc,Integer(@LPARRAM)); end; procedure TForm1.Button2Click(Sender: TObject); var hHandle: THandle; i: integer; begin for i:=0 to Listbox1.Items.count-1 do begin hHandle := FindWindow(nil, PChar(Listbox1.Items[i])); //[...] für jedes Elemnt der LB ein Handle, das ich dann hier verwende end; end; |
Re: Window-Handel rausfinden, was mach ich falsch?
THX!
Button 1 liefert mir nun ja eine nette Auflistung aller Prozess-Namen (oda?), das geht einwandfrei, aber Button 2 hat bei mir dann keinen Effekt...selbst wenn ich dort sowas wie qwerHandle := FindWindow(nil,'Delphi'); BringWindowToTop(qwerHandle); ergänze. |
Re: Window-Handel rausfinden, was mach ich falsch?
des kann doch ned so schwer sein :wall: was zum teufel mach ich eigentlich falsch...
ich hoffe immernoch auf jemanden, der mir einen vollständigen code liefern kann, mit dem ich das handle eines fensters mit dem namen "xy*"herausbekommen kann...bitte... :gruebel: :roll: :cry: |
Re: Window-Handel rausfinden, was mach ich falsch?
Hi!
Als Ergänzung (an der Stelle [...] (es wird noch eine Variable str: string definiert):
Delphi-Quellcode:
In dem Moment wo die If-Bedingung zutrifft, steht das Handle auf das den MediaPlayer.
str:=gettext(hhandle);
if pos('Windows Media Player', str)<> 0 then begin ... Anstelle von Windows Media Player setzt du das ein, was in der Liste steht! Ciao fkerber [Edit] Da fehlt noch die Funktion GetText:
Delphi-Quellcode:
[/Edit]
function GetText(Wnd: HWND): string;
var textlength: Integer; Text: PChar; begin textlength := SendMessage(Wnd, WM_GETTEXTLENGTH, 0, 0); if textlength = 0 then Result := '' else begin GetMem(Text, textlength + 1); // Änderung -> if Assigned(Text) then try SendMessage(Wnd, WM_GETTEXT, textlength + 1, Integer(Text)); // Result := Text; // Änderung -> SetString(Result, Text, lstrlen(Text)); finally FreeMem(Text); end; end; end; Ciao fkerber |
Re: Window-Handel rausfinden, was mach ich falsch?
Zitat:
|
Re: Window-Handel rausfinden, was mach ich falsch?
Hi!
Eija, aber du kannst in der ListBox gucken, wie das Fenster genau heißt. z.B. bei Delphi heißt das Fenster ja Delphi7 in der Titelzeile steht aber immer noch das Projekt hintendran, so meinte ich das. Nicht alle Fenster heißen so, wie es in der Titelleiste steht, deswegen, da mal nachschauen! Ciao fkerber p.S. gehts ansonsten? |
Re: Window-Handel rausfinden, was mach ich falsch?
Danke, ich denke ich werde später nochmal alles von Grund auf durchgehen und schauen, obs dann geht. Im Moment bekomm ich meinen PC noch ned dazu bewegt, das Fenster nach vorne zu holen, welches ich will... :oops:
/EDIT: Es geht :bounce1: :dancer: Vielen Dank! Nun werd ich mal noch ein bisschen rumspielen und noch ein paar Sachen testen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 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