0

グローバルデスクトップ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を渡す正しい方法は、ImがWM_HOTKEY + "CTRL+F10"を送信していることを確認する方法です。

4

2 に答える 2

2

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

于 2009-02-12T04:18:32.650 に答える
0

レイモンドはあなたがそれを間違っていると言います:

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

ある種の標準IPCメカニズムを使用して、他のアプリと直接通信してみませんか?

于 2009-02-12T04:05:22.150 に答える