📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShellAPI{自己添加}, Menus;
const WH_KEYBOARD_LL = 13;
WM_TRAYNOTIFY=2000;
type
PBDLLHOOKSTRUCT = ^TBDLLHOOKSTRUCT;
TBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
PopupMenu1: TPopupMenu;
n1: TMenuItem;
n2: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure wmTrayNotify(var Msg:TMessage);message WM_TRAYNOTIFY;
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure n1Click(Sender: TObject);
procedure n2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function KeyboardProc(nCode: integer; wParam: integer; lParam: integer): LRESULT; stdcall;
var
Form1: TForm1;
Hook: HHOOK = 0;
Nid:TNotifyIconData;//定义ICON结构
implementation
{$R *.dfm}
function KeyboardProc(nCode: integer; wParam: integer; lParam: integer): LRESULT;
begin
if (nCode = HC_ACTION) then
begin
case wParam of
WM_KEYDOWN , WM_KEYUP:
begin
//showmessage(inttostr(PBDLLHOOKSTRUCT(lParam)^.scancode +PBDLLHOOKSTRUCT(lParam)^.flags shl 8));
case (PBDLLHOOKSTRUCT(lParam)^.scancode +PBDLLHOOKSTRUCT(lParam)^.flags shl 8) of
//0-9($30-$39)加.(110)共十个字符
71 : begin
keybd_event($37,0,0,0) ;
exit;
end;
72 : begin
keybd_event($38,0,0,0) ;
exit;
end;
73 : begin
keybd_event($39,0,0,0) ;
exit;
end;
75 : begin
keybd_event($34,0,0,0) ;
exit;
end;
76 : begin
keybd_event($35,0,0,0) ;
exit;
end;
77 : begin
keybd_event($36,0,0,0) ;
exit;
end;
79 : begin
keybd_event($31,0,0,0) ;
exit;
end;
80 : begin
keybd_event($32,0,0,0) ;
exit;
end;
81 : begin
keybd_event($33,0,0,0) ;
exit;
end;
82 : begin //0
keybd_event($30,0,0,0) ;
exit;
end;
83 : begin //.
keybd_event(110,0,0,0) ;
exit;
end;
284 : begin //. 模拟回车键
keybd_event(vk_return,0,0,0) ;
exit;
end;
else
result := CallNextHookEx(0, ncode, wparam, lparam)
end;
result := 1;
//exit;
end;
end;
end;
result := CallNextHookEx(0, ncode, wparam, lparam);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Hook := SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, HInstance, 0);
button1.Enabled :=false ;
button2.Enabled := true;
ShowWindow(Application.Handle,SW_SHOWMINIMIZED);
ShowWindow(Application.Handle,SW_HIDE);
Nid.szTip:='小键盘为数字状态' ;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Hook <> 0 then
UnhookWindowsHookEx(Hook);
Nid.szTip:='小键盘为光标状态' ;
button2.Enabled :=false ;
button1.Enabled := true;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Button2Click(nil);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Nid.cbSize:=sizeof(TNotifyIconData);
Nid.Wnd:=Handle;
Nid.uID:=1000;
Nid.uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP;
Nid.uCallbackMessage:=WM_TRAYNOTIFY;
Nid.hIcon:=Application.Icon.Handle;
Nid.szTip:='小键盘为数字状态' ;
Shell_NotifyIcon(NIM_ADD,@Nid);
button1.Click ;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE,@Nid);
end;//窗口销毁时不要忘记顺带处理掉那个小图标啊
procedure TForm1.N1Click(Sender: TObject);
begin
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end;//弹出菜单中的 显示窗口 选项被选后的处理过程
procedure TForm1.N2Click(Sender: TObject);
begin
Halt;
end;//菜单中的 退出 选项被选后结束程序
procedure TForm1.wmTrayNotify(var Msg:TMessage);
var
p:TPoint;
begin
if(Msg.lparam=WM_LBUTTONDBLCLK) then
begin
ShowWindow(Application.Handle,SW_SHOW);
Application.Restore;
end else
if(Msg.LParam=WM_RButtonUp) then
begin
GetCursorPos(P);//获得鼠标坐标
PopupMenu1.Popup(P.X, P.Y);//在鼠标光标处显示弹出菜单
end;
end;//自己写的wmTrayNotify函数
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -