我想使用全局桌面HotShortCut发送WM_HOTKEY以供其他应用程序捕获。
预期的密钥是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”。
答案 0 :(得分: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
答案 1 :(得分:0)
http://blogs.msdn.com/oldnewthing/archive/2005/05/30/423202.aspx
为什么不直接使用某种标准的IPC机制与其他应用程序交谈?