0

left_mouse を 2 回クリックしてアクション ダブルクリックを処理したい.2 回のクリック時間の間に、100ms スリープする

SendInput(LEFT_CLICK...);
スリープ(100);
SendInput(LEFT_CLICK...);

私の PC では問題なく動作するが、仮想マシンでは正しく動作しない可能性があります、マシンが "SendInput" 機能を実行する際に遅延時間が発生する可能性があります

"Sleep(100)" を削除しても、2 回クリックするだけで "私が望むようにダブルクリック」。

この場合、ダブルクリックを正確に処理する方法

とにかくそれをするように私に提案してください

ありがとう、

4

1 に答える 1

1

ところで、作業している環境を指定し、コードをもう少し詳細にする必要があります。SendInput の使用は 1 つのオプションです。正確に何をしようとしているのかはわかりませんが、クリックをシミュレートするためのオプションをさらに 2 つ紹介します。このようなものはうまくいきます(私はPythonでコードを書いていますが、同じ考えでなければなりません):

def leftClick(x=0, y=0):
    win32api.SetCursorPos((x,y)) #set the cursor to where you wanna click
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0) #generate a mouse event
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)
    return True

def doubleClick(x=0, y=0):
    leftClick(x,y)
    leftClick(x,y)

time.sleep(0.05) の間に 50 ミリ秒スリープできますが、それがなくても機能し、vm でテストしました。

カーソルを移動せずにサイレントクリックを実行したい場合の別のオプションは、ウィンドウハンドル (hwnd) を知っているクリックしたいウィンドウにメッセージを送信することです。ここでは、ハンドルをパラメーターとして渡すと仮定します。

def leftClick(x=0, y=0, hwnd):
   lParam = win32api.MAKELONG(x,y) # create a c long type to hold your click coordinates
   win32gui.SendMessage(hwnd, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lparam) # send a message to the window that the mouse left button is down.
   win32gui.SendMessage(hwnd, win32con.WM_LBUTTONUP, 0, lparam) # send a message to the window that the mouse left button is up.
   return True

def doubleClick(x=0, y=0, hwnd):
   leftClick(x,y, hwnd)
   leftClick(x,y, hwnd)

または、メッセージWM_LBUTTONDBLCLKを送信できます。

于 2014-02-18T21:25:11.867 に答える