Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fenster anhand eines Teils des "Namens" finden? (https://www.delphipraxis.net/9508-fenster-anhand-eines-teils-des-namens-finden.html)

Sharky 28. Sep 2003 09:40


Fenster anhand eines Teils des "Namens" finden?
 
Hai Profis,

ich kann ja mit :

Delphi-Quellcode:
const
 IDS_WNDTITLE = 'Viewer (SHARKY)';
var
 hWnd: DWORD;
begin
 hWnd := FindWindow(nil, IDS_WNDTITLE);
end;
Ein Fenster (Programm) finden.

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:
  SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0)
beenden zu könnne?

CalganX 28. Sep 2003 09:46

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

Sharky 28. Sep 2003 10:02

Re: Fenster anhand eines Teils des "Namens" finden
 
Zitat:

Zitat von Chakotay1308
Hi Sharky,
da müsstest du mal nach [dp]*EnumWindow*[/dp] oder so suchen. Das hatten wir schonmal.

Chris

Hai Chris,

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.

Christian Seehase 28. Sep 2003 12:40

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.

Sharky 29. Sep 2003 09:05

Re: Fenster anhand eines Teils des "Namens" finden
 
Zitat:

Zitat von Christian Seehase
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.

Hai Christian,

mit Hilfe von Luckies Demo zu EnumWindow habe ich das hier gebastest:

Delphi-Quellcode:
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;
Jetzt habe ich alle Fenstertitel in einem Memo.

Ist das von der Logik richtig?

Luckie 29. Sep 2003 09:07

Re: Fenster anhand eines Teils des "Namens" finden
 
Zitat:

Zitat von Sharky
Jetzt habe ich alle Fenstertitel in einem Memo.

:P
Zitat:

Ist das von der Logik richtig?
Wenn es funktioniert....

Christian Seehase 29. Sep 2003 12:34

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.

Sharky 29. Sep 2003 13:02

Re: Fenster anhand eines Teils des "Namens" finden
 
Zitat:

Zitat von Christian Seehase
....kannst Du auch das Integer(@LPARRAM) weglassen, und stattdessen z.B. eine 0 reinschreiben.

Hai Christian,

super! Danke für den Hinweiss.

Hihi... mit der Zeit werde ich die API-Aufrufe auch noch verstehen.

Sushibb 28. Jul 2004 15:44

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:
EnumWindows(@EnumWinProc, Application.Handle);
Der cursor bleibt hinter dem Komma von @EnumWinProc stehen und die Fehlermeldung lautet:

Zitat:

Variable required
Ich bin da nun am Rätseln, was der mir eigentlich sagen will... Hier nochmal der Komplette Code, damit ihr mir helfen könnt :thuimb:

Code:
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;
Hab diese Lösung schon in leichten Variationen 100mal im Netz gefunden, allerdings kommt es immer zu gleichem Fehler :wall:
Vermutlich hab ich Tomaten auf den Augen... :gruebel:

THX, so far...

Luckie 28. Jul 2004 15:59

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.
Seite 1 von 2  1 2      

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