const
ExtendedVKeys : set of byte = [VK_Up,VK_Down,VK_Left,VK_Right,VK_Home,VK_End,VK_Prior, {Pg Up} VK_Next, {PgDn}VK_Insert,VK_Delete]; //发送按键procedure SendCardNo(CardNo:String); var i :integer;begin for i:=1 to length(CardNo) do begin SendKeyDown(vkKeyScan(CardNo[i]),1, False); end; end;procedure SendKeysBack(Key:char);beginSendKeyDown(vkKeyScan(Key),1, False);
end;
Procedure SendKeyDown(VKey: Byte;NumTimes : Word;GenUpMsg : Boolean); var Cnt : Word; ScanCode : Byte; NumState : Boolean; KeyBoardState : TKeyboardState; begin If (VKey=VK_NUMLOCK) then begin NumState:=ByteBool(GetKeyState(VK_NUMLOCK) and 1); GetKeyBoardState(KeyBoardState); If NumState then KeyBoardState[VK_NUMLOCK]:=(KeyBoardState[VK_NUMLOCK] and not 1) else KeyBoardState[VK_NUMLOCK]:=(KeyBoardState[VK_NUMLOCK] or 1); SetKeyBoardState(KeyBoardState); exit; end; ScanCode:=Lo(MapVirtualKey(VKey,0)); For Cnt:=1 to NumTimes do If (VKey in ExtendedVKeys)then begin KeyboardEvent( VKey, ScanCode, KEYEVENTF_EXTENDEDKEY); If (GenUpMsg ) then KeyboardEvent( VKey, ScanCode, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP) end else begin KeyboardEvent(VKey, ScanCode, 0) ; If (GenUpMsg) then KeyboardEvent(VKey, ScanCode, KEYEVENTF_KEYUP); End; end; Procedure KeyboardEvent(VKey, ScanCode : Byte;Flags : Longint); var KeyboardMsg : TMsg; Wait :boolean; begin wait :=true; keybd_event(VKey, ScanCode, Flags,0); If (Wait) then While ( PeekMessage(KeyboardMsg,0,WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) do begin TranslateMessage(KeyboardMsg); DispatchMessage( KeyboardMsg); end; end;procedure SetCardLength(value: integer);beginCardLength:=Value;end;procedure SetSendKey(value: boolean);
beginSendKey:=Value;end;
本文来自CSDN博客,转载请标明出处: