【发布时间】:2013-07-12 17:57:12
【问题描述】:
我正在尝试制作一个程序,该程序为我按下鼠标左键发送两个额外的按键。这一切都很好,除非我在另一个程序中(在我的情况下它是一个游戏),然后它确实感觉到鼠标左键被按下,但它没有为我按下额外的两个虚拟键。 整个代码:
#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 键。
所以我的问题是: 如何使系统范围的虚拟按键在我不在桌面时也能正常工作?
【问题讨论】: