Delphi-PRAXiS

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

mirage228 15. Okt 2005 13:05

Re: Programm aus Taskleiste ausblenden
 
Zitat:

Zitat von Union
WindowStyle := WindowStyle-WS_ICONIC;

:shock:

Müsste das nicht eher
Delphi-Quellcode:
WindowStyle := WindowStyle and (not WS_ICONIC);
heißen?

mfG
mirage228

Union 15. Okt 2005 13:12

Re: Programm aus Taskleiste ausblenden
 
Zitat:

Zitat von mirage228
Zitat:

Zitat von Union
WindowStyle := WindowStyle-WS_ICONIC;

Müsste das nicht eher
Delphi-Quellcode:
WindowStyle := WindowStyle and (not WS_ICONIC);
heißen?

Nöö. Wenn WS_ICONIC in den Flags enthalten ist, kann man es durch Subtraktion wieder entfernen. Wenn es nicht enthalten ist, geht's natürlich schief. Deine Methode ist sicherer, ich war nur zu faul...

Christian Seehase 15. Okt 2005 13:23

Re: Programm aus Taskleiste ausblenden
 
Moin Union,

bei Bitmasken sollte man grundsätzlich nicht mit + oder - arbeiten, weil man sich damit viel zu leicht Fehler einhandeln kann.

storm1988 18. Okt 2005 20:02

Re: Programm aus Taskleiste ausblenden
 
SO hab jetzt folgenden Code geproggt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Handle: HWND;
  WindowStyle : Integer;
begin
  Handle:=GetWindow(GetDesktopWindow(),GW_CHILD);
  while (Handle<>0) do
  begin
  if (IsMainAppWindow(Handle) and (AnsiContainsStr(GetWindowCaption(Handle),'Unbenannt - Paint'))) then
  begin
    //WindowStyle := GetWindowLong(handle, GWL_STYLE);
    //WindowStyle := WindowStyle and (not WS_ICONIC) ;
    SetWindowLong(handle, GWL_STYLE, (GetWindowLong(Handle, GWL_STYLE) and (not WS_ICONIC) ));
    break;
  end;
  Handle:=GetWindow(Handle,GW_HWNDNEXT);
  end;
end;
Jedoch passiert nicht das was ich will, bzw. es passiert garnix.
Wie schaffe ich es jetzt, dass ich das gewünschte Programm aus der Taskleiste bringe??

Und noch so ne Frage am Rande! Wie kann ich das Programm dann Refreshen??

Nogge 23. Nov 2005 21:22

Re: Programm aus Taskleiste ausblenden
 
Mich würde eine Lösung auch interessieren...Weiß niemand Rat?

storm1988 24. Nov 2005 14:34

Re: Programm aus Taskleiste ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
So hab des Problem eh schon länger heraus gefunden.....

Naja wie auch immer, ich werd mal einfach ne kleine Anregung hinterher hängen die Zeigt wie des alles funzt.
Wenns dann noch fragen gibt oder wenn du noch irgend welche Units brauchst dann einfach hier posten :wink:

Evian 4. Apr 2006 10:09

Re: Programm aus Taskleiste ausblenden
 
Hallöchen,

öhm wollt mir mal gerade den Anhang aus dem letzten Post runterladen und dann kommt follgende Fehlermeldung:

"Entschuldigung, aber du bist nicht autorisiert dieses Attachment anzugucken oder herunterzuladen."

Hab ich irgendetwas verpasst?!

gruß

Evian

EDIT: Habe gerade gelesen, dass es womöglich an einer Firewall auf meiner Seite liegen könte.. aber mh.. ich habe keine Firewall und bis gestern könnte ich noch ohne Probleme aus der DP downloaden?!?!

Egac 22. Sep 2009 10:18

Re: Programm aus Taskleiste ausblenden
 
Hallo,

also ich interessiere mich dafür, mein Programm aus der Taskleiste auszublenden, wenn stellvertretend dafür ein SystrayIcon angezeigt werden soll, dabei bin ich auch über dein Beitrag gestolpert. Interessant! Problem bei der Geschichte: Unter Vista(?) wird beim minimieren und ausblenden zeitgleich linksunten eine Toolbox erzeugt (bei XP auch?), welche sichtbar ist. :wall:
Ich hab auch schon mit abändern der CreateParams Prozeudre probiert, jedoch kommt diese Toolbox immer wieder. Mit dem SysTray funktioniert dagegen alles reibungslos. Hast du in diese Richtung vllt weitere Infos/Lösungsamsätze parrat?

Ich hoffe, mir antwortet noch jemand, da dieses Thema ja jetzt schon über 3 Jahre alt ist.

Grüße
Egac


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