2016-03-22 8 views
0

私は自分のマウスを置いた場所を記録してから正確な座標をクリックするようにしましたが、最後にはマウスが最後の場所でクリックしたのと同じ数のクリックをします。winapi mouse_event wrong coords

const int WAIT_INTERVAL = 5; 
const int CLICK_POINTS = 5; 
POINT mouse[CLICK_POINTS]; 
int clicks; 
bool didGetPos; 

for (int i = 1; i <= CLICK_POINTS; i++) 
    { 
     cout << i << " spot" << endl; 
     Sleep(3000); 
     didGetPos = GetCursorPos(&mouse[i - 1]); 

     if (!didGetPos) 
     { 
      break; 
     } 
    } 

    if (didGetPos) 
    { 
     for (int i = 0; i < CLICK_POINTS; i++) 
     { 
      for (int j = 0; j < clicks; j++) 
      { 
       mouse_event(MOUSEEVENTF_LEFTDOWN, mouse[i].x, mouse[i].y, 0, 0); 
       mouse_event(MOUSEEVENTF_LEFTUP, mouse[i].x, mouse[i].y, 0, 0); 
      } 
     } 
    } 
+0

*この機能は置き換えられました。代わりにSendInputを使用してください。* –

+0

Didnt help ..まだ同じ最後の場所 –

+0

あなたのコードをSendInputの使用を示すように更新してください。誰かがあなたを助けるかもしれません。 –

答えて

1

あなたはMOUSEEVENTF_ABSOLUTEフラグを含めませんでした。 documentationさんのコメント:

dxパラメータとdyパラメータには、正規化された絶対座標が含まれています。設定されていない場合、これらのパラメータには相対的なデータが含まれます:最後に報告された位置からの位置の変化。このフラグは、マウスまたはマウスのようなデバイスがシステムに接続されているかどうかに関係なく、設定することも、設定しないこともできます。

絶対座標を渡しているので、MOUSEEVENTF_ABSOLUTEフラグを含める必要があります。

もちろん、ドキュメントに耳を傾けて、この代替機能の使用を中止する必要があります。 SendInputを使用してください。