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たり、誤って隠したりします。

Windows SDKまたはWindows 7 SDKの最新バージョンをMicrosoft から直接ダウンロードしてインストールすることをお勧めします。独自のプロジェクトで構造の非表示が発生していない限り、これで問題は解決するはずです。コマンド ラインで (または同じことを行うための IDE のオプションを介して) 同じ名前のプリプロセッサ マクロを定義していないことを確認します。INPUT

于 2013-02-15T06:52:07.000 に答える
0

なぜ車輪の再発明をするのですか?Autoitを使用してユーザー入力を自動化します。

また、ユーザーの操作を簡単にシミュレートするのに役立つC++COMライブラリを使用することもできます。

于 2013-02-15T06:40:18.267 に答える