我看了注册热键相关的内容,比如RegisterHotKey。但是它只能注册键。能不能注册鼠标按钮呢?比如用户按下alt和鼠标左键,我就采取相应的动作。怎么检测用户按下了alt和鼠标呢?

解决方案 »

  1.   


    //注册热键
    HotKeyID := GlobalAddAtom(pchar(HotKeyID));
      RegisterHotKey(handle,hotkeyid2,mod_Alt or MOUSEEVENTF_LEFTDOWN,0);
    //判断是否为alt +鼠标左键
      if msg.WParam = HotKeyID3 then
      begin
          msg.Result := 1;//正常返回
           application.BringToFront;//将窗体显示在最前边
           SwitchToThisWindow(handle,True);
          ShowMessage('调用alt+鼠标左键快捷键成功');
      end;
      

  2.   

    楼上的朋友,能给出其他的代码吗?我用  RegisterHotKey(handle,hotkeyid,mod_Alt,0);当按下alt时,可以知道按了alt但是用你的 mod_Alt or MOUSEEVENTF_LEFTDOWN,无法检测到相关的鼠标和按键动作
      

  3.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;  procedure SwitchToThisWindow(hWnd:Thandle;fAltTab:boolean);stdcall;external 'User32.dll';
    type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
        HotKeyID3 :integer; //记录热键标识
        //处理wm_hotkey消息
        procedure WMhotkeyhandle(var msg:Tmessage);
        message wm_hotkey;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      //通过原子表获得一个关于hotkey的唯一标识
      HotKeyID3 := GlobalAddAtom(pchar(HotKeyID3));
      RegisterHotKey(handle,hotkeyid2,MOD_CONTROL or MOUSEEVENTF_LEFTDOWN,0);end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      unregisterhotkey(handle,HotKeyID3);
      DeleteAtom(HotKeyID3);
    end;procedure TForm1.WMhotkeyhandle(var msg: Tmessage);
    begin
      if msg.WParam = HotKeyID3 then
      begin
          msg.Result := 1;//正常返回
          application.BringToFront;//将窗体显示在最前边
          SwitchToThisWindow(handle,True);
          ShowMessage('调用ctrl+鼠标左键快捷键成功');
      end;
    end;end.
      

  4.   

    朋友,你这个只能实现 按下ctrl 的监测
      
    不能实现鼠标的监测更不能实现 按下ctrl 同时按下鼠标的监测是不是我哪里做的不对? 我照你的代码原样复制的。我要的是:
      
        比如,按下ctrl,同时按下鼠标左键拖拉,就可以拉出一个框来。而不按住ctrl,则不处理鼠标的移动。
      

  5.   

    我也试了
    不行,不能监视这样的组合键啊仅仅按下Ctrl键都触发了事件我也希望高手实现Ctrl+鼠标键的组合消息啊
      

  6.   

    MOD_CONTROL or MOUSEEVENTF_LEFTDOWN
    是否要改成 MOD_CONTROL and MOUSEEVENTF_LEFTDOWN 啊?
      

  7.   

    当获得ALT按下的消息后,在判断鼠标的动作了,满足就执行了,不满足就EXIT
      

  8.   

    虽然我是新手,但我知道在调用一个函数前要先仔细读MSDN有关该函数的说明。如果你仔细读了就不会问这么初级的问题了。在MSDN关于该函数的说明中队最后一个参数有详细说明,其中鼠标左键用VK_LBUTTON即可。