c – 即使配置了搜索目录,CodeBlock也未定义对Windows API函数的引用

我正在尝试使用带有Code :: Blocks的minGw编译器编译一个小程序.我的程序如下所示:

    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    int main()
    {
        HWND hwnd = FindWindowA(NULL, "A Valid Window Title");
        printf("Window Handle=%X\n", hwnd);
        DWORD pid = 0;
        GetWindowThreadProcessId(hwnd, &pid);
        printf("PID=%d\n", pid);
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);
        printf("Process HANLDE=%X\n", hProcess);
        GetProcessId(hProcess);
        CloseHandle(hProcess);
        return 0;
    }

但是,当我尝试编译时,Code :: Blocks会产生对GetProcessId错误的未定义引用.如果我删除对GetProcessId的调用,程序将编译并正常运行.我认为此错误消息是由不正确的搜索路径引起的.所以我去了我的设置并添加

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include
    C:\Program Files (x86)\Windows Kits\8.1\Include\shared
    C:\Program Files (x86)\Windows Kits\8.1\Include\um

到我的搜索目录.但这次,Code :: Blocks会产生更多错误.我的第二个想法可能是这是由一些链接错误引起的.所以我转到我的设置并明确地将Kernel32.lib和User32.lib添加到我的项目中.仍然会出现相同的错误.让我感到困惑的是,当我输入GetProcessId时,实际出现了建议,并指出有一个名为GetProcessId的函数《c – 即使配置了搜索目录,CodeBlock也未定义对Windows API函数的引用》

这个问题的原因是什么,我该如何解决?

最佳答案 GetProcessId至少需要Windows XP SP1.假设没有人使用较旧的操作系统是安全的,因此您可以添加#define WINVER 0x0501以指示最低操作系统.将它放在文件的开头或所有* .cpp文件使用的.h文件中

#define WINVER 0x0501

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

int main()
{
...
}

编辑—-见评论

点赞