2010-04-07 67 views
3

在Delphi 5上運行的服務應用程序旨在運行在Windows XP - 7.大多數應用程序很好地融合在一起,但我遇到了一個問題。此服務應用程序的一部分是偶爾顯示數據的表單(類似於Avast用於通知您更新的滑塊)。當服務顯示錶單時,表單顯示在任務欄上,但我們不希望它顯示。有沒有人對如何在taksbar上隱藏窗體按鈕有任何建議?我發現的常規應用程序的標準方法到目前爲止都沒有工作。謝謝。服務應用程序太可見

+4

如果是服務,那麼它將無法在Windows Vista和Windows 7中顯示任何表單。但無論如何,服務方面與您的問題無關。你只是想顯示一個不顯示在任務欄上的表單。 – 2010-04-07 23:13:43

回答

1

重寫表單的CreateParams方法並將WS_EX_TOOLWINDOW值添加到Params.ExStyle字段。這將標記爲一個工具窗口,它不會有任務欄條目。

+1

現在很好用。謝謝。 – 2010-04-08 15:06:42

1

發現這對http://delphi.about.com/od/adptips1999/qt/hidefromtaskbar.htm

procedure TMainForm.FormCreate(Sender: TObject) ; 
begin 
    ShowWindow(Application.Handle, SW_HIDE) ; 
    SetWindowLong(Application.Handle, GWL_EXSTYLE, getWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW) ; 
    ShowWindow(Application.Handle, SW_SHOW) ; 
end; 

用Delphi 2007,隱藏任務欄按鈕,你將需要幾行代碼:

設置MainFormOnTaskBar爲FALSE

裏面的主窗體的OnShow中事件處理程序調用

ShowWindow(Application.Handle, SW_HIDE); 

裏面主窗體的OnActivate事件處理程序調用

ShowWindow(Application.Handle, SW_HIDE); 
+1

是的,我也發現了這一點,但不幸的是,它沒有工作,因爲它針對的是winforms應用程序,而不是服務應用程序(不同的應用程序變量類型)。不過謝謝。 – 2010-04-08 00:01:01

7

聽起來好像您設想有一個通知區域圖標(a.k.a.系統托盤圖標)通知用戶有關服務中/與服務有關的事件。

您需要將服務的GUI方面與服務本身分開,並使用某種IPC來允許托盤圖標小程序根據需要與服務進行通信。根據IPC的需要,這可能是一個命名管道,共享訪問內存映射文件或更復雜的東西。

然後,用於管理GUI w.r.t任務欄行爲的技術應按預期工作。

相關問題