Отправка нажатия клавиш в другое приложение с помощью 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.

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

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