2013-02-11 19 views
13

Vorrei nascondere un'applicazione dalla barra delle applicazioni di Windows 7.Come nascondere un'applicazione dalla barra delle applicazioni in Windows 7?

Voglio creare qualcosa come una barra degli strumenti sul bordo dello schermo che fa certe cose quando l'utente fa clic su di esso, ma non voglio che venga visualizzato nella barra delle applicazioni, poiché è una cosa che voglio rimanere sullo sfondo.

ho cercato le istruzioni nel seguente post, ma non ha funzionato sulla mia domanda:

How to hide a taskbar entry but keep the window form

Poi ho provato su un nuovo vuoto VCL I moduli di domanda e ancora non ha funzionato. Ho cercato altre soluzioni, ma sono tutte uguali come nel post collegato.

Qualcosa è cambiato, cosa che rende impossibile in Windows 7? O c'è qualcosa che puoi pensare a , che potrebbe impedirne il funzionamento?

+0

Qual è il valore per la vostra proprietà Application.MainFormOnTaskBar? – jachguate

+2

FYI L'API AppBar della shell è progettata per questo http://msdn.microsoft.com/en-gb/library/windows/desktop/cc144177(v=vs.85).aspx/http://stackoverflow.com/questions/75785/how-do-do-do-appbar-docking-to-screen-edge-like-winamp-in-wpf –

+0

Application.MainFormOnTaskBar è true per impostazione predefinita. Quando lo metto a false ottengo 2 voci nella barra delle applicazioni. Uno per l'exe stesso e uno per la finestra principale. – Marks

risposta

6

tenta di utilizzare un modo ingannevole descritto nel this article:

Impostare la MainFormOnTaskBar su False nel file di progetto. Quindi provare a nascondere la finestra dell'applicazione dai gestori di eventi OnShow e OnActivate del modulo principale. Quindi, il progetto potrebbe apparire come segue:

Project1.dpr:

program Project1; 

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

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := False; 
    Application.CreateForm(TForm1, Form1); 
    Application.Run; 
end. 

Unit1.pas:

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs; 

type 
    TForm1 = class(TForm) 
    procedure FormShow(Sender: TObject); 
    procedure FormActivate(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.FormShow(Sender: TObject); 
begin 
    ShowWindow(Application.Handle, SW_HIDE); 
end; 

procedure TForm1.FormActivate(Sender: TObject); 
begin 
    ShowWindow(Application.Handle, SW_HIDE); 
end; 

end. 
9

è possibile ignorare del CreateParam modulo principale per rimuovere il flag che forza il pulsante della barra delle applicazioni (WS_EX_APPWINDOW) e inoltre, il modulo appartiene al dalla finestra dell'applicazione. Questo sta facendo di fronte del requisito per la shell per posizionare un pulsante della barra delle applicazioni per una finestra. Da "Managing Taskbar Buttons":

[..] Per garantire che il pulsante della finestra è posta sulla barra delle applicazioni, creare una finestra senza proprietario con la WS_EX_APPWINDOW stile esteso. [..]

Esempio:

type 
    TForm1 = class(TForm) 
    protected 
    procedure CreateParams(var Params: TCreateParams); override; 
    end; 

procedure TForm1.CreateParams(var Params: TCreateParams); 
begin 
    inherited; 
    Params.ExStyle := Params.ExStyle and not WS_EX_APPWINDOW; 
    Params.WndParent := Application.Handle; 
end; 

Non modificare lo stato di MainFormOnTaskbar proprietà della 'Application' dal suo default 'True', se si utilizza questo metodo.

È inoltre possibile rimuovere la seconda riga (..WndParent: = ..) e impostare invece PopupMode del modulo su pmExplicit nella finestra di ispezione dell'oggetto con lo stesso effetto.


BTW, ecco la citazione di documentazione dallo stesso argomento per la soluzione TLama posted:

Per evitare che il pulsante finestra venga posizionato sulla barra delle applicazioni, [...] In alternativa, puoi creare una finestra nascosta e rendere questa finestra nascosta il proprietario della tua finestra visibile.

Quando si imposta MainFormOnTaskbar su falso, il modulo principale è di proprietà della finestra dell'applicazione in base alla progettazione VCL. E se si nasconde la finestra dell'applicazione, il requisito è soddisfatto.

-1

il modulo principale dell'applicazione viene in genere creato nel dpr in modo da aprire il dpr e cercare la riga che crea il modulo principale.

so che questo funziona su XP e 7. Suppongo che sia buono anche per 8. questo si aggiunge la finestra bandiera strumento e rimuove la bandiera appwindow quindi credo che se non siete interessati nella bandiera toolwindow si può lasciare fuori la parte seguente

i OR WS_EX_TOOLWINDOW 
+0

Non funziona! – Ampere

Problemi correlati