为什么下面的代码总是打印出127(“指定的程序找不到”),即使find“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; }
在检查GetLastError
之前,您需要检查特定函数的返回值。
GetLastError
将始终返回由API函数设置的最后一个错误代码。 但是,并不是所有的函数都会在成功时设置最后的错误代码。 所以GetLastError
的结果可能是在程序的其他部分设置的错误代码。
所以在你的情况下,根据OpenProcess
的MSDN文档,如果失败,函数将返回NULL
。 因此,如果OpenProcess
返回的不是NULL
则不需要查看GetLastError
。
请注意,最后一个错误代码对于当前线程是唯一的。
如果函数失败,则返回值为NULL。 要获得扩展错误信息,请调用GetLastError。
这是Windows API中的常见模式,GetLastError通常只在函数失败时才有效…(一些像GetFileSize和GetFileType这样的函数要求您调用GetLastError来判断返回的值是否有效)