控制台程式在
windows
程式的角色中是非常強大且方便的,像vc,
c#,delphi
等等,好多功能強大的語言都支援控制台程式。她沒有複雜的
gui,完全是
32位的程式,能夠呼叫除
gdi
函式之外的
api,支援多執行緒,支援
mfc等等。用她來除錯程式、學習程式設計、做實驗等是再合適不過的了。我經常把我試驗性的程式用控制台方式來寫,非常方便。
console
程式不像
win32 gui
程式那樣具有訊息佇列,所以當程式中斷的時候也無從得知。假如我們程式正在處理乙個長時間的作業,當使用者要退出系統,或按了
ctrl + c(ctrl + break)
,或系統將要關閉的時候,我們的資料就可能會因此而丟失。難道沒有辦法了麼?哦,不,有辦法的。看下面,下面我將跟大家談談關於
console
程式的事件處理。
要讓控制台程式具有事件處理能力需要用到下面幾個
api函式,他們的原型宣告如下:
bool setconsolectrlhandler(
phandler_routine handlerroutine,// handler function
bool add);// add or remove handler
handlerroutine
指向乙個事件處理函式,是的,可能你已經猜到了,這個函式相當於
win32 gui
程式中的視窗處理函式。這個函式的原型如下:
bool winapi handlerroutine(
dword dwctrltype);//control signal type
這個函式的
dwctrltype
指示出接收到的控制訊號,這個引數可能是下面值中的某乙個:
信
號
描
述
ctrl_c_event 乙個
ctrl + c
的訊號被接收,該訊號或來自鍵盤,或來自
generateconsolectrlevent
函式
ctrl_break_event 乙個
ctrl + break
訊號被接收,該訊號或來自鍵盤,或來自
generateconsolectrlevent
函式
ctrl_close_event
當使用者系統關閉
console
時,系統會傳送此訊號到此
ctrl_logoff_event
當使用者退出系統時系統會傳送這個訊號給所有的
console
程式。該訊號不能顯示是哪個使用者退出。
ctrl_shutdown_event
當系統將要關閉時會傳送此訊號到所有
console
程式。
在程式中,
handlerroutine
接收到上面那些事件的時候就可以進行相應的處理或忽略該事件。如果選擇忽略該事件,則
handlerroutine
必須返回
false
,否則返回
true。
我們用setconsolectrlhandler
安裝handlerroutine
時,add
引數應設為
true
,想要刪除已經安裝的
handlerroutine
,請再用這個函式,只需把
add設為
false
即可。
另外,得用generateconsolectrlevent
函式可以產生
ctrl_c_event
和ctrl_break_event
事件,利用這個函式我們就可以在我們程式中更加巧妙靈活的控制程式了。這個
api使用方法非常簡單,我在這裡就不說了,可以參加
msdn
或api
手冊。
下面我們就來寫乙個非常簡單的程式:
int_tmain(int argc, _tchar* argv)
generateconsolectrlevent(ctrl_c_event, 0);
// 手工產生乙個事件
scanf("%s", buf);
// 模擬等待事件發生,如果不要這句執行
// 程式的時候,程式一閃即過,來不急觀
// 察程式。
return 0; }
bool winapi consolehandler(dword cevent)
return true; }
這段程式非常簡單,但原理非常重要有用,但願你們每個人都能看懂我在說什麼,好了,不說了,最近工作非常忙,有時間的時候我想跟大家討論一下吧,希望對大家有所幫助。
C 處理控制台關閉事件
我們開發的控制台應用,在執行階段很有可能被使用者ctrl c終止或是被使用者直接關閉。如果我們不希望使用者通過ctrl c終止我們的程式,就需要對ctrl c或關閉事件作處理。在.net平台下console類有個cancelkeypress事件可以處理ctrl c,不過對於直接關閉控制台應用,這種處...
控制台程式裡呼叫控制台程式
現在遇到這麼個問題,我想用控制台裡呼叫控制台程式來實現多文字。但是在控制台裡呼叫控制台程式時,它不是出現新的控制台視窗顯示,而是已有的控制台裡顯示呼叫的程式,system d code 練習 jjplace editor debug editor.exe winexec d code 練習 jjpl...
沒有控制台視窗的控制台程式
include include pragma comment linker,subsystem windows entry maincrtstartup int main int argc,char argv 編譯後執行程式會彈出乙個訊息框,而沒有背後的控制台視窗。再看看下面的 include in...