2013-02-11 17 views
13

मैं विंडोज 7 टास्कबार से एक एप्लीकेशन छिपाना चाहता हूं।विंडोज 7 में टास्कबार से एप्लिकेशन को कैसे छिपाना है?

मैं स्क्रीन के किनारे पर टूलबार की तरह कुछ बनाना चाहता हूं जो कुछ चीजें करता है जब उपयोगकर्ता उस पर क्लिक करता है, लेकिन मैं टास्कबार में दिखाना नहीं चाहता, क्योंकि यह एक चीज है जिसे मैं चाहता हूं पृष्ठभूमि में रहो।

मैं निम्नलिखित पोस्ट में दिए गए निर्देशों की कोशिश की है, लेकिन यह अपने आवेदन पर काम नहीं किया:

How to hide a taskbar entry but keep the window form

तो मैं इसे एक नया खाली VCL पर की कोशिश की आवेदन पत्र और यह अभी भी काम नहीं किया। मैंने अन्य समाधानों की खोज की, लेकिन वे सभी लिंक किए गए पोस्ट की तरह ही बहुत कुछ करते हैं।

कुछ बदल गया है, जो विंडोज 7 में असंभव बनाता है? या क्या आप कुछ भी सोच सकते हैं, जो इसे काम करने से रोक सकता है?

अपनी परियोजना फ़ाइल में सेट करने के लिए झूठी MainFormOnTaskBar:

+0

अपने Application.MainFormOnTaskBar संपत्ति के लिए मूल्य क्या है निम्नलिखित toolwindow झंडा तुम बाहर छोड़ सकते हैं में कोई दिलचस्पी नहीं कर रहे हैं? – jachguate

+2

एफवाईआई शैल की ऐपबार एपीआई इस http://msdn.microsoft.com/en-gb/library/windows/desktop/cc144177(v=vs.85).aspx/http://stackoverflow.com/questions के लिए डिज़ाइन की गई है/75785/कैसे करें-do-do-app-appbar-docking-to-screen-edge-like-winamp-in-wpf –

+0

एप्लिकेशन। मेनफॉर्मऑनटास्कबार डिफ़ॉल्ट रूप से सत्य है। जब मैं इसे गलत पर सेट करता हूं तो मुझे टास्कबार में 2 प्रविष्टियां मिलती हैं। एक exe खुद के लिए और मुख्य खिड़की के लिए एक। – Marks

उत्तर

6

एक मुश्किल रास्ता this article में वर्णित का उपयोग करने का प्रयास करें। फिर मुख्य विंडो के OnShow और OnActivate ईवेंट हैंडलर से एप्लिकेशन विंडो को छिपाने का प्रयास करें। तो अपनी परियोजना की तरह लग रहे हो सकता है इस प्रकार है:

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

आप मुख्य रूप के CreateParam को ओवरराइड कर सकते हैं ध्वज को हटा दें जो टास्कबार बटन को बल देता है (WS_EX_APPWINDOW) और इसके अलावा आवेदन विंडो द्वारा फॉर्म स्वामित्व बनाएं। खिड़की के लिए टास्कबार बटन रखने के लिए खोल के लिए विपरीत कर रहा है। "Managing Taskbar Buttons" से:

[..] यह सुनिश्चित करने के विंडो बटन टास्कबार पर रखा गया है, WS_EX_APPWINDOW विस्तारित शैली के साथ एक बिना स्वामित्व वाले बना सकते हैं। [..]

नमूना:

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; 

'यह सच है' उसके डिफ़ॉल्ट से 'आवेदन' के MainFormOnTaskbar संपत्ति की स्थिति बदलने मत करो अगर तुम इस विधि का उपयोग।

आप दूसरी पंक्ति (..WndParent: = ..) को भी हटा सकते हैं और इसके बजाय ऑब्जेक्ट इंस्पेक्टर में pmExplicit पर PopupMode को उसी प्रभाव से सेट कर सकते हैं।


Btw, यहाँ समाधान TLama posted के लिए एक ही विषय से प्रलेखन उद्धरण है:

टास्कबार पर रखे जाने से विंडो बटन रोकने के लिए, [...] एक विकल्प के रूप में, आप एक छिपी खिड़की बना सकते हैं और इसे अपनी दृश्यमान विंडो के मालिक को छिपा विंडो बना सकते हैं।

जब आप MainFormOnTaskbar को झूठी पर सेट करते हैं, तो मुख्य रूप वीसीएल डिज़ाइन द्वारा एप्लिकेशन विंडो के स्वामित्व में होता है। और यदि आप एप्लिकेशन विंडो छुपाते हैं, तो आवश्यकता पूरी हो जाती है।

-1

आपका आवेदन मुख्य रूप सामान्यतः डीपीआर में बनाया जाता है ताकि डीपीआर खोलें और मुख्य रूप से बनाई गई रेखा की तलाश करें।

// add this line first 
// blank app title will prevent app from showing in the applications list in task manager 
Application.Title := ''; 

// this line is already in the dpr and creates the main form, the class will differ 
Application.CreateForm(TMainForm, Result); 

// make the main form invisible to windows taskbar/task switcher 
i := GetWindowLong(Application.Handle, GWL_EXSTYLE); 
SetWindowLong(Application.Handle, GWL_EXSTYLE, i OR WS_EX_TOOLWINDOW AND NOT WS_EX_APPWINDOW); 

मुझे यह काम XP और 7 पर पता है। मुझे लगता है कि यह 8 के लिए भी अच्छा है। इस उपकरण खिड़की झंडा कहते हैं और appwindow ध्वज को हटा तो मैं लगता है कि अगर आप भाग

i OR WS_EX_TOOLWINDOW 
+0

यह काम नहीं कर रहा है! – Ampere

संबंधित मुद्दे