繁体   English   中英

C ++生成键组合WINAPI(不带MFC)

[英]C++ Generating Key Combinations WINAPI (Without MFC)

我试图让我的应用程序输出一个组合键(ALT + D)以专注于Internet Explorer的地址栏,但是我在实现所需的代码时遇到了麻烦。 我已经有一种方法可以传递1个密钥:

void GenerateKey(int vk, BOOL bExtended) {

KEYBDINPUT  kb = {0};
INPUT       Input = {0};

/* Generate a "key down" */
if (bExtended) { kb.dwFlags  = KEYEVENTF_EXTENDEDKEY; }
kb.wVk  = vk;
Input.type  = INPUT_KEYBOARD;
Input.ki  = kb;
SendInput(1, &Input, sizeof(Input));

/* Generate a "key up" */
ZeroMemory(&kb, sizeof(KEYBDINPUT));
ZeroMemory(&Input, sizeof(INPUT));
kb.dwFlags  =  KEYEVENTF_KEYUP;
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));

return;
}

谁能提供一些有关如何实现所需解决方案的帮助?

解:

我设法使用以下方法解决了这个问题:

void GenerateKeyCombination(int vk, int vk2, BOOL bExtended, BOOL bExtended2) {

KEYBDINPUT  kb = {0};
INPUT       Input = {0};
KEYBDINPUT  kb2 = {0};
INPUT       Input2 = {0};

// Generate a "key down" 1
if (bExtended) { kb.dwFlags  = KEYEVENTF_EXTENDEDKEY; }
kb.wVk  = vk;
Input.type  = INPUT_KEYBOARD;
Input.ki  = kb;
SendInput(1, &Input, sizeof(Input));

// Generate a "key down" 2
if (bExtended2) { kb2.dwFlags  = KEYEVENTF_EXTENDEDKEY; }
kb2.wVk  = vk2;
Input2.type  = INPUT_KEYBOARD;
Input2.ki  = kb2;
SendInput(1, &Input2, sizeof(Input2));

// Generate a "key up" 1
ZeroMemory(&kb, sizeof(KEYBDINPUT));
ZeroMemory(&Input, sizeof(INPUT));
kb.dwFlags  =  KEYEVENTF_KEYUP;
if (bExtended) { kb.dwFlags |= KEYEVENTF_EXTENDEDKEY; }
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
SendInput(1, &Input, sizeof(Input));

// Generate a "key up" 2
ZeroMemory(&kb2, sizeof(KEYBDINPUT));
ZeroMemory(&Input2, sizeof(INPUT));
kb2.dwFlags  =  KEYEVENTF_KEYUP;
if (bExtended2) { kb2.dwFlags |= KEYEVENTF_EXTENDEDKEY; }
kb2.wVk = vk2;
Input2.type = INPUT_KEYBOARD;
Input2.ki = kb2;
SendInput(1, &Input2, sizeof(Input2));

return;
}

并这样称呼它:

        GenerateKeyCombination(0x12, 0x44, FALSE, FALSE);

其中0x12是ALT,0x44是D。

将加速器映射添加到项目资源,在运行时将其加载到应用程序中,然后在消息循环中,在TranslateMessage和DispatchMessage有机会对其进行查看之前,添加对TranslateAccelerator的调用。

http://msdn.microsoft.com/zh-cn/library/windows/desktop/ms646373%28v=vs.85%29.aspx供参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM