windows编程 关于进程的关闭

来源:百度知道 编辑:UC知道 时间:2024/06/04 00:51:01
刚学windows编程 想调用API来查看当前的所有进程 如果进程名为cmd.exe的话就结束他
但是我开了 cmd.exe然后运行代码 但是cmd没有被关闭啊
代码:

#include <windows.h>
#include <iostream.h>
#include <tlhelp32.h>

BOOL Close_Process(DWORD wdId); //关闭进程

int main(int argc,char* argv[])
{
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(pe32);
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

if(hProcessSnap == NULL)
return -1;

bool bMore = ::Process32First(hProcessSnap,&pe32);
while(bMore)
{
cout << "name : " << pe32.szExeFile << endl;
cout << "Id : " << pe32.th32ProcessID << endl;
if(pe32.szExeFile == "cmd.exe")
{
Close_Process(pe32.th32ProcessID);
cout << "ok" << endl;
}
bMore = ::Process32Next(hProcessSnap,&pe32);
}

::CloseH

if(pe32.szExeFile == "cmd.exe")
是这句错了
原因应该是"cmd.exe"属于C风格的字符串而C风格字符串不支持直接的赋值、比较
你可以用strcmp()等专门比较c风格字符串的函数

if(pe32.szExeFile == "cmd.exe")
问题出现在这句。从语义上看,似乎是“如果exefile字符串和cmd.exe相等,就……”,实际上,在这里进行比较的,只是两个指针而已。你应该换成:
if(!lstrcmpi(pe32.szExeFile,"cmd.exe"))