1

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

4

2 回答 2

1

我无法重现此问题。当我包含时windows.h(顺便说一句,您应该始终直接包含,而不是winuser.hor wingdi.h),INPUT结构被正确声明和定义,就像它应该的那样。

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

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

于 2013-02-15T06:52:07.000 回答
0

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

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

于 2013-02-15T06:40:18.267 回答