【问题标题】:How send WM_HOTKEY with PostMessage?如何使用 PostMessage 发送 WM_HOTKEY?
【发布时间】:2010-10-07 02:22:07
【问题描述】:

我想发送 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 被 Method 捕获之前:

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

“Windows 执行对话框”被执行(快捷键“Windows Key”+R)

如何正确传递 Msg.LParamLo 和 Msg.LParamHi,以确保我发送 WM_HOTKEY + "CTRL + F10"。

【问题讨论】:

  • 我不认为您应该使用 VK_CONTROL 或 VK_F10; Msg.LParamLo:= MOD_CONTROL 告诉它你想要 Ctrl+f10

标签: delphi hotkeys postmessage


【解决方案1】:

使用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

【讨论】:

    【解决方案2】:

    雷蒙德说你做错了:

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

    您为什么不直接使用某种标准 IPC 机制与其他应用程序通信?

    【讨论】:

    • Tnx 保罗。我没有其他应用程序来源。这就是为什么我应该发送密钥。我会尝试使用 SendInput。
    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多