Я использовал функцию sendinput () и хуков клавиатуры Windows для разработки пользовательской клавиатуры для индийских языков.
Проект находится в коде Google здесь: http://code.google.com/p/ekalappai
Перехват клавиатуры и функции sendinput помещены в win32 dll. И они вызываются из Qt exe.
Наше приложение отлично работает для большинства ключей и приложений. Я нахожу следующую проблему:
Я не смог отправить клавишу Backspace нескольким приложениям, таким как Wordpad / 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
Я попытался выполнить поиск в Google, но пока не смог найти решение. Если кто-нибудь имеет ключ к решению этой проблемы, пожалуйста, помогите. Благодаря.