VC結束程序
阿新 • • 發佈:2018-11-09
本程序可使用ExitProcess()結束程序
該函式具有強制性,在執行完畢後進程即被結束,因此位於其後的任何程式碼將不能被執行。雖然ExitProcess()函式可以在結束程序的同時通知與其關聯的動態連結庫,但是由於它的這種執行的強制性,使得ExitProcess()函式在使用上將存在有安全隱患。
其他程序可使用TerminateProcess()結束程序
示例:
void CMFCApplication4Dlg::OnBnClickedButton1() { // TODO: 在此新增控制元件通知處理程式程式碼 //開啟計算器 ShellExecute(this->m_hWnd, _T("open"), _T("calc.exe"), NULL, NULL, SW_MAXIMIZE); } void CMFCApplication4Dlg::OnBnClickedButton2() { // TODO: 在此新增控制元件通知處理程式程式碼 /*HWND theWindow = ::FindWindow(NULL, _T("計算器")); ::SendMessage(theWindow, WM_CLOSE, NULL, NULL);*/ HWND theWindow = ::FindWindow(NULL, _T("計算器")); DWORD processid; ::GetWindowThreadProcessId(theWindow, &processid); HANDLE hprocessHandle = ::OpenProcess(PROCESS_TERMINATE, FALSE, processid); ::TerminateProcess(hprocessHandle, 4); }
使用findwindow查詢一個視窗控制代碼,如果不知道要關閉程序的類名和標題,則可以使用spy++獲取。
類名和標題,可以指輸入一個,另一個引數置為NULL
找到這個視窗的控制代碼之後,有兩種方式關閉程序。
1.向視窗傳送WM_CLOSE訊息
2.使用 TerminateProcess關閉程序。
2.1 使用GetWindowThreadProcessId獲取程序ID
2.2 使用OpenProcess獲取程序控制代碼
2.3 使用TerminateProcess結束程序,第二個引數置為4