Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Как напечатать чего-нибудь в текущем приложении?


DayGaykin ©   (11.07.18 19:58

Хочу сделать эмулятор клавиатуры на основе своих данных.
Мне желательно печатать именно текст и не париться по поводу раскладки и нажат ли CapsLock.
Я попробовал имитировать Alt последовательности (с помощью SendInput), но не получилось:

 procedure SendKeyInput(Flags: Word; Key: Word);
 var
   Input: TInput;
 begin
   FillChar(Input, SizeOf(Input), 0);
   Input.type_ := INPUT_KEYBOARD;
   Input.ki.dwFlags := Flags;
   Input.ki.wVk := Key;
   SendInput(1, @Input, SizeOf(Input));
 end;

begin
 SendKeyInput(0, VK_LMENU);

 SendKeyInput(0, VK_NUMPAD0);
 SendKeyInput(KEYEVENTF_KEYUP, VK_NUMPAD0);

 SendKeyInput(0, VK_NUMPAD6);
 SendKeyInput(KEYEVENTF_KEYUP, VK_NUMPAD6);

 SendKeyInput(0, VK_NUMPAD5);
 SendKeyInput(KEYEVENTF_KEYUP, VK_NUMPAD5);

 SendKeyInput(KEYEVENTF_KEYUP, VK_LMENU);
end;


Как быть?


DayGaykin ©   (11.07.18 20:16[1]

Разобрался


 procedure SendKeyInput(Flags: Word; Key: Word);
 var
   Input: TInput;
 begin
   FillChar(Input, SizeOf(Input), 0);
   Input.type_ := INPUT_KEYBOARD;
   Input.ki.dwFlags := KEYEVENTF_UNICODE or Flags;
   Input.ki.wScan := Key;
   SendInput(1, @Input, SizeOf(Input));
 end;

var
 U: RawByteString;
 S: UnicodeString;
 I: Integer;
 C: UnicodeChar;
begin
 U := 'Привет, как дела?';
 S := UTF8ToUTF16(U);
 for I := 1 to Length(S) do
 begin
   C := S[I];
   SendKeyInput(0, Word(C));
   SendKeyInput(KEYEVENTF_KEYUP, Word(C));
 end;
end;


код на фрипаскале


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо