打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
How to catch "MOUSE CLICK" in any place on screen ( OUT or IN form application)
userphoto

2023.10.13 福建

关注
How to catch "MOUSE CLICK" in any place on screen ( OUT or IN form application)


Delphi:
type
  TForm1 = class(TForm)
    Label2: TLabel;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

(*
  WM_MOUSEFIRST       = $0200; 512
  WM_MOUSEMOVE        = $0200;
  WM_LBUTTONDOWN      = $0201; 513
  WM_LBUTTONUP        = $0202; 514
  WM_LBUTTONDBLCLK    = $0203; 515
  WM_RBUTTONDOWN      = $0204; 516
  WM_RBUTTONUP        = $0205; 517
  WM_RBUTTONDBLCLK    = $0206; 518
  WM_MBUTTONDOWN      = $0207; 519
  WM_MBUTTONUP        = $0208; 520
  WM_MBUTTONDBLCLK    = $0209; 521
  WM_MOUSEWHEEL       = $020A; 522

  HC_ACTION = 0;
*)
var
  FHookHandle: HHOOK;

function MyMouseClick(AwParam: wParam): string;
begin
  case AwParam of
    WM_MOUSEMOVE:
      result := '(Mouse Moving action)';
    WM_LBUTTONDOWN:
      result := '(Left Button Down)';
    WM_LBUTTONUP:
      result := '(Left Button Up)';
    WM_LBUTTONDBLCLK:
      result := '(Left Button Double-click)';
    WM_RBUTTONDOWN:
      result := '(Right Button Down)';
    WM_RBUTTONUP:
      result := '(Right Button Up)';
    WM_RBUTTONDBLCLK:
      result := '(Right Button Double-click)';
    WM_MBUTTONDOWN:
      result := '(Middle Button Down)';
    WM_MBUTTONUP:
      result := '(Middle Button Up)';
    WM_MBUTTONDBLCLK:
      result := '(Middle Button Double-click)';
    WM_MOUSEWHEEL:
      result := '(Mouse Wheel action)';
  else
    result := 'Others...';
  end;
end;

function MouseHookProc(nCode: integer; wParam: wParam; lParam: lParam): LRESULT; stdcall;
begin
  Form1.Label2.Caption := 'Time: ' + TimeToStr(Now);
  Form1.Label3.Caption := 'HC_ACTION = ' + HC_ACTION.ToString;
  Form1.Label4.Caption := 'nCode = ' + nCode.ToString;
  Form1.Label5.Caption := 'wParam = ' + wParam.ToString + ' ' + MyMouseClick(wParam);
  //
  if (HC_ACTION = 0) then
    begin
      case wParam of
        WM_LBUTTONDOWN:
          begin
          Form1.Label1.Caption := 'Mouse Left Clicked';
          end;
        WM_RBUTTONDOWN:
          begin
          Form1.Label1.Caption := 'Mouse Right Clicked';
          end;
      end;
    end;
  //
  result := CallNextHookEx(FHookHandle, nCode, wParam, lParam); // next process...
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  // installing the "hook"
  FHookHandle := SetWindowsHookEx(WH_MOUSE_LL, @MouseHookProc, HInstance, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // removing the "hook" - DONT FORGET!
  UnhookWindowsHookEx(FHookHandle);
end;

initialization

ReportMemoryLeaksOnShutdown   := true;
FormatSettings.LongTimeFormat := 'hh:nn:ss.zzz';

end.
----------------------------------------------
The higher the degree, the greater the respect given to the humblest!RAD 11.3    
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Delphi 动态内存查找法
Excel导入到SQL
TColor 与 RGB 的互转
Delphi 7 中的随机函数
WebBrowser组件和MSHTML 在Delphi中的使用
delphi实现应用程序的文件拖放功能
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服