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 Application im Task-Panel (ALT-TAB) verstecken (https://www.delphipraxis.net/46412-application-im-task-panel-alt-tab-verstecken.html)

digga 24. Mai 2005 18:15


Application im Task-Panel (ALT-TAB) verstecken
 
Hi,

ich habe folgende Frage.
Kann man eine ganz normale VCL Forms Application im Task-Panel (ALT-TAB) verstecken?

Ich habe schon Lösungen gesehen, bei denen man einfach die Tastenkombination ALT-TAB deaktiviert.
Allerdings ist das nicht wirklich das was ich suche.
Eine Navigation mittels ALT-TAB sollte auch weiterhin möglich sein, aber eben ohne ein Icon von meinem Programm.

Eine Lösung in C# wäre auch supi.

Danke,
Dominik

CalganX 24. Mai 2005 18:27

Re: Application im Task-Panel (ALT-TAB) verstecken
 
Hi,
deine Frage bezieht sich auf Delphi.NET bzw. C#.
Bitte kategorisieren deine Frage auch entsprechend. Editiere also bitte deinen Beitrag und wähle Delphi.NET anstelle von Delphi (Win32).

Danke,
Chris

digga 25. Mai 2005 08:23

Re: Application im Task-Panel (ALT-TAB) verstecken
 
Nein, nein ...

Hab mich vielleicht missverständlich ausgedrückt ;-)
Mich interessiert hauptsächlich eine Lösung in Delphi (Win32).

Dominik

digga 25. Mai 2005 16:11

Re: Application im Task-Panel (ALT-TAB) verstecken
 
Nach längerer Suche durch etliche Newsgroups,
bin ich immer wieder auf folgende Code gestoßen.

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Windows;

{$R *.RES}

//Declare a var to retrieve current window information
var
  ExtendedStyle : Integer;

begin
  Application.Initialize;

  //Get the Extended Styles of the Application, by passing its
  //handle to GetWindowLong
  ExtendedStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);

  //Now, set the Extended Style by doing a bit masking operation.
  //OR in the WS_EX_TOOLWINDOW bit, and AND out the WS_EXAPPWINDOW bit
  //This effectively converts the application from an App Windows to a
  //Tool Window.
  SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle OR WS_EX_TOOLWINDOW
                                                 AND NOT WS_EX_APPWINDOW);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Es wird zwar kein Eintrag in der Taskleiste erstellt, aber im Task-Panel (ALT-TAB) ist mein Programm auch weiterhin zu sehen. :-(

Hat nicht jemand einen weiteren Vorschlag?

CalganX 25. Mai 2005 16:14

Re: Application im Task-Panel (ALT-TAB) verstecken
 
Hi,
darf man fragen, wofür du das brauchst? Ich würde schon gerne jederzeit mit Alt-Tab zu allen Programmen kommen, die geöffnet sind.

Chris

digga 25. Mai 2005 16:36

Re: Application im Task-Panel (ALT-TAB) verstecken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Klar darfst Du fragen ;-)

Ich will so eine Art DesktopWidget programmieren, dass immer auf dem Desktop angezeigt wird.

So etwas wie vielleicht einen Kalender oder eben solche Widgets, wie man sie z.B. von DesktopX, Samurize, Kapsules her kennt.

Das ganz ist aber erst im Versuchsstadium.
Ich hab mal einen Screenshot begefügt, damit man in etwa weiss, von was ich rede.

Gerade für solche permanenten Desktop-Widgets will ich nicht unbedingt einen Eintrag im ALT-TAB Panel haben, da diese Fenster nie in der Vordergrund kommen, sonder immer nur "auf" dem Desktop platziert sind.


Dominik

digga 27. Mai 2005 12:18

Re: Application im Task-Panel (ALT-TAB) verstecken
 
Hi,

falls es noch jemanden interessiert...
Folgender Code löst gleich zwei meiner Probleme.

Delphi-Quellcode:
Windows.SetParent(Form1.Handle, FindWindow(Nil, 'Program Manager'));
Zum einen erreiche ich hiermit, dass kein Icon mehr im Task-Panel angezeigt wird
und zum anderen löst es dass Problem, dass mein Widget nicht "versteckt" wird,
wenn man auf "Desktop anzeigen" in der Schnellstart-Leiste klickt.

Gruß,
Dominik


PS:
Codebeispiel in C#
Code:

   public class User32 {

      [DllImport("user32", SetLastError=true)]
      public static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

      [DllImport("user32", SetLastError=true)]
      public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

   }

   ...

   private void DesktopWidget_Load(object sender, System.EventArgs e)
   {
      User32.SetParent(this.Handle, User32.FindWindow(null, "Program Manager"));
   }


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