'INPUT'未在此范围内声明

Kev*_*vin 1 c++ winapi

我正在尝试编写几年前我写的一个模拟鼠标点击和击键的程序.我把它简化为这个最小的例子:

#include "Windows.h"

int main(){
    INPUT foo;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

C:\projects\clicker>g++ minimaltest.cpp
minimaltest.cpp: In function 'int main()':
minimaltest.cpp:4:2: error: 'INPUT' was not declared in this scope
minimaltest.cpp:4:8: error: expected ';' before 'foo'
Run Code Online (Sandbox Code Playgroud)

MSDN在INPUT上的页面说它是在Windows.h中定义的,所以我不知道为什么它不能识别这种类型.

另一个stackoverflow用户在这里有类似的问题,但他们的解决方案,添加#define _WIN32_WINNT 0x0500,没有修复错误.

几年前我在Windows XP上构建了这个程序.是不是INPUT在Windows 7上的运行方式与它在XP上的运行方式不同?或者我忘了给编译器提供一个标志?

chr*_*ris 6

#define之后放错了地方#include.结果是windows.h看到_WIN32_WINNT未定义,因此INPUT未声明.然后你在INPUT现有的机会过去之后定义它.

#define _WIN32_WINNT 0x0500 //RIGHT
#include "Windows.h"
#define _WIN32_WINNT 0x0500 //WRONG

int main(){
    INPUT foo;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

作为旁注,除非windows.h与源文件位于同一目录中,否则通常应使用#include <>而不是导入#include "".