Как отправить WM_HOTKEY с PostMessage?

Я хочу отправить WM_HOTKEY для захвата другим приложением с помощью глобального рабочего стола HotShortCut.

Ожидаемые клавиши: CTRL + F10.

Это единственный способ, которым я нашел, чтобы вызвать захват WM_HOTKEY:

procedure TfmMain.ButtonTalkClick(Sender: TObject);
var
  Article: TArticleBase;
  Msg: TMessage;
begin
  Article:= GetSelectedArticle;
  if Article <> nil then
  begin
    Clipboard.AsText:= Article.SelectedText;
    Msg.LParamLo:= MOD_CONTROL;
    Msg.LParamHi:= VK_CONTROL or VK_F10;
    PostMessage(HWND_BROADCAST, WM_HOTKEY, 0, Msg.LParam);
  end;
end;

если я изменяю какие-либо значения Msg.LParamLo или Msg.LParamHi, WM_HOTKEY не запускается другим приложением. Но, используя этот способ, до того, как сообщение WM_HOTKEY будет перехвачено Методом:

procedure ManageHotKeyMsg(var Msg: TMessage); message WM_HOTKEY;

Выполняется «Диалоговое окно выполнения Windows» (сочетание клавиш «Windows Key» + R)

Как правильно передать Msg.LParamLo и Msg.LParamHi, чтобы убедиться, что я отправляю WM_HOTKEY + «CTRL + F10».


person Cesar Romero    schedule 12.02.2009    source источник
comment
Я не думаю, что вам следует использовать VK_CONTROL или VK_F10; Msg.LParamLo:= MOD_CONTROL говорит, что вы хотите Ctrl+f10   -  person Gerry Coll    schedule 12.02.2009


Ответы (2)


Выполняется с помощью PostKeyEx32.

procedure TfmMain.ButtonTalkClick(Sender: TObject);
var
  Article: TArticleBase;
begin
  Article:= GetSelectedArticle;
  if Article <> nil then
  begin
    Clipboard.AsText:= Article.SelectedText;
    PostKeyEx32(VK_F10, [ssCtrl], False);
  end;
end;

Теперь моя сборка Xananews может говорить :D

person Cesar Romero    schedule 12.02.2009

Рэймонд говорит, что вы делаете это неправильно:

http://blogs.msdn.com/oldnewthing/archive/2005/05/30/423202.aspx

Почему бы вам просто не поговорить с другим приложением напрямую, используя какой-нибудь стандартный механизм IPC?

person Ana Betts    schedule 12.02.2009
comment
Tnx Пол. У меня нет других источников приложений. Вот почему я должен отправить ключи. Я попробую использовать SendInput. - person Cesar Romero; 12.02.2009