Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fenster mit bestimmten Titel automatisch schließen (https://www.delphipraxis.net/38665-fenster-mit-bestimmten-titel-automatisch-schliessen.html)

Monsta3 22. Jan 2005 14:08


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

SirThornberry 22. Jan 2005 14:10

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

Monsta3 22. Jan 2005 14:15

Re: Fenster mit bestimmten Titel automatisch schließen
 
Danke, ich werde es mal versuchen. ;)

Zitat:

Zitat von SirThornberry
einfacher ist es übrigens den nachrichtendienst zu deaktivieren

Ja, nur leider haben wir in der Schule keine Rechte dazu. ;)

Luckie 22. Jan 2005 14:21

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.

Monsta3 22. Jan 2005 15:12

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;

Luckie 22. Jan 2005 15:13

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. :?

Monsta3 22. Jan 2005 15:19

Re: Fenster mit bestimmten Titel automatisch schließen
 
Zitat:

Zitat von Luckie
Timer, Thread, Fiber, ...

Hm, da hab ich jetzt ja was zu tun. :?
Würde es auch gehen, wenn ich eine while-schleife verwende und beim Buttonklick alle diese Fenster schließe?

Zitat:

Zitat von Luckie
Und das Funktioniert? Also bei mir hat das Nachrichtenfenster eine Gemeintheit, da ist am Schluss noch ein Leerzeichen. :?

Ja, aber nur mit FindWindowByTitle.
Delphi-Quellcode:
FindWindow(nil, 'Nachrichtendienst');
nicht.

Luckie 22. Jan 2005 15:21

Re: Fenster mit bestimmten Titel automatisch schließen
 
Was ist den FindWindowByTitle?

Monsta3 22. Jan 2005 15:25

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;
http://www.swissdelphicenter.ch/de/showcode.php?id=327

Luckie 22. Jan 2005 15:28

Re: Fenster mit bestimmten Titel automatisch schließen
 
Das ist unsicher:
Delphi-Quellcode:
GetWindow(Application.Handle, GW_HWNDFIRST);
Zitat:

An application that calls GetWindow to perform this task risks being caught in an infinite loop or referencing a handle to a window that has been destroyed.
Nimm lieber EnumWindows

SirThornberry 22. Jan 2005 15:33

Re: Fenster mit bestimmten Titel automatisch schließen
 
oder einfach findwindow

Monsta3 22. Jan 2005 16:14

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:
while FindWindow(....) = true do
begin
   ..der code zum schließen..
end
Geht das so und könnte mir das jemand vielleicht richtig sagen?

SirThornberry 22. Jan 2005 16:46

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;

Monsta3 22. Jan 2005 17:02

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;

SirThornberry 22. Jan 2005 17:22

Re: Fenster mit bestimmten Titel automatisch schließen
 
an welcher stelle schlägts fehl? Findet findwindow nix?

Monsta3 22. Jan 2005 17:32

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. ;)

SirThornberry 22. Jan 2005 17:35

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

Monsta3 22. Jan 2005 17:40

Re: Fenster mit bestimmten Titel automatisch schließen
 
Vielen, vielen Dank, läuft perfekt!! :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz