Как отправить WM_HOTKEY с PostMessage? - PullRequest
0 голосов
/ 12 февраля 2009

Я хочу отправить 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» + R)

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

Ответы [ 2 ]

2 голосов
/ 12 февраля 2009

Готово с использованием 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

0 голосов
/ 12 февраля 2009

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

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

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

...