如下:
//枚舉並得到進程ID: PROCESSENTRY32 p32;
HANDLE hprocess;
HANDLE pName=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
//開始查找
BOOL Next=Process32First(pName,&p32);
int i=0;
//遍歷進程
while(Next)
{
//?示?程
if((strcmpi(p32.szExeFile,"loadappi.exe"))==0) //"你要的?程");
{
//根据?程ID?取句并
hprocess=OpenProcess(PROCESS_CREATE_PROCESS,0,p32.th32ProcessID);
// hprocess=OpenProcess(PROCESS_TERMINATE,0,p32.th32ProcessID);
//好了?得你要的句柄了。
AfxMessageBox("have found the loadappi.exe process");
SuspendThread(hprocess);//這一句為什麼不起作用,我的那個程式仍然可以運行,界 面上的test按鈕仍然可以按下並執行.
AfxMessageBox("SuspendThread ok?"); break;
}
//??查找
Next=Process32Next(pName,&p32);
i++;
} CloseHandle(pName);
AfxMessageBox("Not SuspendThread ok?");
各位大俠幫忙看看哪里出問題了?
//枚舉並得到進程ID: PROCESSENTRY32 p32;
HANDLE hprocess;
HANDLE pName=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
//開始查找
BOOL Next=Process32First(pName,&p32);
int i=0;
//遍歷進程
while(Next)
{
//?示?程
if((strcmpi(p32.szExeFile,"loadappi.exe"))==0) //"你要的?程");
{
//根据?程ID?取句并
hprocess=OpenProcess(PROCESS_CREATE_PROCESS,0,p32.th32ProcessID);
// hprocess=OpenProcess(PROCESS_TERMINATE,0,p32.th32ProcessID);
//好了?得你要的句柄了。
AfxMessageBox("have found the loadappi.exe process");
SuspendThread(hprocess);//這一句為什麼不起作用,我的那個程式仍然可以運行,界 面上的test按鈕仍然可以按下並執行.
AfxMessageBox("SuspendThread ok?"); break;
}
//??查找
Next=Process32Next(pName,&p32);
i++;
} CloseHandle(pName);
AfxMessageBox("Not SuspendThread ok?");
各位大俠幫忙看看哪里出問題了?
是這樣的,另外的一個程式已經在系統中先運行了,我的程式是後臺監控的,如果找到了它,並且它按了test按鈕之後就要將其停住,等後臺程式干完其它的事之後,再去恢復執行它.
所以創建時候的句柄無法在後臺程式中得到.
hprocess是進程句柄,又不是線程的,憑什麽終止人家啊!
WaitForSingleObject(hProcess,INFINITE)
只能暂停线程。线程才是Windows下的执行单元。
如果你要整个进程都暂停,那么只好暂停其中所有的线程了。