2010-04-15 54 views
0

我已經開始編寫一個Windows服務。我已經從工具箱中添加了一個通知圖標。 它具有作爲這些圖標的成員出現在系統托盤中的小通知圖標。編程一個Windows服務

它到目前爲止工作。

到目前爲止,我有一個空白的表格。我使用了DoubleClick for notifyIcon來調出 表單(稍後我將使用該表單)。

現在我列出了一些我想完成的工作,以使這項工作像真正的Windows 服務一樣。

首先,如果可能,我owuld喜歡刪除窗體上的最大化和取消按鈕。 我所見過的大多數windos服務應用程序都提供了通過右鍵單擊提示選項菜單的通知圖標來關閉應用程序的功能。

我在Misc下的窗體的屬性中看到有一個CancelButton。但我不明白如何停用它。在論壇的屬性中,我在Window Style下看到有一個ControlBox選項,如果我轉到false,所有三個按鈕(最小化,最大化和取消)都會消失。

這些都不是我要找的。我不想讓他們調整大小的選項, 最大化或關閉窗體。我懷疑人們會關閉這個盒子,意圖讓 使盒子消失,同時仍然希望應用程序運行。

在屬性中的「焦點」標題下,有「禁用」標識。我爲此創建了自己的 事件/方法/函數,並且在調試中我注意到,當您單擊右上角的x-box時,將調用此函數。問題是,在函數 結束之後,應用程序仍然關閉。我如何超越這個功能?

其次,您如何在 系統托盤中的通知圖標上點擊右鍵單擊事件?

我可以看到如何爲「點擊」和「鼠標點擊」等創建事件,但如何確定 哪個按鈕被點擊?

使用正確的按鈕是這樣的程序知道什麼時候拉起菜單。所以我想 喜歡知道如何做到這一點。

+1

這不是問題,這是一個項目建議書。 – 2010-04-15 22:51:30

+0

我絕對鄙視任何認爲「儘量減少托盤」的應用程序是一個好主意,這使得我通過更加棘手的箍筋和障礙將這個該死的東西從我的屏幕上移開。你的用戶會同意。接下來是什麼,添加一個確定可以檢查更新的計劃任務? (Google is Evil) – tsilb 2010-04-15 23:01:42

+0

我的用戶想要這個。 – xarzu 2010-04-16 00:02:27

回答

4

Windows服務不應該顯示通知圖標,也不應顯示錶單。很快你會發現,在Vista之後他們明確禁止這樣做。

您需要將應用程序拆分爲可能在通知托盤中顯示圖標並顯示錶單和服務的用戶程序。他們需要成爲不同的進程並通過IPC進行通信(共享內存,命名管道,套接字等)。在通知圖標問題

至於如何做出反應右擊鼠標,你只需要在你的設計師的東西分配給ContextMenu屬性:

菜單中所示,當用戶 右單擊任務欄的 通知區域中的圖標。 快捷菜單也被稱爲 彈出式菜單。

1

標準Windows服務根本無法使用任何用戶界面。一般來說,Visual Studio中的Windows服務項目類型不會包含任何UI組件。

您在使用其他服務時看到的UI是用於管理這些服務的輔助應用程序。這些可以在系統通知區域(「托盤」)中運行,或者可以以最小化的窗口運行,可以是MMC管理單元,或者可以是管理員在臨時基礎上啓動的獨立應用程序。

作爲示例,SQL Server作爲服務運行,無論Management Studio或任何其他輔助UI應用程序是否正在運行。

無論如何,服務的用戶界面「組件」需要是完全獨立的應用程序。這在後Vista世界中尤其重要,原因是Remus Rusanu。您將創建一個單獨的WinForms項目來執行此操作,並讓它將消息發送到要控制的服務。(這可能包括諸如啓動,停止和重新啓動等基礎知識;通常還包括其他特定於服務的命令。)

您可能需要考慮閱讀StackOverflow中的以下其他問題以獲取有關標準Windows服務/ UI助手應用程序模式: