procedure TFrmMain.ApplicationEventsActionExecute(var Msg: tagMSG; var Handled: Boolean);
begin
    if (Msg.message = WM_KEYDOWN) then
    begin
      //ActionFullMode.Execute;
      showmessage('aaa');
    end
end;
按ALT键时无任何反应,其他键如Ctrl、Shift等都会弹出对话框,我的环境是Windows XP。

解决方案 »

  1.   

    根本不响应WM_KEYDOWN啊,真是邪门
    原来的函数是这样的,我想捕获alt+enter键,为了调试改成上述写法,发现根本不响应alt按键!procedure TFrmMain.ApplicationEventsActionExecute(var Msg: tagMSG; var Handled: Boolean);
    begin
        if (Msg.message = WM_KEYDOWN) and (Msg.wParam=VK_RETURN) and (GetKeyState(VK_MENU)<0) then
        begin
          ActionFullMode.Execute;
          //showmessage('aaa');
        end
    end;
      

  2.   

    楼上的没看懂问题,现在根本不响应WM_KEYDOWN,也就是说按下了alt键,并未发送WM_KEYDOWN消息
    我把测试程序源代码贴出来,请大家直接拷贝测试一下
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure ApplicationEventsActionExecute(var Msg: tagMSG; var Handled: Boolean);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      application.onmessage := ApplicationEventsActionExecute;
    end;procedure TForm1.ApplicationEventsActionExecute(var Msg: tagMSG; var Handled: Boolean);
    begin
        if (Msg.message = WM_KEYDOWN) then
        begin
          //ActionFullMode.Execute;
          showmessage(IntToStr(Msg.wParam));
        end
    end;end.
      

  3.   

    else if (Msg.message = WM_SYSKEYDOWN) then
            showmessage(IntToStr(Msg.wParam));
    按ALT的时候触发的这个消息。
      

  4.   

    谢谢fbysss(独孤求败) !结贴