Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
Seite 1 von 2  1 2      

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