2012-04-26 10 views
1

たとえば、Windowsの[スタート]ボタンをクリックすると、下のスクリプトは完全に動作しますが、特定のGUIプログラムのボタンをクリックしようとすると、効果。特定のGUIでマウスクリックコマンドが機能しない

このプログラムが仮想マウスクリックを無効にしている可能性はありますか? もしそうなら、何とかこれを回避できますか?

import win32api, win32con 
Po=win32api.GetCursorPos() 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,Po[0],Po[1],0,0) 
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,Po[0],Po[1],0,0) 

答えて

1

mouse_event(とSendInputは、入力に使用するための好ましいAPIです)ビット、それは良いアイデアの read the MSDN page for mouse_event完全かつ慎重にusiの前に小さなプリントに注意してください。特に、xとyの値はではなく、ピクセルであるため、GetCursorPosから取得した値を入れることはできません。

ちょうど0,0が左下隅にあるので、左下の点は画面のほぼ同じ領域に表示されますが、離れていくほどピクセル値が大きくなりますこのAPIが使用する実際のユニットから:開始ボタンの近くの位置(画面の左下にあると仮定して)で動作するように見えるかもしれませんが、他の値の場合は、他の値をクリックしているように見えますあなたが見ているものに。応じて、最後のマウスイベントが発生したため、x軸又はその運動量沿っDWORD
マウスの絶対位置:

DX
[IN]種類:MSDNから

MOUSEEVENTF_ABSOLUTEの設定。絶対データは、マウスの実際のx座標として指定されます。相対データは、移動されたマイクロキーの数として指定されます。ミッキーマウスは、移動したことを報告するためにマウスが移動しなければならない量です。

まず、MOUTEVENTF_ABSOLUTEフラグが必要です。それだけではありません。MOUSEEVENTF_ABSOLUTE値が指定されている場合は、DXとdyが0と65,535の間の正規化絶対座標が含まれている

備考
...。
イベントプロシージャは、これらの座標を表示面にマッピングします。座標(0,0)は表示面の左上隅にマップされ、(65535,65535)は右下隅にマップされます。

...このAPIに渡す前にターゲット座標を適切に拡大縮小する必要があります。

1
プログラムによって生成された

マウスイベントは、彼らがしたい場合はアプリがフィルタリングすることができますプロパティ「を注入」している - たとえば、MMOのクライアントのためには、多くの場合、あなたには、いくつかを設定できMOUSE_EVENTボットに中

者ゼロを避けるために、それらをフィルタリングしますプロパティがある場合、私はすぐに方法を見つけることができませんが、それらが注入されたフラグを克服させるかどうかを調べることがあります

関連する問題