C++SendInput没有按键
C++ SendInput not letting go off the key
本文关键字:C++SendInput 更新时间:2023-10-16
我在下面使用这些代码,它们一直按住左右键,直到我自己按下这些键,它们才会松开。
我可以运行左键代码,然后继续按右键。。它会一直按左键。。只有我自己按左键,它才会停止
当我运行右键代码时,右键也会发生同样的情况——它一直按右键——我可以按左键,它仍然会一直按右按键,直到我自己按右键。
我使用SendInput的原因是keybd_event不可靠。。如果你不在向下/向上之间设置睡眠(毫秒),它甚至不会做任何事情,并且使用睡眠()会抛出这个程序的意图,它必须尽快点击它,长时间按住键可能会导致错误的答案(这就像一个瞄准程序)
这个是用来敲击右键的
INPUT ip[1];
ip[0].type = INPUT_KEYBOARD;
ip[0].ki.wScan = 0;
ip[0].ki.time = 0;
ip[0].ki.dwExtraInfo = 0;
ip[0].ki.wVk = VK_RIGHT;
ip[0].ki.dwFlags = 0;
ip[1].type = INPUT_KEYBOARD;
ip[1].ki.wScan = 0;
ip[1].ki.time = 0;
ip[1].ki.dwExtraInfo = 0;
ip[1].ki.wVk = VK_RIGHT;
ip[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, ip, sizeof(INPUT));
这个是用来敲击左键的
INPUT ip[1];
ip[0].type = INPUT_KEYBOARD;
ip[0].ki.wScan = 0;
ip[0].ki.time = 0;
ip[0].ki.dwExtraInfo = 0;
ip[0].ki.wVk = VK_LEFT;
ip[0].ki.dwFlags = 0;
ip[1].type = INPUT_KEYBOARD;
ip[1].ki.wScan = 0;
ip[1].ki.time = 0;
ip[1].ki.dwExtraInfo = 0;
ip[1].ki.wVk = VK_LEFT;
ip[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, ip, sizeof(INPUT));
编辑:新代码看起来是这样的,呃,不喜欢这种风格。
INPUT ip[1] = {0};
ip[0].type = ip[1].type = INPUT_KEYBOARD;
ip[0].ki.wScan = ip[1].ki.wScan = 0;
ip[0].ki.time = ip[1].ki.time = 0;
ip[0].ki.dwExtraInfo = ip[1].ki.dwExtraInfo = 0;
ip[0].ki.wVk = ip[1].ki.wVk = VK_LEFT;
ip[0].ki.dwFlags = 0;
ip[1].ki.dwFlags = KEYEVENTF_KEYUP;
SendInput(2, ip, sizeof(INPUT));
再次编辑:(也不起作用)我试图欺骗它先发送KEYUP。
int intRetValue = -1;
INPUT ip[2] = {0};
ip[0].type = INPUT_KEYBOARD;
ip[0].ki.wScan = 0;
ip[0].ki.time = 0;
ip[0].ki.dwExtraInfo = GetMessageExtraInfo();
ip[0].ki.wVk = VK_RIGHT;
ip[0].ki.dwFlags = KEYEVENTF_KEYUP;
ZeroMemory(&ip[1], sizeof(INPUT));
ip[1].type = INPUT_KEYBOARD;
ip[1].ki.wScan = 0;
ip[1].ki.time = 0;
ip[1].ki.dwExtraInfo = GetMessageExtraInfo();
ip[1].ki.wVk = VK_RIGHT;
ip[1].ki.dwFlags = 0;
ZeroMemory(&ip[2], sizeof(INPUT));
ip[2].type = INPUT_KEYBOARD;
ip[2].ki.wScan = 0;
ip[2].ki.time = 0;
ip[2].ki.dwExtraInfo = GetMessageExtraInfo();
ip[2].ki.wVk = VK_RIGHT;
ip[2].ki.dwFlags = KEYEVENTF_KEYUP;
intRetValue = SendInput(3, ip, sizeof(INPUT));
printf("retValue = %dn", intRetValue);
想明白了。
无法使用链接且无延迟的SendInput
彼此之间需要Sleep(Milliseconds);
。
INPUT ip = {0};
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = GetMessageExtraInfo();
ip.ki.wVk = VK_RIGHT;
ip.ki.dwFlags = 0;
SendInput(1, &ip, sizeof(INPUT));
Sleep(50); //Figure out the proper timing here
INPUT ip2 = {0};
ip2.type = INPUT_KEYBOARD;
ip2.ki.wScan = 0;
ip2.ki.time = 0;
ip2.ki.dwExtraInfo = GetMessageExtraInfo();
ip2.ki.wVk = VK_RIGHT;
ip2.ki.dwFlags = 2;
SendInput(1, &ip2, sizeof(INPUT));
相关文章:
- 使用 SendInput 或 mouse_event 不适用于 clock()?
- SendInput()鼠标移动计算
- C++ SendInput()
- Implementing winapi(SendInput) with dart:ffi
- 如何检测击键是否被keybd_event或 SendInput 模拟?
- C++ 上的 SendInput 不接受 Ctrl 和 Shift 帐户
- 将字符串传递到sendInput()(C )中
- SendInput() 无法正确管理 Alt 代码
- c++ winapi SendInput 意外行为
- C++SendInput没有按键
- VK_TAB在我的 c++ 程序中无法在 SendInput() 中工作
- C++-使用SendInput方法模拟按键,无法区分右键
- 使用SendInput锁定计算机
- 如何在SendInput中使用扩展扫描码
- 在Eclipse CDT中使用SendInput和MinGW
- 修饰符键与SendInput()配合使用很奇怪
- c++ SendInput在Windows Service中是可能的
- c++ win32 SendInput()
- SendInput -(鼠标移动模拟)
- 使用SendInput发送两个或多个字符