怎么实现MFC程序自动重启

怎么实现MFC程序自动重启,第1张

void CreateTestFuncProcess(CString strCmd)

{

TCHAR* lpCmdLine = (LPTSTR)((LPCTSTR)strCmd)

STARTUPINFOsi = {sizeof(si)}

si.dwFlags |= STARTF_USESHOWWINDOW

si.wShowWindow = SW_HIDE

PROCESS_INFORMATION pi

if(!CreateProcess(NULL,lpCmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))

{

CStringstrDbg = _T("")

strDbg.Format(_T("CreateProcess Failed code : %d"),GetLastError())

MessageBox(NULL,strDbg,MessageBoxName,MB_OK)

}//else MessageBox(NULL,_T("Create process OK!"),MessageBoxName,MB_OK)

}

用ShellExecuteEx启动另外一个程序,传递一个reboot参数,然后在新启动唯铅链的程序中接收这个参数,来判断自身是“重启”的结果,然后寻找之前的窗体,最激凳后TerminateProcess

之前指孙的进程

在程序里面创建一个定时器,随时检查QQ进程有没有启动,如果启动了,则重启电脑。

下面这个函数用来检查某个进程是否启动,返回该进程的ID。如果所查找的进程没有启动,则返回0。逗洞

//获取对应进程名的ID

DWORD GetSpecifiedProcessId(const char *pszProcessName)

{

DWORD id = 0

//获得系统快照句山液枯柄 (通俗的讲, 就是得到当前的所有进程)

HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)

PROCESSENTRY32 pInfo//用于保存进程信息的一个数据结构

pInfo.dwSize = sizeof(pInfo)

//从快照中获取进程列表

Process32First(hSnapShot, &pInfo) //从第一埋启个进程开始循环

do

{

//这里的 pszProcessName 为你的进程名称

if(strcmp(strlwr(_strdup(pInfo.szExeFile)), pszProcessName) == 0)

{

id = pInfo.th32ProcessID

break

}

} while(Process32Next(hSnapShot, &pInfo) != FALSE)

return id//id 就是你要的进程PID 了..

}

比如查找QQ进程是否启动,可以这样写:

DWORD id = GetSpecifiedProcessId( _T("QQ.exe") )

if ( id != 0 ) 重启电脑


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12404071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存