2016-11-07 38 views
0

在單線程的命令行應用程序中,我想知道用戶什麼時候關閉(通過點擊右上角的紅叉)關閉PC或註銷,而不必先註銷我的應用程序,這樣我可以清除我在窗口註冊表中存儲的Cookie。C++中的自定義事件監聽器

當用戶完成上述事件並在我的應用程序中調用函數或在事件之後調用單獨的EXE或批處理文件時,有什麼方法可以知道嗎?

我需要這個功能,因爲我想防止在註冊表中充滿了由於未正確註銷應用程序而產生的不需要的響應。

由於我的應用程序通過命令提示符運行,如C:\Users\admin\Desktop>Application.exe -task "ConnectServer" --ip 127.0.0.1我正在尋找某種方式來以有效的方式管理cookie或在捕獲上述事件後刪除cookie。

+0

還有的[標準信號(http://en.cppreference.com/w/cpp/utility/program/SIG_types),首先,雖然Windows不會產生他們。 – StoryTeller

+0

@StoryTeller「雖然窗戶不會生成它們」你能解釋一下嗎?當我用'signal'函數註冊信號處理程序時,它對我來說工作正常。 –

+0

@SimonKraemer,[msdn文檔](https://msdn.microsoft.com/en-us/library/xdkz3x12.aspx)提及*「在Windows下不生成SIGILL和SIGTERM信號」* – StoryTeller

回答

2

你可以使用SetConsoleCtrlHandler()

+1

顯然不能用於在Windows 7及更高版本上關閉和註銷,您需要隱藏窗口來獲取這些事件。 – Hasturkun

+0

我試圖使用這個,但因爲我沒有任何連續運行的進程,所以我如何跟蹤這些事件? – DevMac

+0

@DevMac您需要一個正在運行的進程來實時獲取這些事件。如果您不想讓前臺應用程序繼續運行,則必須改爲編寫後臺服務。或者,根據您的Windows版本和策略設置,也許是調用應用程序的關閉腳本。 –