![]() |
Fenster anhand eines Teils des "Namens" finden?
Hai Profis,
ich kann ja mit :
Delphi-Quellcode:
Ein Fenster (Programm) finden.
const
IDS_WNDTITLE = 'Viewer (SHARKY)'; var hWnd: DWORD; begin hWnd := FindWindow(nil, IDS_WNDTITLE); end; Jetzt habe ich das Problem das ich von dem Fenster nur weiss das der Titel mit Viewer beginnt. Habe ich eine Chance das Fenster trotzdem zu finden um es dann mit
Delphi-Quellcode:
beenden zu könnne?
SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0)
|
Re: Fenster anhand eines Teils des "Namens" finden
Hi Sharky,
da müsstest du mal nach [dp]*EnumWindow*[/dp] oder so suchen. Das hatten wir schonmal. Chris |
Re: Fenster anhand eines Teils des "Namens" finden
Zitat:
danke für den Tip. Jetzt muss ich nur noch verstehen wie das funktioniert :oops: Wenn ich das richtig verstehe muss ich EnumWinow eine EnumWindowsProc Function übergeben. Mal sehen ob mir eine weitere Tips geben kann. |
Re: Fenster anhand eines Teils des "Namens" finden
Moin Sharky,
das einfachste wäre wahrscheinlich, wenn Du Dir mal die entsprechenden Threads durchsiehst, und dann gezielt Deine Verständnisprobleme bezüglich des Ablaufes ansprichst. |
Re: Fenster anhand eines Teils des "Namens" finden
Zitat:
mit Hilfe von Luckies Demo zu EnumWindow habe ich das hier gebastest:
Delphi-Quellcode:
Jetzt habe ich alle Fenstertitel in einem Memo.
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.Memo1.Lines.Add (buffer); end; end; {****************************************************} procedure TForm1.Button1Click(Sender: TObject); var LPARRAM : DWord; begin EnumWindows (@EnumWindowsProc,Integer(@LPARRAM)); end; Ist das von der Logik richtig? |
Re: Fenster anhand eines Teils des "Namens" finden
Zitat:
Zitat:
|
Re: Fenster anhand eines Teils des "Namens" finden
Moin Sharky,
wenn Du an die Callback Funktion (EnumWindowsProc) keinen Wert übergeben musst kannst Du auch das Integer(@LPARRAM) weglassen, und stattdessen z.B. eine 0 reinschreiben. |
Re: Fenster anhand eines Teils des "Namens" finden
Zitat:
super! Danke für den Hinweiss. Hihi... mit der Zeit werde ich die API-Aufrufe auch noch verstehen. |
Re: Fenster anhand eines Teils des "Namens" finden
hm ich hab da ein ähnliches Problem und hab mir auch schon die EnumWindows-Lösung angesehen. Nur stirbt mein Delphi 6 PE an dieser stelle:
Code:
Der cursor bleibt hinter dem Komma von @EnumWinProc stehen und die Fehlermeldung lautet:
EnumWindows(@EnumWinProc, Application.Handle);
Zitat:
Code:
Hab diese Lösung schon in leichten Variationen 100mal im Netz gefunden, allerdings kommt es immer zu gleichem Fehler :wall:
procedure TForm1.Button5Click(Sender: TObject);
begin EnumWindows(@EnumWinProc, Application.Handle); end; function EnumWinProc(Wnd: hWnd): Boolean; StdCall; var WinCaption : Pchar; WinHandle : string; begin GetMem(WinCaption, 255); try GetWindowText(Wnd, WinCaption, 255); Result := True; if (Trim(WinCaption) <> '') then begin WinHandle := IntToHex(Wnd, 6); Form1.ListBox1.Items.add(WinHandle + ' : ' + WinCaption); end; finally FreeMem(WinCaption, 255); end; end; Vermutlich hab ich Tomaten auf den Augen... :gruebel: THX, so far... |
Re: Fenster anhand eines Teils des "Namens" finden
Kopier deine EnumWiNproc vor den ButtonClick ode rhast du sie irgendwo im Interface-teil mit forward deklariert?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 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