|
Вопрос # 3 769/ вопрос открыт / |
|
Ку народ, помогите плиз
Делаю программу иммитации набора русского текста с клавиатуры.(метод копирования и т.п не подходит, нужна именно имитация как будто кто - то печатает текст на клавиатуре )
пробую реализовать за счет команды keybd_event
Так вот не могу через неё иммитировать ввод некоторых русских букв, да и знаки препинания тоже выделуются)))
С русскими буквами которым на клавиатуре соответствуют англ буквы проблем нет, но вот если им соответствую какие либо знаки, ничего не рабоатет.
Может есть у кого идеи как задавать параметры keybd_event, что б корректно получать эти проблемные буквы или вобще другой способ реализации этой самой имитации
пробовал вариаены типа :
keybd_event(225 , 0, 0, 0); //225 код "Б" в ASCII
выкладу проэктитк (там много мусора не обращайте внимания) который делался на основе транслитератора, он корректно обрабатует печатает текст только если в нем нет проблемных букв )к примеру фраза "привет как дела"
но когда я пытаюсь вывести весь русский алфавит.......
и буду очень благодарет если подскажете идею как мне в этой программке реализовать и набор больших букв, уже 2-й день мучаюсь с этой программой...
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: F0RIS (статус: Посетитель)
Вопрос отправлен: 14 февраля 2010, 12:56
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Amidamaru
Здравствуйте, F0RIS!
Используйте событие OnKeyDown (или OnKeyUp) для определения кода нужной клавиши.
Приложение: Переключить в обычный режим- procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- memo.Lines.add(inttostr(Key));
- end;
 |
Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 14 февраля 2010, 13:49
Оценка за ответ: 5
Комментарий к оценке: хм,работает, благодарю...а я определял методом
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
ShowMessage(IntToStr(Ord(Key)));
end;
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 14 февраля 2010, 15:42; участников в обсуждении: 2.
|
Amidamaru (статус: 4-ый класс), 14 февраля 2010, 14:02 [#1]:
А по поводу больших букв - имитируйте нажатие Shift (код VK_SHIFT). И не забудте также симитировать "отпускание" этой клавиши.
|
|
F0RIS (статус: Посетитель), 14 февраля 2010, 14:31 [#2]:
да эт понятно вот только как это в цикл всунуть, что-то вроде условия если буква заглавная то шифт нажимать...
|
|
Amidamaru (статус: 4-ый класс), 14 февраля 2010, 15:23 [#3]:
Поищите в интернете исходники SendKeys, насколько я помню есть несколько реализаций этого алгоритма в делфи, в одной из которых используется keybd_event. Хоть алгоритм довольно сложный, но его вполне можно разобрать.
|
|
F0RIS (статус: Посетитель), 14 февраля 2010, 15:29 [#4]:
У мня уже есть исходники SendKeys... я всё думаю как отличать большую букву от маленькой О_о
|
|
Amidamaru (статус: 4-ый класс), 14 февраля 2010, 15:42 [#5]:
const ShiftLit: set of char = ['A'..'Z','А'..'Я','Ё'{, и др символы, которые требуют Shift}];
...
var s:string;
i:integer;
...
if s[i] in ShiftLit then ...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|