【问题标题】:error while trying to use the win32 INPUT struct as a member variable尝试使用 win32 INPUT 结构作为成员变量时出错
【发布时间】:2013-02-15 14:52:07
【问题描述】:

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

【问题讨论】:

  • 你应该包含 而不是
  • 我这样做了,但它仍然给我同样的错误。

标签: c++ winapi


【解决方案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 的选项来执行相同操作)。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 1970-01-01
      • 2023-03-03
      • 2021-12-14
      相关资源
      最近更新 更多