11

画面上のカーソルを直接操作できるように、SendInput 関数の適切な使用方法を理解しようとしています。そのため、基本的なテストで動作を確認するために、カーソルを 10 ピクセル移動する短いスニペットを作成しました。右。理論的には。

#include <windows.h>
#include <winable.h>

int main()
{
    INPUT joyInput;
    joyInput.type = INPUT_MOUSE;
    joyInput.mi.dx = 10;
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE;
    SendInput(1, &joyInput, sizeof(INPUT));
    return 0;
}

ただし、実際には、SendInput 関数はコンピューターをスリープ状態にするか、少なくともモニターをオフにします。これは確かに望ましくない効果です! その行をコメントアウトすると問題が発生しなくなりますが、タスクを実行するには明らかに必要です。私は何を間違っていますか?

4

1 に答える 1

8

MOUSEINPUT構造体には、初期化していない 3 つのメンバー( dymouseData、および ) がありtimeます。ドキュメンテーションにはデフォルト値が記載されていないため、プログラムは最初にこれらのメンバーに必要なジャンクを自由に入力できると思います。これを回避するには、値を明示的に設定する必要があります。

#include <windows.h>
#include <winable.h>

int main()
{
    INPUT joyInput;
    joyInput.type = INPUT_MOUSE;
    joyInput.mi.dx = 10;
    joyInput.mi.dwFlags = MOUSEEVENTF_MOVE;

    joyInput.mi.dy = 0;
    joyInput.mi.mouseData = 0;
    joyInput.mi.time = 0;

    SendInput(1, &joyInput, sizeof(INPUT));
    return 0;
}
于 2012-12-05T13:19:14.313 に答える