我正在编写一个生成模拟用户输入的程序,并创建了一个类来执行此操作。当我尝试使用gcc在code :: blocks中构建它时会抛出错误,说“错误:'INPUT'没有命名类型”。有人可以解释我收到此错误的原因。下面是发生错误的头文件
#ifndef INPUTSIMULATOR_H
#define INPUTSIMULATOR_H
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#include <Winuser.h>
enum type{KEYBOARD,MOUSE};
enum button{LEFT,RIGHT,MIDDLE};
class inputSimulator
{
public:
inputSimulator(type _inputType);
virtual ~inputSimulator();
int generateKeyEvent (int vk);
int generateMouseButtonDown(button eventType);
int generateMouseButtonUp(button eventType);
int generateMouseMovement(int dy, int dx);
protected:
private:
INPUT input; //error occurs here
type inputType;
};
#endif
编辑:我发现了同一问题的另一个实例,但没有解决方案。 https://stackoverflow.com/questions/7222529/input-structure-in-simulating-actions-in-winapi
答案 0 :(得分:1)
我无法重现这个问题。当我添加windows.h
时(顺便提一下,您应该直接包含,而不是winuser.h
或wingdi.h
),INPUT
结构被正确声明并定义为它应该是。
Windows标头出现问题。同样的事情显然发生在那个人身上。你可能都使用Code :: Blocks或者提供自己重新实现Windows头的东西。它们要么省略INPUT
结构的定义,要么无意中隐藏它。
我建议直接从Microsoft下载并安装latest version of the Windows SDK或Windows 7 SDK。除非在您自己的项目中隐藏INPUT
结构,否则这应该可以解决您的问题。确保您没有在命令行上定义具有相同名称的预处理器宏(或者通过IDE的选项来执行相同的操作)。
答案 1 :(得分:0)
为什么重新发明轮子?使用Autoit自动化用户输入。
您还可以使用他们的C ++ COM库来帮助您轻松模拟用户交互。