![]() |
Fenster mit bestimmten Titel automatisch schließen
Hallo,
ich möchte, dass sich beim FormCreate()-Ereignis alle Fenster mit einem bestimmten Titel schließen - egal wie viele es sind. Kann mir da jemand helfen? Und ja, es soll NetSend-Nachrichten schließen - blöde Spammer! :P |
Re: Fenster mit bestimmten Titel automatisch schließen
du kannst die fenster mit findwindow finden, und dann mit Sendmessage und wm_close schließen. Nach dem das eine fenster geschlossen ist findest du mit findwindow das nächste fenster etc. bis eben keine mehr da sind. einfacher ist es übrigens den nachrichtendienst zu deaktivieren
|
Re: Fenster mit bestimmten Titel automatisch schließen
Danke, ich werde es mal versuchen. ;)
Zitat:
|
Re: Fenster mit bestimmten Titel automatisch schließen
Dann sag das den Admin. Und wenn er meint er bräuchte ihn, dann soll er den Firewall entsprechend einstellen.
|
Re: Fenster mit bestimmten Titel automatisch schließen
So, dass mit dem Fenster finden und schließen hab ich nun hinbekommen. Wie mach ich es aber, dass das Programm so lange es geöffnet ist alle kommenden Fenter schließt? Mein aktueller Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var win: hWnd; begin win := FindWindowByTitle('Nachrichtendienst') SendMessage(win, WM_SYSCOMMAND, SC_CLOSE, 0); end; |
Re: Fenster mit bestimmten Titel automatisch schließen
Timer, Thread, Fiber, ...
Und das Funktioniert? Also bei mir hat das Nachrichtenfenster eine Gemeintheit, da ist am Schluss noch ein Leerzeichen. :? |
Re: Fenster mit bestimmten Titel automatisch schließen
Zitat:
Würde es auch gehen, wenn ich eine while-schleife verwende und beim Buttonklick alle diese Fenster schließe? Zitat:
Delphi-Quellcode:
nicht.
FindWindow(nil, 'Nachrichtendienst');
|
Re: Fenster mit bestimmten Titel automatisch schließen
Was ist den FindWindowByTitle?
|
Re: Fenster mit bestimmten Titel automatisch schließen
Hab ich bei SwissDelphiCenter gefunden. Ist von Thomas Stutz.
Delphi-Quellcode:
{
FindWindowByTitle returns the handle of a window that contains a certain "WindowTitle". FindWindowByTitle gibt das Handle jenes Fensters zurück, das im Titel den String "WindowTitle" enthält. } function FindWindowByTitle(WindowTitle: string): Hwnd; var NextHandle: Hwnd; NextTitle: array[0..260] of char; begin // Get the first window NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); while NextHandle > 0 do begin // retrieve its text GetWindowText(NextHandle, NextTitle, 255); if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then begin Result := NextHandle; Exit; end else // Get the next window NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); end; Result := 0; end; { Example how to search for a window that contains the word "notepad" and maximize it. Beispiel, wie man ein Fenster "notepad" findet und es anschliessend maximiert. } procedure TForm1.Button1Click(Sender: TObject); var h: hwnd; begin h := FindWindowByTitle('notepad'); if h <> 0 then // if we found notepad ShowWindow(h, SW_MAXIMIZE) else ShowMessage('not found.'); end; ![]() |
Re: Fenster mit bestimmten Titel automatisch schließen
Das ist unsicher:
Delphi-Quellcode:
GetWindow(Application.Handle, GW_HWNDFIRST);
Zitat:
|
Re: Fenster mit bestimmten Titel automatisch schließen
oder einfach findwindow
|
Re: Fenster mit bestimmten Titel automatisch schließen
Ich hab das nun mit FindWindow und dem Leerzeichen nach dem Fenster-Namen gemacht. Nun möchte ich (ja, heute will ich viel ;) ), dass bei Klick auf einen Button alle offenen Nachrichtenfenster geschloßen werden. Ich hab da an so etwas gedacht:
Code:
Geht das so und könnte mir das jemand vielleicht richtig sagen?
while FindWindow(....) = true do
begin ..der code zum schließen.. end |
Re: Fenster mit bestimmten Titel automatisch schließen
Delphi-Quellcode:
var LWindowHandle: Hwnd;
begin repeat LWindowHandle := FindWindow(nil, 'Fenstertitel'); if LWindowHandle <> 0 then //der code zum schließen until LWindowHandle = 0; |
Re: Fenster mit bestimmten Titel automatisch schließen
Geht leider nicht ... :(
Delphi-Quellcode:
procedure TMainForm.btnCloseAllMsgWindowsClick(Sender: TObject);
var WindowHandle: hWnd; const NETSEND_WINDOW_TITLE = 'Nachrichtendienst '; begin repeat WindowHandle := FindWindow(nil, NETSEND_WINDOW_TITLE); if WindowHandle <> 0 then SendMessage(WindowHandle, WM_SYSCOMMAND, SC_CLOSE, 0); until WindowHandle = 0; end; |
Re: Fenster mit bestimmten Titel automatisch schließen
an welcher stelle schlägts fehl? Findet findwindow nix?
|
Re: Fenster mit bestimmten Titel automatisch schließen
Er schließt immer nur ein Fenster. Bei 5 Nachrichten muss ich also 5 mal auf den Btn klicken. ;)
|
Re: Fenster mit bestimmten Titel automatisch schließen
wird daran liegen das immer nur ein fenster sichtbar ist. Plaziere einfach einen Timer auf dem Fomular und das was jetzt im onClick steht machst du dann in das "OnTimer"-Event
|
Re: Fenster mit bestimmten Titel automatisch schließen
Vielen, vielen Dank, läuft perfekt!! :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:43 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