Win32程式設計中如何處理控制台訊息

2022-03-15 15:17:28 字數 1279 閱讀 7443

這篇文章討論如何處理所有的控制台訊息。

第一步,首先要安裝乙個事件鉤子,也就是說要建立乙個**函式。呼叫win32 api,原型如下:

bool setconsolectrlhandler(

phandler_routine handlerroutine, // **函式

bool add // 表示新增還是刪除

);引數handlerroutine是乙個指向函式的指標,原型如下:

bool winapi handlerroutine(

dword dwctrltype // 控制事件型別

);所有的handlerroutine函式只有乙個引數dwctrltype,他表示控制台發出了什麼訊息。引數有下列值:

ctrl_c_event - 當使用者按下了ctrl+c,或者由generateconsolectrlevent api發出. 

ctrl_break_event - 使用者按下ctrl+break, 或者由generateconsolectrlevent api發出.

ctrl_close_event - 當試圖關閉控制台程式,系統傳送關閉訊息。

ctrl_logoff_event - 使用者退出時,但是不能決定是哪個使用者. 

ctrl_shutdown_event - 當系統被關閉時.

當收到事件的時候,handlerroutine可以選擇處理,或者簡單的忽略。如果**函式選擇忽略,函式返回false,系統將處理下乙個鉤子程式。如果處理訊息,程式在處理完訊息後應該返回true。

ctrl_close_event, ctrl_logoff_event和ctrl_shutdown_event通常被用來處理一些程式的清理工作,然後呼叫exitprocess api。另外,這三個事件有超時機制,ctrl_close_event是5秒,另外兩個是20秒。如果程式超時候,系統將會彈出結束程序的對話方塊。如果使用者選擇了結束程序,任何清理工作都不會做,所以應該在超時時間內完成工作。下面是乙個**函式的例子:

bool winapi consolehandler(dword cevent)

return true;

}好,現在已經有了**函式,再來看看怎麼安裝鉤子:

if (setconsolectrlhandler(

(phandler_routine)consolehandler,true)==false)

第乙個引數是函式指標,就是上面的那個函式。第二個引數是標誌,如果為true那麼就安裝鉤子,如果為false那麼刪除鉤子。

好了,在安裝了鉤子後,我們就能收到控制台訊息了,在程式退出前,要刪除鉤子。很簡單吧。

Win32程式設計中如何處理控制台訊息

這篇文章討論如何處理所有的控制台訊息。第一步,首先要安裝乙個事件鉤子,也就是說要建立乙個 函式。呼叫win32 api,原型如下 bool setconsolectrlhandler phandler routine handlerroutine,函式 bool add 表示新增還是刪除 引數han...

win32控制台 win32工程 MFC工程的區別

空專案 控制台 問2個問題即可。1.控制台 vs win32 mfc?嗯,有不有臉?有臉,選win32或mfc。沒有臉,選控制台。臉就是視窗,就是window.s 這個有臉 這個沒臉 控制台與win32 mfc 互動方式的不同,前者是cml 命令模式 後者是gui 使用者介面 2.mfc vs wi...

WIN32控制台生成DLL

step 2 建立好的工程會自動生成dllmain.cpp win32dlltest.cpp等檔案。工程中建立新檔案,型別選擇def,名字為dllmain step 3 在dllmain.cpp中實現函式功能,匯出函式名為audit chargesystem function,函式實現為 這是匯出函...