冥界3大法王 发表于 2021-10-4 09:32

为什么Delphi hotkey组件不能捕获到Windows这个键?

为什么Delphi hotkey组件不能捕获到Windows这个键?

renpeng009 发表于 2021-10-4 10:54

Windows哪个键?

yulinsoft 发表于 2021-10-4 11:16

无闻无问 发表于 2021-10-4 13:07

renpeng009 发表于 2021-10-4 10:54
Windows哪个键?

就是窗口键

Jack2002 发表于 2021-10-4 15:54

HOOK键盘消息,回调函数中判断是否按下了WIN,返回 TRUE就是拦截该消息。

冥界3大法王 发表于 2021-10-4 16:29

Jack2002 发表于 2021-10-4 15:54
HOOK键盘消息,回调函数中判断是否按下了WIN,返回 TRUE就是拦截该消息。

@Jack2002
看来想简单的借用hotkey这个组件
自动生成全部的鼠标键盘的组合的AHK代码的这条路行不通
所以,维持简单的选择式生成的方式吧。
少量代码完成复杂的,完美的,全部情况是作梦啊。

Jack2002 发表于 2021-10-4 19:17

冥界3大法王 发表于 2021-10-4 16:29
@Jack2002
看来想简单的借用hotkey这个组件
自动生成全部的鼠标键盘的组合的AHK代码的这条路行不通

可以的,只是很多已被系统占用了。
unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
    { Private declarations }
    procedure OnHotKey(var msg: TMessage); message WM_HOTKEY;
public
    { Public declarations }
end;

var
Form1: TForm1;
HotKeyId: Integer;
keyCode : Integer;

implementation

{$R *.dfm}
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
      UnRegisterHotKey(handle, HotKeyId);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
keyCode := 89; //65=a
HotKeyId:= GlobalAddAtom('Hotkeyid') - $C000;
//RegisterHotKey(Handle, hotkeyid, MOD_CONTROL+MOD_ALT+MOD_WIN, keyCode);
RegisterHotKey(Handle, hotkeyid, MOD_WIN, keyCode);
end;

procedure TForm1.OnHotKey(var msg: TMessage);
var szMsg: string;
begin
//if(msg.LParamLo = MOD_CONTROL+MOD_ALT+MOD_WIN) and (msg.LParamHi = keyCode) then
if(msg.LParamLo = MOD_WIN) and (msg.LParamHi = keyCode) then
begin
    //szMsg:= '你按下了Ctrl + alt + WIN + a';
    szMsg:= '你按下了 WIN + y';
    ShowMessage(szMsg);
end
end;

end.
页: [1]
查看完整版本: 为什么Delphi hotkey组件不能捕获到Windows这个键?