Comment envoyer WM_HOTKEY avec PostMessage?
-
22-08-2019 - |
Question
Je veux envoyer WM_HOTKEY être capturé par une autre application à l'aide d'un HotShortCut de bureau mondial.
Les touches sont attendues CTRL + F10
Ceci est la seule façon que j'ai trouvé pour déclencher la prise de 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;
si je change l'une des valeurs de Msg.LParamLo ou Msg.LParamHi, WM_HOTKEY est pas déclenchée par l'autre application. Mais l'utilisation de cette façon, avant que le WM_HOTKEY message est capturé par la méthode:
procedure ManageHotKeyMsg(var Msg: TMessage); message WM_HOTKEY;
Les "Windows Execute dialogue" est exécuté (raccourci "Touche Windows" + R)
Comment est la bonne façon de passer Msg.LParamLo et Msg.LParamHi, pour vous assurer Im envoi WM_HOTKEY + "CTRL + F10".
La solution
Fait en utilisant 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;
Maintenant, mon Xananews construire parole peut: D
Autres conseils
Raymond dit que vous faites mal:
http://blogs.msdn.com/oldnewthing /archive/2005/05/30/423202.aspx
Pourquoi ne parlez-vous pas seulement à l'autre application en utilisant directement une sorte de mécanisme standard IPC?