簡體   English   中英

SendInput() function 在游戲中不起作用(C++)

[英]SendInput() function doesn't work inside game (C++)

我在 C++ 中寫了一個 AI 來嘗試玩游戲(Puyo Puyo Tetris),為此,我嘗試使用 SendInput() 來模擬鍵盤輸入來控制游戲,但由於某種原因,輸入不起作用任何事物。 我知道輸入本身可以工作,因為它們可以在記事本和瀏覽器等外部工作。我懷疑這可能是游戲阻止 SendInput() function 進入游戲內部的一部分。

這是我的代碼:

INPUT input = {0};

input.type = INPUT_KEYBOARD;

input.ki.wVk = VkKeyScanA('a');

SendInput(1, &input, sizeof(input));

Sleep(100);

ZeroMemory(&input, sizeof(input));

input.ki.dwFlags = KEYEVENTF_KEYUP;

Sleep(5);

有誰知道如何解決這個問題? 我可以使用 SendInput() 的替代方法嗎? 謝謝!

您使用SendInput的示例不正確。

首先,您只發送了一次 keydown 輸入,然后當您清除輸入( ZeroMemory )時,您還清除了typeki.wVk 而且您甚至沒有為KEYEVENTF_KEYUP調用SendInput

您只需要將 keydown/up 放在一個SendInput中:

INPUT input[2] = { 0 };

input[0].type = input[1].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[1].ki.wVk = VkKeyScanA('a');

input[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, input, sizeof(INPUT));

此外,此 function 受 UIPI 約束。 僅允許應用程序將輸入注入到具有相同或更低完整性級別的應用程序中。 對於這種情況,您需要在 Application Manifest File 中設置 UIAccess

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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