Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Programm aus Taskleiste ausblenden (https://www.delphipraxis.net/54939-programm-aus-taskleiste-ausblenden.html)

storm1988 13. Okt 2005 17:56


Programm aus Taskleiste ausblenden
 
Hi!

Ich wollt Fragen ob es möglich ist, ein Programm wie z.B. den Editor von Windows aus der Taskleiste verschwinden zu lassen.
Damit mein ich, dass das Programm noch immer aktive ist, aber halt nicht in der Taskleiste angezeit wird!!

Ich bedank mich schonmal im Vorraus

chaosben 13. Okt 2005 18:18

Re: Programm aus Taskleiste ausblenden
 
Nu, das geht relativ einfach:
Du saust einfach durch alle Kind-Fenster von GetDesktopWindow() und suchst nach dem Fenster, dessen Text gleich dem Text ist, der auf dem Button in der Taskleiste steht. Außerdem musst du prüfen ob es das MainAppWindow ist (gibts eine Funtion von den Jedis ... ich glaub JclSysInfo.pas). Sind dann beide Bedingungen erfüllt versteckst du es per ShowWindow(Handle,SW_HIDE)

storm1988 13. Okt 2005 18:56

Re: Programm aus Taskleiste ausblenden
 
Erstaml danke für die Hilfe :thumb: , aber könntest du mir vielleicht noch ein Beispiel zu der Funktion GetDesktopWindow() posten, alles andere wär mir sonst klar...

chaosben 13. Okt 2005 19:27

Re: Programm aus Taskleiste ausblenden
 
Ich versuchs mal aus dem Kopf ohne Delphi zu bemühen :)

Delphi-Quellcode:
procedure SuchHassoSuch();
var
  Handle: HWND;
begin
  Handle:=GetWindow(GetDesktopWindow(),GW_CHILD);
  while (Handle<>0) do
  begin
  if (IsMainAppWindow(Handle) and (AnsiContainsStr(GetWindowCaption(Handle),'Editor'))) then
  begin
    ShowWindow(Handle,SW_HIDE);
    break;
  end;
  Handle:=GetWindow(Handle,GW_HWNDNEXT);
  end;
end;

SirThornberry 13. Okt 2005 19:30

Re: Programm aus Taskleiste ausblenden
 
einfach mit showwindow das aus der taskleiste zu entfernen funktioniert nur bei Delphi-VCL anwendungen und anderen Anwendungen die ein nicht sichtbares Fenster dafür nutzen. Wenn das Hauptfenster auch das Fenster in der Taskleiste ist geht das nicht. Dann müsstest du mit SetWindowLong den Style ändern damit es kein AppWindow mehr ist (kann sein das man dafür erst in den Prozess muss)

[Edit]
WICHTIG: hab grad im MSDN bei SetWindowLong folgendes gelesen:
Zitat:

This function has been superseded by the SetWindowLongPtr function. To write code that is compatible with both 32-bit and 64-bit versions of Microsoft Windows, use the SetWindowLongPtr function.
also anstelle von SetWindowLong lieber SetWindowLongPtr benutzen.
[/Edit]

storm1988 13. Okt 2005 20:03

Re: Programm aus Taskleiste ausblenden
 
Noch ne kurze Frage: Was muss ich hinzufügen, dass ich mit IsMainAppWindow , AnsiContainsStr und GetWindowCaption programmieren kann?

chaosben 14. Okt 2005 05:19

Re: Programm aus Taskleiste ausblenden
 
Für die Funktionen "IsMainAppWindow" und "GetWindowCaption" brauchst du die "JclSysInfo" von den Jedis. Für die Funktion "AnsiContainsStr" must du die Unit "StrUtils" usen.

Was das angeht was SirThornberry sagte, war mir von der Sache her neu. Aber in der Funktion "IsMainAppWindow" ist schon folgender Code enthalten:
Delphi-Quellcode:
ExStyle := GetWindowLong(Wnd, GWL_EXSTYLE);
Result := ((ParentWnd = 0) or (ParentWnd = GetDesktopWindow)) and
          ((ExStyle and WS_EX_TOOLWINDOW = 0) or (ExStyle and WS_EX_APPWINDOW <> 0));
Damit ist doch auch das geklärt, oder meinst du etwas anderes, SirThornberry?

Luckie 14. Okt 2005 05:23

Re: Programm aus Taskleiste ausblenden
 
Er muss mit MSDN-Library durchsuchenSetWindowLong einfach nur den Fensterstil MSDN-Library durchsuchenWS_ICONIC entfernen, dann ist der Button in der Taskbar weg.

storm1988 15. Okt 2005 12:24

Re: Programm aus Taskleiste ausblenden
 
Könnt ihr mir vielleicht nochmal weiter helfen!!!

Bis jetzt hab ich das:

Code:
procedure SuchHassoSuch();
var
  Handle: HWND;
begin
  Handle:=GetWindow(GetDesktopWindow(),GW_CHILD);
  while (Handle<>0) do
  begin
  if (IsMainAppWindow(Handle) and (AnsiContainsStr(GetWindowCaption(Handle),'Editor'))) then
  begin
    SetWindowLong(Handle, WS_ICONIC,[b]???(und hier fehlt mir der letzte Parameter)[/b]);
    break;
  end;
  Handle:=GetWindow(Handle,GW_HWNDNEXT);
  end;
end;

Union 15. Okt 2005 12:58

Re: Programm aus Taskleiste ausblenden
 
Zitat:

Zitat von storm1988
Könnt ihr mir vielleicht nochmal weiter helfen!!!
SetWindowLong(Handle, WS_ICONIC,???(und hier fehlt mir der letzte Parameter));
end;

Da fehlt Dir nicht nur der Parameter.
Erst musst Du mit GetWindowLong den aktuellen Fensterstil holen. Dann das WS_ICONIC Bit entfernen und dann erst mit SetWindowLong den neuen Wert setzen:
Delphi-Quellcode:
WindowStyle := GetWindowLong(handle, GWL_STYLE);
WindowStyle := WindowStyle-WS_ICONIC;
SetWindowLong(handle, GWL_STYLE, WindowStyle) ;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 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