作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 sentinput() 函数和 Windows 键盘 Hook 为印度语言开发自定义键盘。项目在谷歌代码中:http://code.google.com/p/ekalappai
键盘钩子(Hook)和发送输入函数被放置在一个 win32 dll 中。它们是从 Qt exe 调用的。我们的应用程序适用于大多数键和应用程序。我发现以下问题:
我无法将退格键发送到写字板/Openoffice/MsOffice 等少数应用程序。我发现箭头键和删除键有同样的问题。
这是我的代码:
extern "C" __declspec(dllexport) void GenerateKey(int vk , bool bExtended)
{
//update previous characters
previous_2_character = previous_1_character;
previous_1_character = vk;
KEYBDINPUT kb={0};
INPUT Input={0};
//keydown
kb.wVk = 0;
kb.wScan = vk;/*enter unicode here*/;
kb.dwFlags = KEYEVENTF_UNICODE; // KEYEVENTF_UNICODE=4
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
::SendInput(1,&Input,sizeof(Input));
//keyup
kb.wVk = 0;
kb.wScan = vk;/*enter unicode here*/;
kb.dwFlags = KEYEVENTF_UNICODE|KEYEVENTF_KEYUP; //KEYEVENTF_UNICODE=4
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
::SendInput(1,&Input,sizeof(Input));
}
完整的 dll 代码在这里:http://code.google.com/p/ekalappai/source/browse/trunk/ekhook/ekhook/dllmain.cpp
调用代码:
generatekey = (GenerateKey) myLib->resolve( "GenerateKey" );
generatekey(44,FALSE); //comma - THis works in wordpad/MsOffice/Openoffice
generatekey(2949,FALSE); //tamil character "a" works in Wordpad/Msoffice/Openoffice
generatekey(8,FALSE); //backspace - This is NOT working in Wordpad/Msoffice/Openoffice
Qt Exe 的完整调用代码在这里: http://code.google.com/p/ekalappai/source/browse/trunk/ekalappai/window.cpp
我尝试在谷歌中搜索,但还没有找到解决方案。如果有人知道解决此问题的线索,请提供帮助。谢谢。
最佳答案
您混淆了虚拟键和扫描码。 wVk成员是重要成员,只有虚拟键不明确时才会使用扫码。修复:
kb.wVk = vk;
kb.wScan = 0; // TODO: look at VkKeyScanEx()
关于c++ - 无法使用::SendInput() 将退格键发送到写字板应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2421485/
我是一名优秀的程序员,十分优秀!