gpt4 book ai didi

c++ - 无法模拟 Alt-Tab 虚拟按键,与其他键配合正常

转载 作者:太空狗 更新时间:2023-10-29 23:15:35 25 4
gpt4 key购买 nike

我有一个简单的代码

KEYBDINPUT k1 = { VK_MENU, 0, 0, 0, 0 };
KEYBDINPUT k2 = { VK_TAB, 0, 0, 0, 0 };
KEYBDINPUT k3 = { VK_TAB, 0, KEYEVENTF_KEYUP, 0, 0 };
KEYBDINPUT k4 = { VK_MENU, 0, KEYEVENTF_KEYUP, 0, 0 };
int cnt = 0;

while (cnt < 10)
{
Sleep(1000);
INPUT in1 = { INPUT_KEYBOARD };
in1.ki = k1;
SendInput(1, &in1, sizeof(INPUT));

INPUT in2 = { INPUT_KEYBOARD };
in2.ki = k2;
INPUT in3 = { INPUT_KEYBOARD };
in3.ki = k3;
SendInput(1, &in2, sizeof(INPUT));
SendInput(1, &in3, sizeof(INPUT));

cnt++;
}

INPUT in4 = { INPUT_KEYBOARD };
in4.ki = k4;
SendInput(1, &in4, sizeof(INPUT));

return 0;

这行不通。如果我从 VK_TAB 更改为 VK_ESCAPE,它会起作用。

我想模拟 Alt-Tab,因为 Alt-Esc 没有视觉表示。VK_TAB 有什么特别之处吗?

最佳答案

当 VK 失败时,使用带有键盘扫描码的 SendInput 通常会奏效。

下面的示例演示了如何使用 SendInput 和键盘扫描代码模拟 alt-tab。

alt_tab 函数进行计数。它将模拟按住左 alt 键,按 tab 键“计数”次,然后松开左 alt 键。

按键延迟相当大,主要是为了给足够的时间来直观地展示效果。较短的延迟对于自动化来说会更有效,但您可能无法完全消除它们。

我将 1 作为输入计数传递给 SendInput,因为我只想一次发送一个。操作 KEYBDINPUT 时间戳并不像人们预期的那样工作。

要构建此示例,请从 Win32 控制台项目开始。

#include <Windows.h>

void sendkey(WORD scan_code, bool tf_down_up, bool extended=false) {
INPUT input = {0};
input.type = INPUT_KEYBOARD;
input.ki.wScan = scan_code;
input.ki.dwFlags = KEYEVENTF_SCANCODE;
if(!tf_down_up) input.ki.dwFlags |= KEYEVENTF_KEYUP;
if(extended) input.ki.dwFlags |= KEYEVENTF_EXTENDEDKEY;
SendInput(1, &input, sizeof(input));
}

void keydown(WORD scan_code, bool extended=false) {
sendkey(scan_code, true, extended);
}

void keyup(WORD scan_code, bool extended=false) {
sendkey(scan_code, false, extended);
}

static const WORD TAB_SCANCODE = 0x0f;
static const WORD LEFT_ALT_SCANCODE = 0x38;

static const DWORD keypress_delay_ms = 500;

void alt_tab(int tab_count=1) {
keydown(LEFT_ALT_SCANCODE);
Sleep(keypress_delay_ms);
for(int i=0; i<tab_count; ++i) {
keydown(TAB_SCANCODE);
Sleep(keypress_delay_ms);
keyup(TAB_SCANCODE);
Sleep(keypress_delay_ms);
}
keyup(LEFT_ALT_SCANCODE);
}

int main() {
Sleep(1000);
alt_tab(3);
}

关于c++ - 无法模拟 Alt-Tab 虚拟按键,与其他键配合正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28426570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com