|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Возможно ли с'эмулировать альтернативный ввод символов (Alt+NumPad)
Если тема не совсем понятна поясняю: Мне нужно с'эмулировать ввод символов в текущее мест курсора при помощи клавиши ALT+NumPad. (для тех кто не знает, если зажать клавишу Alt и ввести трихцифровой код, появится знак из ASCII таблицы). Так вот мне нужно это сделать программно.
Пробую так, но желаемого эффекта не получается. Код:
procedure TForm1.Button1Click(Sender: TObject); begin Memo1.SetFocus; keybd_event(VK_MENU,0, 0, 0); keybd_event(VK_NUMPAD3,32,0, 0); keybd_event(VK_NUMPAD3,32,KEYEVENTF_KEYUP, 0); keybd_event(VK_NUMPAD9,32,0, 0); keybd_event(VK_NUMPAD9,32,KEYEVENTF_KEYUP, 0); keybd_event(VK_NUMPAD5,32,0, 0); keybd_event(VK_NUMPAD5,32,KEYEVENTF_KEYUP, 0); keybd_event(vk_menu, 0, keyeventf_keyup, 0); end; Может быть я что-то делаю не так, или существует какое-то аппаратное ограничение на программный ввод таким способом? |
#2
|
|||
|
|||
может надо где-то использовать KEYEVENTF_EXTENDEDKEY
|
#3
|
|||
|
|||
Цитата:
|
#4
|
|||
|
|||
Неужели никто не знает как это сделать? А ведь в TeamViewer такая фича как-то реализована...
|
#5
|
||||
|
||||
Наверное ошибаюсь, но похоже keybd_event больше двух посылок одновременно не отправляет, по крайней мере мне этой устаревшей функцой ничего эмульнуть кроме типа Ctrl+V или Ctrl+C не удалось. Предлагаю вместо неё использовать более продвинутую SendInput:
Код:
TForm1.Button1Click(Sender: TObject); var b: array [0..1] of TInput; begin memo1.SetFocus; FillChar(b, SizeOf(b), 0); b[0].Itype:= 1; // INPUT_KEYBOARD b[0].ki.wScan:= Word('Л'); b[0].ki.dwFlags:= 4; // KEYEVENTF_UNICODE SendInput(Length(b), b[0], SizeOf(TInput)); end; Шлёт кому и куда угодно любые чарки, даже в юникоде, главное чтоб у принимающей стороны фокус был, да и думать о ASCII-кодах не придётся |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Yarcim (26.06.2012)
|
#6
|
|||
|
|||
Цитата:
|