程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi鍵盤檢測、鍵盤模擬、禁止輸入、切換字母鍵等操作代碼

Delphi鍵盤檢測、鍵盤模擬、禁止輸入、切換字母鍵等操作代碼

編輯:Delphi

 Delphi鍵盤操作相關代碼,完成鍵盤檢測、鍵盤控制、鍵盤模擬,阻止輸入、切換字母鍵、得到系統鍵盤信息等,代碼中還用到了user32.dll中沒有公開的一個函數,獲取鍵盤類型相關說明:

1: kbtype:='IBM PC/XT或兼容類型(83鍵)鍵盤';
2: kbtype:='Olivetti "ICO"(102鍵)鍵盤';
3: kbtype:='IBM PC/AT(84鍵)鍵盤';
4: kbtype:='IBM增強型(101或102鍵)鍵盤';
5: kbtype:='Nokia 1050型鍵盤';
6: kbtype:='Nokia 9140型鍵盤';
7: kbtype:='日式鍵盤';
vIEw source print? 001 unit Unit1; 002 interface 003 uses 004   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 005   Dialogs, ExtCtrls, StdCtrls; 006 type 007   TForm1 = class(TForm) 008     Timer1: TTimer; 009     Button1: TButton; 010     Button2: TButton; 011     Panel1: TPanel; 012     Panel2: TPanel; 013     Panel3: TPanel; 014     Button4: TButton; 015     Button6: TButton; 016     Memo1: TMemo; 017     Label1: TLabel; 018     Label2: TLabel; 019     Label3: TLabel; 020     Label4: TLabel; 021     procedure Timer1Timer(Sender: TObject); 022     procedure Button1Click(Sender: TObject); 023     procedure Button2Click(Sender: TObject); 024     procedure FormDestroy(Sender: TObject); 025     procedure Button4Click(Sender: TObject); 026     procedure Button6Click(Sender: TObject); 027   private 028     { Private declarations } 029   public 030     { Public declarations } 031   end; 032 var 033   Form1: TForm1; 034 implementation 035 {$R *.dfm} 036 procedure TForm1.Timer1Timer(Sender: TObject); 037 var ks:TKeyBoardState; 038 begin 039   GetKeyBoardState(ks);//檢測鍵盤函數 040   if odd(ks[VK_NUMLOCK]) then //奇數狀態是激活 041     Begin 042     Panel1.Caption:='數字鍵按下'; 043     Panel1.Color:=clSkyBlue; 044     end 045   else 046     Begin 047     Panel1.Caption:='數字鍵松開'; 048     Panel1.Color:=clGreen; 049     end; 050   051   if odd(ks[VK_INSERT]) then 052     Begin 053     Panel2.Caption:='插入鍵按下'; 054     Panel2.Color:=clSkyBlue; 055     end 056   else 057     Begin 058     Panel2.Caption:='插入鍵松開'; 059     Panel2.Color:=clGreen; 060     end; 061   062   if odd(ks[VK_CAPITAL]) then 063     Begin 064     Panel3.Caption:='字母鍵按下'; 065     Panel3.Color:=clSkyBlue; 066     end 067   else 068     Begin 069     Panel3.Caption:='字母鍵松開' ; 070     Panel3.Color:=clGreen; 071     end; 072 end; 073 procedure TForm1.Button1Click(Sender: TObject); 074 begin 075  Timer1.Enabled:=True;//監視開始 076 end; 077 procedure TForm1.Button2Click(Sender: TObject); 078 begin //調用兩次才行 079 keybd_event( VK_CAPITAL,0,KEYEVENTF_EXTENDEDKEY or 0,0); //按下 080 keybd_event( VK_CAPITAL,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); //松開 081 { 082 procedure keybd_event(bVk: Byte; bScan: Byte; dwFlags, dwExtraInfo: DWord); stdcall; 083 bVk:指定的虛擬鍵,在1-254之間的值,也可以是具體的鍵值; 084 bScan:為虛擬鍵指定一個硬件掃描碼。 085 dwFlags:不同操作的標志,可以選擇下面的參數: 086 KEYEVENTF_EXTENDEDKEY-擴展鍵, 087 KEYEVENTF_KEYUP-如果指定了,虛擬鍵就松開,否則虛擬鍵一直處於按下狀態。 088 dwExtraInfo:為敲擊鍵盤指定一個32位值; } 089 end; 090 procedure TForm1.FormDestroy(Sender: TObject); 091 begin 092 Timer1.Enabled:=False;//監視開始 093 end; 094 //user32.dll中沒有公開的一個函數 095 function BlockInput(fFreezeInput : boolean):DWord; stdcall; external 'user32.DLL'; 096 procedure TForm1.Button4Click(Sender: TObject); 097 begin 098  BlockInput(True);//鎖住鍵盤和鼠標,使兩者無效 099 end; 100 procedure TForm1.Button6Click(Sender: TObject); 101 var kbtype:string; 102 begin 103  Memo1.Clear; 104  Case GetKeyBoardType(0of 105  //獲取鍵盤類型 106     1: kbtype:='IBM PC/XT或兼容類型(83鍵)鍵盤'; 107     2: kbtype:='Olivetti "ICO"(102鍵)鍵盤'; 108     3: kbtype:='IBM PC/AT(84鍵)鍵盤'; 109     4: kbtype:='IBM增強型(101或102鍵)鍵盤'; 110     5: kbtype:='Nokia 1050型鍵盤'; 111     6: kbtype:='Nokia 9140型鍵盤'; 112     7: kbtype:='日式鍵盤'; 113   end; 114   memo1.Lines.Add('鍵盤類型:'+kbtype); 115   //獲取鍵盤功能鍵數目 116  Memo1.Lines.Add('功能鍵數目:'+IntToStr(GetKeyBoardType(2))); 117 end; 118 end.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved