⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 笔记本数字小键盘在方向键状态下输入数字,方便财务人员经常输入数字,不用切换usb小键盘的数字和方向键状态
💻 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 + -