{
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 ) 重启电脑
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)