簡體   English   中英

SendInput 鼠標輸入只能點擊?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM