第一步:
运行一个新实例:附带参数 Reboot
void ReStart()
{
PROCESS_INFORMATION info;
STARTUPINFO startup;
TCHAR szPath[_MAX_PATH] = {0};
TCHAR *szCmdLine = _T(" Reboot");
::GetModuleFileName(GetInstance(),szPath,sizeof(szPath));
::GetStartupInfo(&startup);
::CreateProcess(szPath, szCmdLine, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &startup,&info);
}
第二步:
程序实例初始化的时候判断参数:
HWND hOtherWnd = ::FindWindow(_T("xxx"),_T("xxxxx"));
DWORD dwCode;
if(hOtherWnd)
{
if(_tccmp(lpCmdLine,_T("Reboot")) == 0)// 如果是 重启,关闭原运行实例,运行新实例
{
HANDLE hApp;
DWORD dProcess;
::GetWindowThreadProcessId(hOtherWnd,&dProcess);
hApp= OpenProcess(PROCESS_VM_OPERATION|SYNCHRONIZE,FALSE,dProcess);
::SendMessage(hOtherWnd,WM_DESTROY,0,0);
::WaitForSingleObject(hApp,INFINITE);// 等待程序关闭
}
else if(_tccmp(lpCmdLine,_T("Close")) == 0)// 如果是 关闭,关闭原实例并退出
{
::SendMessage(hOtherWnd,WM_DESTROY,0,0);
return 0;
}
else// 否则,激活原实例(保证只运行一个)
{
::SendMessage(hOtherWnd,WM_TRAY,0,WM_LBUTTONDBLCLK);
return -2;
}
}
// 后面。。。