keybd_event
Цитата:
wsprintf(ret, "тест");
SendMessage(hWnd, WM_INPUTLANGCHANGEREQUEST, 0, (long)LoadKeyboardLayoutA("00000419", KLF_ACTIVATE)); //русская раскладка
for(i = 0; i < strlen(ret); i++)
{
c = (unsigned char)ret;
keybd_event(c, (BYTE)MapVirtualKey(c, 0), 0, 0);
keybd_event(c, (BYTE)MapVirtualKey(c, 0), KEYEVENTF_KEYUP, 0);
Sleep(10);
}
Такой код не работает.
Как запасной вариант пытался написать функцию ремапинга русской раскладки в английскую, так чтобы для русской Й выдавало Q, Ц => W, ...
Но споткнулся о букву Б, Ю и прочие буквы которым соответствуют спец символы и знаки препинания.
Вопрос в догонку. Я посылаю эти нажатия клавиш во флэш-ролик в браузере. Когда я пользуюсь SendMessage(...,WM_CHAR,...,...), даже если указатель мыши стоит в поле ввода, всё равно ролику нажатия не приходят. Видимо надо не просто в окно браузера посылать, а конкретно в ролик. Как это сделать, чтобы более не мучаться с keybd_event?
Если кому понадобится, вот код.
Код:
char ret[1024];
INPUT pInput;
wchar_t wc;
wsprintfA(ret, "тест123")
for(i = 0; i < strlen(ret); i++)
{
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, &ret, 1, &wc, 1);
pInput.type = INPUT_KEYBOARD;
pInput.ki.wVk = 0;
pInput.ki.time = 0;
pInput.ki.wScan = wc;
pInput.ki.dwFlags = KEYEVENTF_UNICODE;
SendInput(1, &pInput, sizeof(pInput));
pInput.ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
SendInput(1, &pInput, sizeof(pInput));
Sleep(20);
}
INPUT pInput;
wchar_t wc;
wsprintfA(ret, "тест123")
for(i = 0; i < strlen(ret); i++)
{
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, &ret, 1, &wc, 1);
pInput.type = INPUT_KEYBOARD;
pInput.ki.wVk = 0;
pInput.ki.time = 0;
pInput.ki.wScan = wc;
pInput.ki.dwFlags = KEYEVENTF_UNICODE;
SendInput(1, &pInput, sizeof(pInput));
pInput.ki.dwFlags = KEYEVENTF_UNICODE | KEYEVENTF_KEYUP;
SendInput(1, &pInput, sizeof(pInput));
Sleep(20);
}
И всё таки вопрос в силе. А через keybd_event как это реализуется?
И второй вопрос тоже остаётся в силе: как послать во флэш-ролик нажатие кнопки?
[QUOTE=MSDN]This function has been superseded. Use SendInput instead.[/QUOTE]
Функция keybd_event заменена на SendInput, нет смысла к ней возвращаться. Так что всё правильно сделал.
К тому же, keybd_event работает с виртуальными кодами и скан-кодами, а не с символами!
Насчёт флэш-плеера: вам уже писали - используйте API плеера.