Cesar Romero
Cesar Romero

Reputation: 4037

How send WM_HOTKEY with PostMessage?

I want to send WM_HOTKEY to be captured by other application using a global desktop HotShortCut.

The expected Keys are CTRL + F10

This is the only way I found to trigger the capture of 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;

if I change any of the values of Msg.LParamLo or Msg.LParamHi, WM_HOTKEY is not triggered by the other app. But using this way, before the message WM_HOTKEY is captured by the Method:

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

The "Windows Execute Dialog" is executed (shortcut "Windows Key" + R)

How is the right way to pass Msg.LParamLo and Msg.LParamHi, to make sure Im sending WM_HOTKEY + "CTRL + F10".

Upvotes: 0

Views: 3570

Answers (2)

Cesar Romero
Cesar Romero

Reputation: 4037

Done using 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;

Now my Xananews build can speech :D

Upvotes: 2

Ana Betts
Ana Betts

Reputation: 74702

Raymond says You're Doing It Wrong:

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

Why don't you just talk to the other app directly using some sort of standard IPC mechanism?

Upvotes: 0

Related Questions