Отправка нажатия клавиш в другое приложение с помощью WinAPI

Я должен контролировать другое приложение, отправляя нажатия на него, какCTRLS или жеCTRLСДВИГC или жеCTRLF.

Я много чего перепробовал, но не могу заставить его работать. Поэтому я пытаюсь сделать это правильно в более простом случае.

Это успешно отправляетHey в блокнот:

procedure TForm1.Button1Click(Sender: TObject);
  var notepad, edit: HWND;
begin
  notepad := FindWindow('notepad', nil);
  edit := FindWindowEx(notepad, FindWindow('Edit', nil), nil, nil);

  SendMessage(edit, WM_CHAR, dword('H'), 0);
  SendMessage(edit, WM_CHAR, dword('e'), 0);
  SendMessage(edit, WM_CHAR, dword('y'), 0);
end;

И это успешно отправляетF5 ключ к блокноту, а также работает сF3 всплывающее диалоговое окно поиска.

notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_F5, 0);
PostMessage(notepad, WM_KEYUP, VK_F5, 0);

Но я не знаю, почему с помощьюSendMessage не работает на приведенном выше примере.

Лучшее, что я мог придумать, было что-то вроде этого, которое ничего не делает.

notepad := FindWindow('notepad', nil);
PostMessage(notepad, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(notepad, WM_KEYDOWN, VkKeyScan('F'), 0);
PostMessage(notepad, WM_KEYUP, VkKeyScan('F'), 0);
PostMessage(notepad, WM_KEYUP, VK_CONTROL, 0);

Я нашел где-то здесь библиотеку, которая эмулирует функции клавиш отправки VBScript, но, просто просматривая код, кажется, что он просто передает ключи текущему приложению или всем приложениям, так как нет параметра Handle.

Ответы на вопрос(2)

Ваш ответ на вопрос