尝试使用win32 INPUT结构作为成员变量时出错

时间:2013-02-13 09:18:02

标签: c++ winapi

我正在编写一个生成模拟用户输入的程序,并创建了一个类来执行此操作。当我尝试使用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

2 个答案:

答案 0 :(得分:1)

我无法重现这个问题。当我添加windows.h时(顺便提一下,您应该直接包含,而不是winuser.hwingdi.h),INPUT结构被正确声明并定义为它应该是。

Windows标头出现问题。同样的事情显然发生在那个人身上。你可能都使用Code :: Blocks或者提供自己重新实现Windows头的东西。它们要么省略INPUT结构的定义,要么无意中隐藏它。

我建议直接从Microsoft下载并安装latest version of the Windows SDKWindows 7 SDK。除非在您自己的项目中隐藏INPUT结构,否则这应该可以解决您的问题。确保您没有在命令行上定义具有相同名称的预处理器宏(或者通过IDE的选项来执行相同的操作)。

答案 1 :(得分:0)

为什么重新发明轮子?使用Autoit自动化用户输入。

您还可以使用他们的C ++ COM库来帮助您轻松模拟用户交互。