1. 程式人生 > >VC結束程序

VC結束程序

本程序可使用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