1

为什么下面的代码即使找到“firefox.exe”并成功终止,也总是打印出127(“找不到指定的程序。”)?

#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;
}
4

2 回答 2

4

在检查之前,您需要检查特定函数的返回值GetLastError

GetLastError将始终返回由 API 函数设置的最后一个错误代码。但是,并非所有函数都会在成功时设置最后一个错误代码。因此,结果GetLastError可能是在程序的其他部分设置的错误代码。

因此,在您的情况下,根据 MSDN 文档,如果失败OpenProcess,该函数将返回。NULL因此,无需查看GetLastError是否OpenProcess返回NULL.

请注意,最后一个错误代码对于当前线程是唯一的。

于 2012-05-28T18:37:12.917 回答
1

如果函数失败,则返回值为 NULL。要获取扩展错误信息,请调用 GetLastError。

这是 Windows API 中的常见模式,GetLastError 通常仅在函数失败时才有效...(某些函数如GetFileSize和 GetFileType 要求您调用 GetLastError 来判断返回值是否有效)

于 2012-05-28T18:51:12.027 回答