2013-02-11 56 views
13

Tôi muốn ẩn một ứng dụng khỏi thanh tác vụ Windows 7.Cách ẩn ứng dụng khỏi thanh tác vụ trong Windows 7?

Tôi muốn tạo một thứ gì đó giống như thanh công cụ ở cạnh màn hình, một số thứ nhất định khi người dùng nhấp vào nó, nhưng tôi không muốn nó hiển thị trên thanh tác vụ, vì nó là thứ tôi muốn ở chế độ nền.

Tôi đã thử các hướng dẫn trong bài sau đây, nhưng nó đã không làm việc trên ứng dụng của tôi:

How to hide a taskbar entry but keep the window form

Sau đó, tôi đã cố gắng nó trên một VCL trống mới Forms Application và nó vẫn không làm việc. Tôi đã tìm kiếm các giải pháp khác, nhưng tất cả chúng đều giống như trong bài đăng được liên kết.

Có điều gì đó đã thay đổi, điều đó không thể thực hiện được trong các cửa sổ 7? Hoặc có điều gì mà bạn có thể nghĩ đến, điều đó có thể ngăn không cho nó hoạt động không?

+0

giá trị cho tài sản Application.MainFormOnTaskBar của bạn là gì? – jachguate

+2

FYI API AppBar của Shell được thiết kế cho http://msdn.microsoft.com/en-gb/library/windows/desktop/cc144177 (v=vs.85).aspx/http://stackoverflow.com/questions này/75785/how-do-you-do-appbar-docking-to-screen-edge-like-winamp-in-wpf –

+0

Application.MainFormOnTaskBar là true theo mặc định. Khi tôi đặt nó thành false tôi nhận được 2 mục trong thanh tác vụ. Một cho bản thân exe và một cho cửa sổ chính. – Marks

Trả lời

6

Hãy thử sử dụng một cách khéo léo mô tả trong this article:

Đặt MainFormOnTaskBar False trong hồ sơ dự án của bạn. Sau đó, cố gắng ẩn cửa sổ ứng dụng khỏi các trình xử lý sự kiện OnShowOnActivate của biểu mẫu chính. Vì vậy, dự án của bạn có thể trông giống như sau:

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

Bạn có thể ghi đè lên các hình thức chính của CreateParam để loại bỏ cờ buộc nút thanh tác vụ (WS_EX_APPWINDOW) và ngoài ra, hãy tạo biểu mẫu sở hữu bằng cửa sổ ứng dụng. Đó là thực hiện đối diện yêu cầu đối với trình bao để đặt nút thanh tác vụ cho cửa sổ. Từ "Managing Taskbar Buttons":

[..] Để đảm bảo rằng nút cửa sổ được đặt trên thanh tác vụ, tạo ra một cửa sổ không có chủ với WS_EX_APPWINDOW kiểu mở rộng. [..]

mẫu:

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; 

Đừng thay đổi trạng thái của MainFormOnTaskbar tài sản của 'Ứng dụng' từ mặc định của nó 'True' nếu bạn sử dụng phương pháp này.

Bạn cũng có thể xóa dòng thứ hai (..WndParent: = ..) và thay vào đó đặt PopupMode của biểu mẫu thành pmExplicit trong thanh tra đối tượng để có hiệu lực tương tự.


BTW, đây là trích dẫn tài liệu từ cùng một chủ đề cho các giải pháp TLama posted:

Để ngăn chặn các nút cửa sổ từ được đặt trên thanh tác vụ, [...] Là một thay thế, bạn có thể tạo một cửa sổ ẩn và đặt cửa sổ ẩn này thành chủ sở hữu của cửa sổ hiển thị của bạn.

Khi bạn đặt MainFormOnTaskbar thành sai, biểu mẫu chính do cửa sổ ứng dụng thiết kế VCL sở hữu. Và nếu bạn ẩn cửa sổ ứng dụng, yêu cầu sẽ được đáp ứng.

-1

biểu mẫu chính của ứng dụng thường được tạo trong dpr để mở dpr và tìm dòng tạo biểu mẫu chính.

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

tôi biết điều này hoạt động trên XP và 7. Tôi đoán nó cũng tốt cho 8. này cho biết thêm cửa sổ cờ công cụ và loại bỏ cờ appwindow vì vậy tôi đoán nếu bạn không quan tâm đến cờ toolwindow bạn có thể bỏ qua những điều sau phần

i OR WS_EX_TOOLWINDOW 
+0

Nó không hoạt động! – Ampere

Các vấn đề liên quan