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

Я должен контролировать другое приложение, отправляя нажатия на него, какCtrls или жеCTRLSHIFTC или жеCTRLF.I»

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

Это успешно отправляет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.