为什么下面的代码总是打印出来127(“无法找到指定的程序。”)即使它找到“firefox.exe”并成功终止它?
#include<Windows.h>
#include <TlHelp32.h>
#include<iostream>
using namespace std;
int main( int, char *[] )
{
PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Process32First(snapshot, &entry) == TRUE)
{
while (Process32Next(snapshot, &entry) == TRUE)
{
if (_tcscmp(entry.szExeFile, TEXT("firefox.exe")) == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
DWORD d = GetLastError();
cout<<d<<'\n';
TerminateProcess(hProcess,0);
CloseHandle(hProcess);
}
}
}
CloseHandle(snapshot);
return 0;
}
答案 0 :(得分:4)
您需要在检查GetLastError
之前检查特定功能的返回值。
GetLastError
将始终返回API函数设置的最后一个错误代码。但是,并非所有函数都会在成功时设置上一个错误代码。因此GetLastError
的结果可能是在程序的其他部分设置的错误代码。
因此,在您的情况下,根据OpenProcess
的MSDN文档,如果失败,函数将返回NULL
。因此,如果GetLastError
返回OpenProcess
以外的其他内容,则无需查看NULL
。
请注意,当前线程的最后一个错误代码 是唯一的。
答案 1 :(得分:1)
如果函数失败,则返回值为NULL。要获得扩展错误 信息,调用GetLastError。
这是Windows API中的常见模式,GetLastError通常仅在函数失败时才有效...(某些函数如GetFileSize和GetFileType要求您调用GetLastError来判断返回的值是否有效)