Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Послать нажатие клавиш в программу Блокнот

Delphi , ОС и Железо , Клавиши

Послать нажатие клавиш в программу Блокнот

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure TForm1.Button1Click(Sender: TObject);
 var
   wnd: HWND;
   i: Integer;
   s: string;
 begin
   wnd := FindWindow('notepad', nil);
   if wnd <> 0 then
   begin
     wnd := FindWindowEx(wnd, 0, 'Edit', nil);

     // Write Text in Notepad. 
    // Text ins Notepad schreiben. 
    s := 'Hello';
     for i := 1 to Length(s) do
       SendMessage(wnd, WM_CHAR, Word(s[i]), 0);
     // Simulate Return Key. 
    PostMessage(wnd, WM_KEYDOWN, VK_RETURN, 0);
     // Simulate Space. 
    PostMessage(wnd, WM_KEYDOWN, VK_SPACE, 0);
   end;
 end;


 // To send keys to Wordpad: 
  {...}
   wnd := FindWindow('WordPadClass', nil);

   if wnd <> 0 then
   begin
     wnd := FindWindowEx(wnd, 0, 'RICHEDIT', nil);
   {...}

Это программное обеспечение на языке Delphi, которое отправляет клавиатурные команды в приложения Notepad и WordPad. Код использует функции Windows API для поиска handles окон этих приложений и затем имитирует нажатия кнопок с помощью функций SendMessage и PostMessage.

Содержание кода разбивается на следующие разделы:

  1. Процедура Button1Click вызывается, когда кнопка с надписью "Button1" кликается. Она ищет окно Notepad с помощью функции FindWindow, которая возвращает handle окна, если оно найдено.
  2. Если окно Notepad найдено, код затем находит редактируемый контроллер в этом окне с помощью функции FindWindowEx. Это необходимо потому, что функции SendMessage и PostMessage требуют валидного handle окна как первого параметра.
  3. Код пишет текст в окно Notepad, имитируя ввод клавиатуры. Он использует функцию SendMessage с сообщением WM_CHAR, чтобы отправить каждый символ строки "Hello" в редактируемый контроллер. Это эффективно печатает текст в окне Notepad.
  4. После написания текста код имитирует нажатие клавиши Return с помощью функции PostMessage с параметрами WM_KEYDOWN и VK_RETURN. Это вызывает курсор, чтобы переместиться на следующую строку.
  5. Наконец, код имитирует нажатие пробельной клавиши с помощью функции PostMessage с параметрами WM_KEYDOWN и VK_SPACE.

Код также включает в себя комментированный раздел для отправки клавиатурных команд в WordPad. Это достигается поиском handle окна приложения WordPad с помощью функции FindWindow, а затем нахождением редактируемого контроллера в этом окне с помощью функции FindWindowEx.

Альтернативное решение:

Вместо имитации нажатий клавиш можно использовать функцию Windows API SetWindowText для установки текста напрямую в окно Notepad или WordPad. Это подход более прямой и эффективный.

Например:

procedure TForm1.Button1Click(Sender: TObject);
begin
  wnd := FindWindow('notepad', nil);
  if wnd <> 0 then
  begin
    SetWindowText(wnd, 'Hello');
  end;
end;

Код находит handle окна Notepad и устанавливает его текст на "Hello" с помощью функции SetWindowText. Обратите внимание, что это подход работает только для простых приложений редактирования текста, таких как Notepad или WordPad. Для более сложных приложений может потребоваться использование оригинального подхода с имитацией нажатий клавиш.

В статье рассматривается пример программирования на Delphi для отправки нажатия клавиш в программы Блокнот и Wordpad.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Клавиши ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 01:53:54/0.0033798217773438/0