send control-c to console mode application |
尚未結案
|
a174709
一般會員 發表:5 回覆:3 積分:1 註冊:2005-08-07 發送簡訊給我 |
各位大大,
[code cpp] STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if(!CreateProcess(NULL, "ping -t 127.0.0.1", NULL, NULL, TRUE, CREATE_NEW_PROCESS_GROUP /*0*/, NULL, NULL, &si, &pi) ) { return true; } if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE) != 0) { if (GenerateConsoleCtrlEvent(CTRL_C_EVENT, pi.dwProcessId) == 0) ShowMessage("GenerateConsoleCtrlEvent fail."); } else ShowMessage("SetConsoleCtrlHandler fail."); [/code] callback function [code cpp] bool __fastcall ConsoleHandler(DWORD CEvent) { switch(CEvent) { case CTRL_C_EVENT: ShowMessage(NULL, "CTRL C received!"); break; case CTRL_BREAK_EVENT: ShowMessage("CTRL BREAK received!"); break; case CTRL_CLOSE_EVENT: ShowMessage("Program being closed!"); break; case CTRL_LOGOFF_EVENT: ShowMessage("User is logging off!"); break; case CTRL_SHUTDOWN_EVENT: ShowMessage("User is logging off!"); break; } return TRUE; } [/code] 我想要使用 Control C 讓這個 console mode 裡的 ping 程式停止執行的話該如何做呢? 我不使用 TerminateProcess 結束掉, 我參考了一下其它的資料,有提到可以用 SetConsoleCtrlHandler 來先設定中斷要執行的 method ,再使用 GenerateConsoleCtrlEvent 產生 Control-C 的中斷,但是 SetConsoleCtrlHandler 在 BCB5裡我不知道該怎麼做(一直 complier error) 我參考 MSDN, SetConsoleCtrlHandler 第一個參數是 PHANDLER_ROUTINE Type 要傳一個 function address 在 VC 裡是把這個函式宣告成 WINAPI 也就是 __stdcall , 但是在 BCB 裡是用 __fastcall , 所以一直不知道該怎麼先 完成 SetConsoleCtrlHandler function 的部份, 其次是該如何實作Control-C的部份 不知道各位大大有什麼想法嗎?還是有其它可參考的地方呢? 謝謝.... compiler error message:(錯在 SetConsoleCtrlHandler 的地方) [C Error] Unit1.cpp(84): E2235 Member function must be called or its address taken 編輯記錄
a174709 重新編輯於 2008-03-26 16:53:07, 註解 無‧
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
a174709
一般會員 發表:5 回覆:3 積分:1 註冊:2005-08-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |