为什么下面的代码总是输出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;
}发布于 2012-05-29 02:37:13
在检查GetLastError之前,需要先检查特定函数的返回值。
GetLastError将始终返回由API函数设置的最后一个错误码。然而,并非所有函数在成功时都会设置最后一个错误代码。因此,GetLastError的结果可能是在程序的其他部分设置的错误代码。
因此,在您的示例中,根据OpenProcess的MSDN文档,如果失败,该函数将返回NULL。因此,如果OpenProcess返回的不是NULL,则无需查看GetLastError。
请注意,最后一个错误代码是当前线程唯一的。
发布于 2012-05-29 02:51:12
如果函数失败,则返回值为NULL。要获取扩展的错误信息,请调用GetLastError。
这是Windows API中的一种常见模式,GetLastError通常只有在函数失败时才有效。( GetFileSize、GetFileType等函数需要调用GetLastError判断返回值是否合法)
https://stackoverflow.com/questions/10788904
复制相似问题