5

mouse_event 関数は、カーソルをわずかに間違った座標 (1 ~ 20 ピクセル オフ) に送信します。どの程度「ずれている」かは、よくわからないパターンに基づいています。

これが私のコードです

int x, y;
int repeats = 1000;
int start = 0;
POINT pt;

for(int i=0; i<repeats; i+=10) //first loop, down right
{
    x = (65536 / 1920) * i - 1; //convert to absolute coordinates
    y = (65536 / 1080) * i - 1;
    mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0); //move
    GetCursorPos(&pt); //get cursor position
    if(pt.x != i){mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);} //check if the position is wrong, and if so fix it.
    if(pt.y != i){mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);}
    cout << "Try: " << i << ", " << i << "\tReal: " << pt.x << ", " << pt.y << "\tDiff: " << pt.x - i << ", " << pt.y - i << '\n';
}

    for(int i=repeats; i>0; i-=10) //second loop, up left
{
    x = (65536 / 1920) * i - 1;
    y = (65536 / 1080) * i - 1;
    mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);
    GetCursorPos(&pt);
    if(pt.x != i){mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);}
    if(pt.y != i){mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE, x, y, 0, 0);}
    cout << "Try: " << i << ", " << i << "\tReal: " << pt.x << ", " << pt.y << "\tDiff: " << pt.x - i << ", " << pt.y - i << '\n';
}

これを実行すると、マウスが画面の左上から右下に移動し、再び元に戻ります。しかし、下に行くほど、「mouse_event」によって作成されたマウスの動きが正しくなくなります。

それを動かして、現在の座標を記録し、差を計算します。画面を下に行くほど差(動きの誤差)が大きくなります。座標がオフになっているかどうかをテストし、マウスを正しい場所に移動しようとする追加のチェックを追加しようとしましたが、機能していません

なぜこれが考えられるのでしょうか?

便宜上、このプログラムの出力のログを次に示します。

Output_Log.txt

最初のループ (マウスを下と右に移動) でエラーが増加し、2 番目のループ (マウスを再び上と左に移動) でエラーが同じように減少することが明確に示されています。

なぜこれが起こっているのでしょうか?より複雑な実装でも、定量化できず、これとは異なる方法で発生するため、 mouse_event 関数自体または理解できない機能内にある必要があると思います

助けてくれてありがとう

4

1 に答える 1

2

ピクセルを計算するために整数演算を使用しているためだと思います。これを試してください:

x = (int)(65536.0 / 1920 * i - 1); //convert to absolute coordinates
y = (int)(65536.0 / 1080 * i - 1);
于 2013-05-31T04:31:57.420 に答える