[英]SendInput Mouse input click only?
如何使用 SendInput() 進行鼠標輸入? 我完全糊塗了,我不明白微軟網站上說的是什么。 這是我當前的代碼:
if (toggled && (GetKeyState(VK_LBUTTON) & 0x100))
{
SendInput(UINT, MOUSEINPUT, WM_LBUTTONUP, NULL);
Sleep((rand() % 1000 / cps));
}
您需要填寫一個(數組) INPUT
結構,其中包含您想要的鼠標詳細信息,然后將該數組傳遞給SendInput()
。 這在SendInput()
文檔中有很清楚的解釋:
參數
cInputs
類型:
UINT
pInputs
數組中的結構數。
pInputs
類型:
LPINPUT
一組
INPUT
結構。 每個結構代表一個要插入鍵盤或鼠標輸入流的事件。
cbSize
類型:
int
INPUT
結構的大小(以字節為單位)。 如果cbSize
不是INPUT
結構的大小,則函數失敗。
此外,您對GetKeyState()
調用是錯誤的,因為它永遠不會返回第 9 位設置為 1 的SHORT
值。根據GetKeyState()
文檔,只有低(1)位或高(16)位會永遠設置為1:
返回值指定了指定虛擬鍵的狀態,如下:
- 如果高位為1,則key為down; 否則,它是了。
- 如果低位為 1,則鍵被切換。 如果某個鍵(例如 CAPS LOCK 鍵)打開,則會切換該鍵。 如果低位為 0,則該鍵關閉且未切換。當該鍵被切換時,鍵盤上的切換鍵指示燈(如果有)將亮起,當該鍵未切換時熄滅。
因此,如果您的目標是檢查當前是否按住鼠標左鍵,則需要使用& 0x8000
(或< 0
)而不是& 0x100
(更好的是,考慮使用GetAsyncKeyState()
代替)。 請參閱檢查鼠標左鍵是否被按住? .
試試這個:
if (toggled && (GetKeyState(VK_LBUTTON) < 0 /*& 0x8000*/))
{
INPUT input = {};
input.type = INPUT_MOUSE;
input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &input, sizeof(INPUT));
Sleep((rand() % 1000 / cps));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.