我正在尝试制作一个程序,该程序为我每次按下鼠标左键发送两个额外的按键。这一切都很好,除非我在另一个程序中(在我的情况下它是一个游戏),然后它确实感觉到按下鼠标左键但它没有为我按下额外的两个虚拟键。整个代码:
#include <Windows.h>
#include <iostream>
int main ()
{
INPUT ip;
bool press = false;
int i = 0;
while ( true )
{
if ( GetKeyState( VK_LBUTTON) < 0 & !press )
{
std::cout << "press" << i++ << "\n";
// PRESS F8
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0x42; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
ip.ki.wVk = 0x77; // virtual-key code
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
if (GetKeyState( VK_F8) < 0) { std::cout << "press f8 \n";}
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
press = true;
}
if ( GetKeyState( VK_LBUTTON) >= 0 )
{
press = false;
}
}
return(0);
}
现在我已经阅读了所有我能找到的关于这个的东西,顺便说一句,我认为这与使用扫描码而不是虚拟键码有关。问题是当我做这个 ip.ki.wScan = 0; 和 ip.ki.wVk = 0x77; 它会做对,但不会在游戏中,当我同时使用扫描码和 VKcode 时也是如此。但是当 VKcode 为零时,即使我不在游戏中,它也会停止按 F8 键。
所以我的问题是:我如何制作一个系统范围的虚拟按键,当我不在桌面时也可以工作?