Delphi键盘按键伪码

合集下载

Delphi键盘码

Delphi键盘码
常数名称 VK_LBUTTON VK_RBUTTON VK-CANCEL VK_MBUTTON VK_BACK VK_TAB VK_CLEAR VK_RETURN VK_SHIFT VK_CONTROL VK_MENU VK_PAUSE VK_CAPITAL VK_ESCAPE VK_SPACE VK_PRIOR VK_NEXT VK_END VK_HOME VK_LEFT VK_UP VK_RIGHT VK_DOWN VK_Select VK_PRINT VK_EXECUTE VK_SNAPSHOT VK_Insert VK_Delete VK_HELP VK_0 VK_1 VK_2 VK_3 VK_4 VK_5 VK_6 VK_7 VK_8 VK_9 VK_A VK_B VK_C
44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 60 61 62 62 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
Clear键(Num Lock关闭 时的数字键盘5)
Enter键 Shift键 Ctrl键 Alt键 Pause键 CapsLock键 Ese键 Spacebar键 PageUp键 PageDomw键 End键 Home键 LEFTARROW键(←) UPARROW键(↑) RIGHTARROW键(→) DOWNARROW键(↓) Select键 EXECUTE键 Print Screen键(抓屏) Ins键(Num Lock关闭时的数字 键盘0) Del键(Num Lock关闭时的数字 键盘.) Help键 0键 1键 2键 3键 4键 5键 6键 7键 8键 9键 A键 B键 C键

键盘键与虚拟键码对照表

键盘键与虚拟键码对照表

键盘键与虚拟键码对照表字母和数字键数字小键盘的键功能键其它键键键码键键码键键码键键码A 65 0 96 F1 112 Backspace 8B 66 1 97 F2 113 Tab 9C 67 2 98 F3 114 Clear 12D 68 3 99 F4 115 Enter 13E 69 4 100 F5 116 Shift 16F 70 5 101 F6 117 Control 17G 71 6 102 F7 118 Alt 1 8H 72 7 103 F8 119 Caps Lock 20I 73 8 104 F9 120 Esc 27 J 74 9 105 F10 121 Spacebar 32K 75 * 106 F11 122 Page Up 33L 76 + 107 F12 123 Page Down 34 M 77 Enter 108 -- -- End 3 5N 78 - 109 -- -- Home 3 6O 79 . 110 -- -- Left Arrow 37P 80 / 111 -- -- Up Arrow 38Q 81 -- -- -- -- Right Arro w 39R 82 -- -- -- -- Down Arro w 40S 83 -- -- -- -- Insert45T 84 -- -- -- -- Delete 46U 85 -- -- -- -- Help47V 86 -- -- -- -- Num Loc k 144W 87X 88Y 89Z 900 481 492 503 514 525 536 547 558 569 570x1 鼠标左键0x2 鼠标右键0x3 CANCEL 键0x4 鼠标中键0x8 BACKSPACE 键0x9 TAB 键0xC CLEAR 键0xD ENTER 键0x10 SHIFT 键0x11 CTRL 键0x12 MENU 键0x13 PAUSE 键0x14 CAPS LOCK 键0x1B ESC 键0x20 SPACEBAR 键0x21 PAGE UP 键0x22 PAGE DOWN 键0x23 END 键0x24 HOME 键0x25 LEFT ARROW 键0x26 UP ARROW 键0x27 RIGHT ARROW 键0x28 DOWN ARROW 键0x29 Select 键0x2A PRINT SCREEN 键0x2B EXECUTE 键0x2C SNAPSHOT 键0x2D Insert 键0x2E Delete 键0x2F HELP 键0x90 NUM LOCK 键A 至Z 键与 A –Z 字母的ASCII 码相同:值描述65 A 键66 B 键67 C 键68 D 键69 E 键70 F 键71 G 键72 H 键73 I 键74 J 键75 K 键76 L 键77 M 键78 N 键80 P 键81 Q 键82 R 键83 S 键84 T 键85 U 键86 V 键87 W 键88 X 键89 Y 键90 Z 键0 至9 键与数字0 –9 的ASCII 码相同:值描述48 0 键49 1 键50 2 键51 3 键52 4 键53 5 键54 6 键55 7 键56 8 键57 9 键下列常数代表数字键盘上的键:值描述0x60 0 键0x61 1 键0x62 2 键0x63 3 键0x65 5 键0x66 6 键0x67 7 键0x68 8 键0x69 9 键0x6A MULTIPLICATION SIGN (*) 键0x6B PLUS SIGN (+) 键0x6C ENTER 键0x6D MINUS SIGN (–) 键0x6E DECIMAL POINT (.) 键0x6F DIVISION SIGN (/) 键下列常数代表功能键:值描述0x70 F1 键0x71 F2 键0x72 F3 键0x73 F4 键0x74 F5 键0x75 F6 键0x76 F7 键0x77 F8 键0x78 F9 键0x79 F10 键0x7A F11 键0x7B F12 键0x7C F13 键0x7D F14 键0x7E F15 键0x7F F16 键0 None3 Cancel(Break)8 Back9 Tab13 Return16 ShiftKey17 ControlKey18 Menu19 Pause20 Capital(大小写) 27 Escape32 Space33 PageUp34 Next(PageDonw)35 End36 Home37 Left38 Up39 Right40 Down0-9 48-5745 Insert46 Delete65->90 A->Z91 LWin93 Apps96 105 NumPad0-106 Multiply *107 Add+108109 Subtract-110 Decimal . 111 Divide /112-123 F1-F12144 NumLock145 Scroll173 VolumeMute174 VolumeDown175 VolumeUp186 Oem1 ; 187 Oemplus = 188 Oemcomma ,189 OemMinus -190 OemPeriod .191 OemQuestion /192 Oemtilde `219 OemOpenBrackets [220 Oem5 \ 221 Oem6 ] 222 Oem7 '。

Delphi 中的程序调试及异常处理

Delphi 中的程序调试及异常处理

编译期错误
编译期错误也称为语法错误。在DelPhi中,通常是当程序代码违 反了object Pascal语言的语法规则时发生这类错误。比较常见的语法错 误有标识符未定义或拼写错误;语句的末尾漏掉分号;赋值语句中漏 写昌号;begin与end末配对;括号末配对;引号末配对等。
如果程序代码中有语法错误,编译不能通过,代码编辑器的状态 行将给出错误信息提示,并加亮有语法错误的代码行。
Try…except语句 Raise语句 Try…finally语句 自定义异常类及其使用
Delphi对异常的自动处理
Delphi为应用程序提供了一套缺省的自动异常处理机制,即当前 模块发生错误后退出当前模块并给出错误信息,而并不立即引起应用 程序的中止。 若程序在Delphi的集成开发环境中运行,在给出相应错 误信息的同时,还尽可能定位出错的位置。
I
Overflow checking 检查整数操作是否溢出
Q
信息(Messages)
选项 Show hints
说明 使编译器显示提示信息
Show Warnings
使编译器显示警告信息
编译选项3
语法选项(Syntax options)
选项 Strick var-strings
Complete Boolean eval
举例
举例(格式1)
举例: var i:integer; r:real; begin i:=0; try
r:=8/i; showmessage(floattostr(r)); except showmessage('除数为零'); end; end;
Try…except语句(格式2)
格式2: Try
Try…except语句(格式3)

delphi模拟按键

delphi模拟按键

delphi模拟按键delphi 模拟按键delphi模拟键盘输入可以通过发消息来实现,比如下面消息在编辑框formul中写入字符q:SENDMESSAGE(formula.HANDLE,WM_KEYDOWN,Ord('q'),0) ;当然还有其他多种实现方法,下面转载一个程序,里面用的方法很不错unit FrmKeyboard;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, te_controls, ksthemebuttons, ksthemeengine, ksthemeforms,StdCtrls, ExtCtrls;typeTKeyboardFrm = class(TForm)bttnQ: TButton;bttnW: TButton;bttnE: TButton;bttnR: TButton;bttnTab: TButton;bttnO: TButton;bttnP: TButton;bttnCapsLock: TButton; bttnBracketL: TButton; bttnT: TButton;bttnI: TButton;bttnY: TButton;bttnU: TButton; ttemKey: TTeThemeEngine; bttnS: TButton;bttnD: TButton;bttnF: TButton;bttnG: TButton;bttnA: TButton; bttnColon: TButton; bttnQuotation: TButton; bttnH: TButton;bttnL: TButton;bttnJ: TButton;bttnK: TButton; bttnShiftL: TButton; bttnX: TButton;bttnC: TButton;bttnV: TButton;bttnB: TButton;bttnZ: TButton; bttnSlash: TButton; bttnN: TButton; bttnFullStop: TButton; bttnM: TButton; bttnComma: TButton; bttnCtrlL: TButton;bttnAltL: TButton;bttnSpace: TButton;bttnWinL: TButton;bttnWinR: TButton;bttnAltR: TButton;bttnNull: TButton;bttnShiftR: TButton;bttnDoc: TButton;bttnCtrlR: TButton;TeThemeForm1: TT eThemeForm;bttnBracketR: TButton;bttn1: TButton;bttn2: TButton;bttn3: TButton;bttn4: TButton;bttnRipple: TButton;bttn9: TButton;bttn0: TButton;bttnSubtract: TButton;bttn5: TButton;bttn8: TButton;bttn6: TButton;bttn7: TButton;bttnEqual: TButton;bttnUnSlash: TButton;bttnBackSpace: TButton;bttnEnter: TButton;procedure bttnAClick(Sender: TObject);//模拟键盘procedure FormCreate(Sender: TObject);//创建窗口procedure myWM_ACTIVATE(var Message: TMessage);message WM_ACTIVATE;//截获消息private{ Private declarations }procedure LoadGlyph;//装入图标public{ Public declarations }end;TStateMeal= (Ctrl,Alt,Shift);//定义一个集合TStateArray= array[Ctrl..Shift] of Boolean;//定义一个数组(数组下标为集合类型)varKeyboardFrm: TKeyboardFrm;StateArray: TStateArray;gblIcoFilePath: string;//图标文件路径,位于程序的key目录下HActWin,Hself: HWND;implementation{$R *.dfm}{***********************************************************} {* 模拟键盘 *}{***********************************************************} {* 功能:模拟键盘 *}{* 说明:1.按纽的T ag属性存放相应键的虚拟键值(十进制) *}{* 2.根据相应的按纽传递其Tag值,(即虚拟键值键值) *}{* 3.程序以case语句为主,便于判断与理解 *}{* 4.所有按纽的OnClick事件均为按纽"A"的OnClick事件 *}{*=========================================================*}procedure TKeyboardFrm.bttnAClick(Sender: TObject);varfocushld,windowhld:hwnd;threadld:dword;Key: integer;begin//焦点定位,以便接受键盘输入SetActiveWindow(HActWin);windowhld:=GetForegroundWindow;threadld:=GetWindowThreadProcessId(Windowhld,nil);//WindowhldAttachThreadInput(GetCurrentThreadId,threadld,true);Focushld:=getfocus;AttachThreadInput(GetCurrentThreadId,threadld,false);if focushld = 0 then Exit;//开始模拟键盘Key:= (Sender as TButton).Tag;case Key of//双字符键的模拟48..57,65..90,111,188..190,186,187,220,221,222,219 :beginkeybd_event(key,MapVirtualKey(key,0),KEYEVENTF_KEYUP,0) ;//释放键keybd_event(key,MapVirtualKey(key,0),0,0);//按下键//释放控制键if StateArray[Ctrl] then keybd_event(17,MapVirtualKey(17,0),KEYEVENTF_KEYUP,0);if StateArray[Alt] then keybd_event(18,MapVirtualKey(18,0),KEYEVENTF_KEYUP,0);if StateArray[Shift]then keybd_event(16,MapVirtualKey(16,0),KEYEVENTF_KEYUP,0);end;//按制键的模拟(Shift,Ctrl,Alt)16 :beginkeybd_event(key,MapVirtualKey(key,0),0,0);//按下键StateArray[Shift]:=true;end;17 :beginkeybd_event(key,MapVirtualKey(key,0),0,0);//按下键StateArray[Ctrl]:=true;end;18 :beginkeybd_event(key,MapVirtualKey(key,0),0,0);//按下键StateArray[Alt]:=true;end;//Tab键的模拟{这里考虑到了Alt+Tab的模拟}9 :beginkeybd_event(key,MapVirtualKey(key,0),0,0);//按下键keybd_event(key,MapVirtualKey(key,0),0,0);//释放键if StateArray[Shift] then {考虑Alt+Tab的模拟}keybd_event(18,MapVirtualKey(18,0),0,0);//释放键//其它键的模拟{简单的按下然后释放}elsebeginkeybd_event(key,MapVirtualKey(key,0),0,0);//按下键keybd_event(key,MapVirtualKey(key,0),KEYEVENTF_KEYUP,0) ;//释放键end;end;end;{***********************************************************} {* 截获 WM_ACTIVATE 消息 *}{***********************************************************} {* 功能:获得输入句柄 *}{* 日期:2002年11月20日 *}{* 作者: *}{*===================================== ====================*}procedure TKeyboardFrm.myWM_ACTIVATE(var Message: TMessage);beginif Message.wParam = WA_CLICKACTIVE thenbegin//SetActiveWindow(message.lParam);if (HActWin<>message.lParam) and (message.lParam<>Hself) thenHActWin:=message.lParam;end;{***********************************************************} {* 程序初始化 *}{***********************************************************} {* 功能:数组变量赋初值false *}{* 日期:2002年11月20日 *}{* 作者: *}{*===================================== ====================*}procedure TKeyboardFrm.FormCreate(Sender: TObject);beginStateArray[Ctrl]:= false;StateArray[Alt]:= false;StateArray[Shift]:= false;Hself:= KeyboardFrm.Handle;KeyboardFrm.LoadGlyph;end;。

delphi给程序添加“伪”数字签名代码的优化

delphi给程序添加“伪”数字签名代码的优化

delphi给程序添加“伪”数字签名代码的优化最近看了某位仁兄的给程序添加数字签名的delphi代码,其中里面的文件流的使用让人感觉很高深,其实还有一种更加简单的方法,下面是我修改后的代码:1.function AddDigiSignFromFile(const FormFile, ToFile: string): Boolean;//添加数字签名2.var3.vFileSZQMDZ: Integer;//指定数字签名的地址4.vSZQMDZ: Integer; //数字签名地址5.vBufSize: Integer;//数字签名大小6.vFS: TFileStream;7.vBufAttr: array of Byte;8.vSize: Integer;9.begin10.Result := False;11.if not FileExists(ToFile) then12.Exit;13.try14.vFS := TFileStream.Create(FormFile, fmOpenRead);15.try16.vFS.Position:= $3C;17.vFS.ReadBuffer(vFileSZQMDZ, SizeOf(vFileSZQMDZ));18.Inc(vFileSZQMDZ, $98) ; //数字签名地址19.vFS.Position:= vFileSZQMDZ;20.vFS.ReadBuffer(vSZQMDZ, SizeOf(vSZQMDZ)); //得到记录数字签名所在地的缓冲区地址21.vFS.ReadBuffer(vBufSize, SizeOf(vBufSize)); //得到记录数字签名缓冲区大小22.vFS.Position:= vSZQMDZ;23.SetLength(vBufAttr, vBufSize);24.vFS.ReadBuffer(vBufAttr[0], vBufSize); //读取数字签名数据到vbufattr25.finally26.vFS.Free;27.end;28.vFS := TFileStream.Create(ToFile, fmOpenReadWrite);29.try30.vFS.Position:= $3C;31.vFS.ReadBuffer(vFileSZQMDZ, SizeOf(vFileSZQMDZ));32.Inc(vFileSZQMDZ, $98) ; //数字签名地址33.vFS.Position:= vFileSZQMDZ;34.vSize := vFS.Size;35.vFS.WriteBuffer(vSize, SizeOf(vSize)); //写入数据指定数字签名所在地36.vFS.WriteBuffer(vBufSize, SizeOf(vBufSize)); //写入数据指定数字签名大小37.vFS.Position:= vFS.Size;38.vFS.WriteBuffer(vBufAttr[0], vBufSize);39.finally40.vFS.Free;41.end;42.Result := True;43.except44.end;45.end;原来的代码如下:view plaincopy to clipboardprint?1.function ReadHexDZ(fvFileName:string;fvHexDZ:Integer):Integer; //读取指定偏移地址十六进制数据2.var3.//vBuffer : array of byte; //没指定长度的话调用函数回出错4.vBuffer : array [0..3] of byte; //指定长度5.vInt : integer;6.vFS : TFileStream;7.vStr : string;8.begin9.Result := -1 ;10.vStr:= '';11.try12.vFS:= TFileStream.Create(fvFileName, fmOpenRead); //以读取方式打开13.vFS.Position:= fvHexDZ; //设置开始位置14.vFS.ReadBuffer(vBuffer, SizeOf(vBuffer)); //读取数据到缓冲区15.for vInt:=0 to 3 do16.vStr:=IntT oHex(vBuffer[vInt], 2) + vStr; //得到16进制17.Result:= StrT oInt('$'+vStr) ;18.except19.Result := -120.END;21.vFS.Free;22.end;23.24.25.procedure TForm1.Button4Click(Sender: TObject);26.var27.vFile1, vFile2: string;28.vBuf1,vBuf2: array [0..3] of Byte;29.vFS: TFileStream;30.vBufAttr: array [0..100000] of PAnsiChar ;31.vFile2SZQMDZ,32.vFile1SZQMDZ, //指定数字签名的地址33.vFile1SZQMSizeDZ, //指定数字签名大小34.vSZQMDZ, //数字签名地址35.vBufSize:integer;//数字签名大小36.vStr, vNewStr, vNewStr2:string;37.vInt: Integer;38.begin39.vFile1:= Trim(EFile1.Text);40.vFile2 := Trim(EFile2.Text);41.if not FileExists(vFile1) or not FileExists(vFile2) then42.begin43.ShowMessBox('消息', '找不到文件!');44.Exit;45.end;46.if CBbakFile.Checked then47.CopyFile(PAnsiChar(vFile2),PAnsiChar(ExtractFileName(vFile2)+'.bak'), False);48.vFile1SZQMDZ:= ReadHexDZ(vFile1, $3C) + $98 ; //数字签名地址49.vFile1SZQMSizeDZ := vFile1SZQMDZ +$4; //数字签名大小地址50.vSZQMDZ:= ReadHexDZ(vFile1, vFile1SZQMDZ); //数字签名开始位置51.vBufSize := ReadHexDZ(vFile1, vFile1SZQMSizeDZ) ;52.//ShowMessBox(IntToStr(vFile1SZQMSizeDZ), IntToStr(vBufSize));53.// exit;54.try55.vFS := TFileStream.Create(vFile1, fmOpenRead);56.try57.vFS.Position:= vFile1SZQMDZ;58.vFS.ReadBuffer(vBuf1, 4); //得到记录数字签名所在地的缓冲区59.vFS.Position:= vFile1SZQMSizeDZ;60.vFS.ReadBuffer(vBuf2, 4); //得到记录数字签名大小的缓冲区61.vFS.Position:= vSZQMDZ;62.vFS.ReadBuffer(vBufAttr, vBufSize); //读取数字签名数据到vbufattr63.finally64.vFS.Free;65.end;66.vFile2SZQMDZ := ReadHexDZ(vFile2, $3C) + $98;67.vFS := TFileStream.Create(vFile2, fmOpenReadWrite);68.try69.vFS.Position:= vFile2SZQMDZ;70.vStr:= IntT oHex(vFS.Size, 8);71.vNewStr:= Copy(vStr, 7, 2) ;72.vNewStr:= vNewStr + Copy(vStr, 5, 2) ;73.vNewStr:= vNewStr + Copy(vStr, 3, 2) ;74.vNewStr:= vNewStr + Copy(vStr, 1, 2) ;75.vNewStr2:= '';76.for vInt:=1 to (length(vNewStr) div 2) do77.vNewStr2:=vNewStr2+char(strtoint('$'+copy(vNewStr,( vInt-1)*2+1,2)));78.vFS.WriteBuffer(Pointer(vNewStr2)^, 4); //写入数据指定数字签名所在地79.vFS.Position := vFile2SZQMDZ + $4;80.vFS.WriteBuffer(vbuf2, SizeOf(vBuf2)); //写入数据指定数字签名大小81.vFS.Position:= vFS.Size;82.vFS.WriteBuffer(vBufAttr, vBufSize);83.finally84.vFS.Free;85.end;86.ShowMessBox('消息','添加数字签名成功');87.except88.ShowMessBox('坏消息','添加数字签名出错');89.end;90.end;其实那个ReadHexDZ函数没有什么必要,把整型以一个一个字节的形式读出来,然后连接起来又转换为整型,直接以整型的形式去读不就行了?不理解作者的意图-_-!。

delphi通过代码实现模拟按键的函数

delphi通过代码实现模拟按键的函数

delphi通过代码实现模拟按键的函数Windows API 的keybd_event 函数,它可以产生键盘消息。

实现向其他窗口模拟真实的按键动作。

例如:{按下A键}Edit1.SetFocus;keybd_event(VK_SHIFT, 0, 0, 0);keybd_event(ord('A'), 0, 0, 0);keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);{按下左Window键然后选择“运行”}keybd_event(VK_LWIN, 0, 0, 0);keybd_event(ord('R'), 0, 0, 0);keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);KEYBD_EVENT 的函数说明:函数功能:该函数合成一次击键事件。

系统可使用这种合成的击键事件来产生WM_KEYUP或WM_KEYDOWN消息,键盘驱动程序的中断处理程序调用keybd_event函数。

在Windows NT中该函数己被使用Sendlhput来替代它。

函数原型;VOID keybd_event(BYTE bVk,BYTE bScan,DWORD dwFlags,DWORD dwExtralnfo);参数:bVk:定义一个虚据拟键码。

键码值必须在1~254之间。

bScan:定义该键的硬件扫描码。

dwFlags:定义函数操作的名个方面的一个标志位集。

应用程序可使用如下一些预定义常数的组合设置标志位。

KEYEVENTF_EXETENDEDKEY:若指定该值,则扫描码前一个值为OXEO(224)的前缀字节。

DEYEVENTF_KEYUP:若指定该值,该键将被释放;若未指定该值,该键交被接下。

dwExtralnfo:定义与击键相关的附加的32位值。

根据这个API函数,整理一个完整的函数,方便操作:procedure PostKey(const mKey: Word; mShiftState: TShiftState; mCount: Integer = 1);constcExtended: set of Byte = [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_INSERT, VK_DELETE];procedure pKeyboardEvent(mKey, mScanCode: Byte; mFlags: Longint);varvKeyboardMsg: TMsg;beginkeybd_event(mKey, mScanCode, mFlags, 0);while PeekMessage(vKeyboardMsg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE) dobeginTranslateMessage(vKeyboardMsg);DispatchMessage(vKeyboardMsg);end;end;procedure pSendKeyDown(mKey: Word; mGenUpMsg: Boolean);varvScanCode: Byte;vNumState: Boolean;vKeyBoardState: TKeyboardState;beginif (mKey = VK_NUMLOCK) thenbeginvNumState := ByteBool(GetKeyState(VK_NUMLOCK) and 1);GetKeyBoardState(vKeyBoardState);if vNumState thenvKeyBoardState[VK_NUMLOCK] := (vKeyBoardState[VK_NUMLOCK] and not 1)elsevKeyBoardState[VK_NUMLOCK] := (vKeyBoardState[VK_NUMLOCK] or 1);SetKeyBoardState(vKeyBoardState);Exit;end;vScanCode := Lo(MapVirtualKey(mKey, 0));if (mKey in cExtended) thenbeginpKeyboardEvent(mKey, vScanCode, KEYEVENTF_EXTENDEDKEY);if mGenUpMsg thenpKeyboardEvent(mKey, vScanCode, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP)end elsebeginpKeyboardEvent(mKey, vScanCode, 0);if mGenUpMsg then pKeyboardEvent(mKey, vScanCode, KEYEVENTF_KEYUP);end;end; { pSendKeyDown }procedure pSendKeyUp(mKey: Word);varvScanCode: Byte;beginvScanCode := Lo(MapVirtualKey(mKey, 0));if mKey in cExtended thenpKeyboardEvent(mKey, vScanCode, KEYEVENTF_EXTENDEDKEY and KEYEVENTF_KEYUP) elsepKeyboardEvent(mKey, vScanCode, KEYEVENTF_KEYUP);end;varI: Integer;beginfor I := 1 to mCount dobeginif ssShift in mShiftState then pSendKeyDown(VK_SHIFT, False);if ssCtrl in mShiftState then pSendKeyDown(VK_CONTROL, False);if ssAlt in mShiftState then pSendKeyDown(VK_MENU, False);pSendKeyDown(mKey, True);if ssShift in mShiftState then pSendKeyUp(VK_SHIFT);if ssCtrl in mShiftState then pSendKeyUp(VK_CONTROL);if ssAlt in mShiftState then pSendKeyUp(VK_MENU);end;end;另外一处函数也可以实现类似功能。

DELPHI中的键盘操作

DELPHI中的键盘操作

DELPHI中的键盘操作⽤程序模拟键盘和⿏标键盘在Windows⼤⾏其道的今天,windows界⾯程序受到⼴⼤⽤户的欢迎。

对这些程序的操作不外乎两种,键盘输⼊控制和⿏标输⼊控制。

有时,对于繁杂的,或重复性的操作,我们能否通过编制程序来代替⼿⼯输⼊,⽽⽤程序来模拟键盘及⿏标的输⼊呢?答案是肯定的。

这主要是通过两个API函数来实现的。

下⾯以Delphi为例来介绍⼀下如何实现这两个功能。

模拟键盘我们⽤Keybd_event这个api函数,模拟⿏标按键⽤mouse_event函数。

⼤家不⽤担⼼,在delphi⾥调⽤api函数是很⽅便的事。

先介绍⼀下Keybd_event函数。

Keybd_event能触发⼀个按键事件,也就是说回产⽣⼀个WM_KEYDOWN或WM_KEYUP消息。

当然也可以⽤产⽣这两个消息来模拟按键,但是没有直接⽤这个函数⽅便。

Keybd_event共有四个参数,第⼀个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。

第⼆个参数为扫描码,⼀般不⽤设置,⽤0代替就⾏。

第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数⼀般也是置0即可。

⽤如下代码即可实现模拟按下i键,其中的$49表⽰i键的虚拟键值: keybd_event($49,0,0,0);keybd_event($49,0,KEYEVENTF_KEYUP,0); ... mouse_event最好配合setcursorpos(x,y)函数⼀起使⽤,与Keybd_event类似,mouse_event有五个参数,第⼀个为选项标志,为MOUSEEVENTF_LEFTDOWN时表⽰左键按下,为MOUSEEVENTF_LEFTUP表⽰左键松开,向系统发送相应消息。

第⼆三个参数分别表⽰x,y相对位置,⼀般可设为0,0,第四五个参数并不重要,⼀般也可设为0,0。

delphi虚拟键码对应关键

delphi虚拟键码对应关键

delphi虚拟键码对应关键VK_LBUTTON鼠标左键VK_RBUTTON鼠标右键VK_CANCEL控制+休息VK_MBUTTON鼠标中键VK_BACK Backspace键VK_TAB Tab键VK_CLEAR清除主要VK_RETURN Enter键VK_SHIFT Shift键VK_CONTROL Ctrl键VK_MENU Alt键VK_PAUSE暂停关键VK_CAPITAL Caps Lock键VK_KANA可与输入法VK_HANGUL可与输入法VK_JUNJA可与输入法VK_FINAL可与输入法VK_HANJA可与输入法VK_KANJI可与输入法VK_CONVERT可与输入法VK_NONCONVERT可与输入法VK_ACCEPT可与输入法VK_MODECHANGE可与输入法VK_ESCAPE Esc键VK_SPACE空间酒吧VK_PRIOR页键VK_NEXT下一页关键VK_END END键VK_HOME主页关键VK_LEFT左箭头键VK_UP向上键VK_RIGHT右箭头键VK_DOWN下箭头键VK_SELECT选择关键VK_PRINT打印键(键盘的具体)VK_EXECUTE执行关键VK_SNAPSHOT Print Screen键VK_INSERT插入关键VK_DELETE Delete键VK_HELP帮助关键VK_LWIN左Windows键(微软键盘)VK_RWIN右Windows键(微软键盘)VK_APPS应用关键(微软键盘)VK_NUMPAD0 0键(数字键盘)VK_NUMPAD1 1键(数字键盘)VK_NUMPAD2 2键(数字键盘)VK_NUMPAD3 3键(数字键盘)VK_NUMPAD4 4键(数字键盘)VK_NUMPAD5 5键(数字键盘)VK_NUMPAD6 6键(数字键盘)VK_NUMPAD7 7键(数字键盘)VK_NUMPAD8 8键(数字键盘)VK_NUMPAD9 9键(数字键盘)VK_MULTIPLY多键(数字键盘)VK_ADD添加键(数字键盘)VK_SEPARATOR分离键(数字键盘)VK_SUBTRACT减去键(数字键盘)VK_DECIMAL小数点键(数字键盘)VK_DIVIDE鸿沟键(数字键盘)VK_F1 F1键VK_F2 F2键VK_F3 F3的关键VK_F4 F4键VK_F5 F5键VK_F6 F6键VK_F7 F7键VK_F8 F8键VK_F9 F9键VK_F10 F10键关键VK_F12 F12键VK_F13 F13键VK_F14 F14键VK_F15 F15键VK_F16 F16键VK_F17 F17键VK_F18 F18键VK_F19 F19键VK_F20 F20键VK_F21 F21键VK_F22 F22键VK_F23 F23键VK_F24 F24键VK_NUMLOCK数Lock键VK_SCROLL滚动Lock键VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_PROCESSKEY工艺关键VK_ATTN经办关键VK_CRSEL CrSel关键VK_EXSEL ExSel关键VK_EREOF擦除EOF分析关键VK_PLAY发挥关键VK_ZOOM变焦关键VK_NONAME保留以供将来使用VK_PA1 PA1关键VK_OEM_CLEAR清除主要标签数:1 “ F14键VK_F15 F15键VK_F16 F16键VK_F17 F17键VK_F19 F19键VK_F20 F20键VK_F21 F21键VK_F22 F22键VK_F23 F23键VK_F24 F24键VK_NUMLOCK数Lock键VK_SCROLL滚动Lock键VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_PROCESSKEY工艺关键VK_ATTN经办关键VK_CRSEL CrSel关键VK_EXSEL ExSel关键VK_EREOF擦除EOF分析关键VK_PLAY发挥关键VK_ZOOM变焦关键VK_NONAME保留以供将来使用VK_PA1 PA1关键VK_OEM_CLEAR清除主要。

Delphi下利用WinIo模拟鼠标键盘详解

Delphi下利用WinIo模拟鼠标键盘详解

[原创]Delphi下利用WinIo模拟鼠标键盘详解前言一日发现SendInput对某程序居然无效,无奈只好开始研究WinIo。

上网查了很多资料,发现关于Wi nIo模拟鼠标键盘的资料很少,有的也只是支言片语讲的不是很详细,而且大部分都是关于模拟键盘的。

自己写了一些程序研究一方,经历了无数次的键盘死锁、鼠标满屏乱飞、复位重启,总算小有结果。

现在将研究结果写出来与大家分享。

另外,本人的水平有限文中有出错的地方欢迎根贴讨论。

(PS:关于Send Input的使用可以参考我写的另一篇贴子《Delphi下利用SendInput模拟鼠标键盘》http://programbbs. com/bbs/view12-17219-1.htm)我已经将主要的模拟功能写在了一个单元文件中:MouseKeyboard.pas,调用该单元文件中的相关函数就可以实现鼠标键盘的模拟。

该单元文件的下载和使用方法请参考2楼的内容。

在本楼的末尾有一个中英文对译PS/2鼠标键盘协议的下载,这个协议对编写模拟鼠标键盘的程序很有帮助。

另外我还提供了一个鼠标移动速度测试程序、一个使用MouseKeyboard.pas的简单示范程序的下载。

一、WinIo简介WinIo通过加载一个内核模式的设备驱动程序,利用几种底层编程技巧,使得Windows应用程序可以直接对I/O端口和物理内存进行存取,从而绕过了Windows系统的保护机制。

WinIo包含了3个文件:Win Io.dll、WinIo.sys和WINIO.VXD,其中WINIO.VXD驱动程序用在Win95/98系统上,WinIo.sys驱动程序用在WinNT/2000/XP系统上,WinIo.dll提供了功能函数的调用。

在WinIo.dll中有两个函数最重要:Ini tializeWinIo用来初始化WinIo的驱动程序,必须在调用所有其它功能函数之前调用该函数;ShutdownWi nIo用来卸载WinIo的驱动程序,在中止应用函数之前或者不再需要使用WinIo时调用。

PostMessage组合键解决方案

PostMessage组合键解决方案

PostMessage组合键解决方案没成功PostMessage 组合键解决方案记录一下免得又便成了找不到资料的傻子了postmessage(edit1.handle,wm_keydown,vk_down,$2000000 0)Ctrl : $10000000;Shift: $08000000;Alt:20000000Delphi键盘按键伪码if key = chr(VK_RETURN) then...常数名称十六进制值十进制值对应按键VK_LBUTTON 01 1 鼠标的左键VK_RBUTTON 02 2 鼠标的右键VK-CANCEL 03 3 Contol-break 执行VK_MBUTTON 04 4 鼠标的中键(三按键鼠标)VK_BACK 08 8 Backspace键VK_TAB 09 9 Tab键VK_CLEAR 0C 12 Clear键VK_RETURN 0D 13 Enter键VK_SHIFT 10 16 Shift键VK_CONTROL 11 17 Ctrl键VK_MENU 12 18 Alt键VK_PAUSE 13 19 Pause键VK_CAPITAL 14 20 Caps Lock键VK_ESCAPE 1B 27 Ese键VK_SPACE 20 32 Spacebar键VK_PRIOR 21 33 Page Up键VK_NEXT 22 34 Page Domw键VK_END 23 35 End键VK_HOME 24 36 Home键VK_LEFT 25 37 LEFT ARROW 键(←) VK_UP 26 38 UP ARROW键(↑)VK_RIGHT 27 39 RIGHT ARROW键(→) VK_DOWN 28 40 DOWN ARROW键(↓) VK_SELECT 29 41 SELECT键VK_EXECUTE 2B 43 EXECUTE键VK_SNAPSHOT 2C 44 Print Screen键VK_INSERT 2D 45 Ins键VK_DELETE 2E 46 Del键VK_HELP 2F 47 Help键VK_0 30 48 0键VK_1 31 49 1键VK_2 32 50 2键VK_3 33 51 3键VK_4 34 52 4键VK_5 35 53 5键VK_6 36 54 6键VK_7 37 55 7键VK_8 38 56 8键VK_9 39 57 9键VK_A 41 65 A键VK_B 42 66 B键VK_C 43 67 C键VK_D 44 68 D键VK_E 45 69 E键VK_F 46 70 F键VK_G 47 71 G键VK_H 48 72 H键VK_I 49 73 I键VK_J 4A 74 J键VK_K 4B 75 K键VK_L 4C 76 L键VK_M 4D 77 M键VK_N 4E 78 N键VK_O 4F 79 O键VK_P 50 80 P键VK_Q 51 81 Q键VK_R 52 82 R键VK_S 53 83 S键VK_T 54 84 T键VK_U 55 85 U键VK_V 56 86 V键VK_W 57 87 W键VK_X 58 88 X键VK_Y 59 89 Y键VK_BZ 5A 90 Z键VK_NUMPAD0 60 96 数字键0键VK_NUMPAD1 61 97 数字键1键VK_NUMPAD2 62 98 数字键2键VK_NUMPAD3 63 99 数字键3键VK_NUMPAD4 64 100 数字键4键VK_NUMPAD5 65 101 数字键5键VK_NUMPAD6 66 102 数字键6键VK_NUMPAD7 67 103 数字键7键VK_NUMPAD8 68 104 数字键8键VK_NUMPAD9 69 105 数字键9键VK_MULTIPLY 6A 106 *键VK_ADD 6B 107 +键VK_SEPARATOR 6C 108 Separator键VK_SUBTRACT 6D 109 -键VK_DECIMAL 6E 110 .键VK_DIVIDE 6F 111 键VK_F1 70 112 F1键VK_F2 71 113 F2键VK_F3 72 114 F3键VK_F4 73 115 F4键VK_F5 74 116 F5键VK_F6 75 117 F6键VK_F7 76 118 F7键VK_F8 77 119 F8键VK_F9 78 120 F9键VK_F10 79 121 F10键VK_F11 7A 122 F11键VK_F12 7B 123 F12键VK_NUMLOCK 90 144 Num Lock 键VK_SCROLL 91 145 Scroll Lock键。

Delphi编码规范

Delphi编码规范

Delphi编码规范Delphi 编码规范是一组用于指导 Delphi 程序员编写可读性强、一致性好、易于维护的代码的规则和做法。

以下是一些常见的 Delphi 编码规范:1. 文件和单元命名规范:- 文件名应该使用有意义的名称,并与其中的主要类或接口名称保持一致。

- 单元名应该与文件名相同,并以大写字母开头。

2. 缩进和空白:- 使用 4 个空格表示一个缩进级别,不要使用制表符。

- 在逗号、冒号和运算符之后添加一个空格,但不要在括号和标识符之间添加空格。

3. 命名规范:- 类名、接口名和模块名应使用名词或名词短语,并使用帕斯卡命名法,即每个单词的首字母大写,单词之间没有下划线。

- 方法和函数名应使用动词或动词短语,并使用骆驼命名法,即首字母小写,后续单词的首字母大写,单词之间没有下划线。

- 常量名应全部大写,并使用下划线分隔单词。

4. 代码结构:- 使用单行注释 `//` 或多行注释 `{}` 对代码进行解释和说明。

注释应该与代码保持对齐,并且在需要时应该及时更新。

- 使用空行和缩进来划分代码块,以提高代码的可读性。

- 根据需要使用 `begin/end` 块,以及 `try/except` 和`try/finally` 块来处理异常。

- 避免使用全局变量和公共属性,优先使用局部变量和私有属性。

5. 注释规范:- 使用注释来解释代码的意图和设计决策,而不是对代码的操作进行详细描述。

注释应该清晰、简洁,并使用正确的语法和拼写。

- 使用注释来标记临时代码和待办事项,以便以后进行修改和维护。

6. 异常处理:- 使用 `try/except` 块来捕获和处理可能出现的异常,尽量避免空的 `except` 块。

- 在 `except` 块中使用特定的异常类来捕获和处理特定类型的异常,而不是简单地捕获所有类型的异常。

以上是一些常见的 Delphi 编码规范,程序员可以根据自己的项目和团队需求进行适当修改和扩展。

Delphi键盘码,键盘响应

Delphi键盘码,键盘响应

VK_LEFT 25 37 LEFT ARROW 键(←)
VK_UP 26 38 UP ARROW键(↑)
VK_RIGHT 27 39 RIGHT ARROW键(→)
VK_7 37 55 7键
VK_8 38 56 8键
VK_9 39 57 9键
VK_M 4D 77 M键
VK_N 4E 78 N键
VK_O 4F 79 O键
VK_MENU 12 18 Alt键
VK_PAUSE 13 19 Pause键
VK_CAPITAL 14 20 Caps Lock键
VK_S 53 83 S键
VK_T 54 84 T键
VK_U 55 85 U键
VK_Y 59 89 Y键
VK_Z 5A 90 Z键
VK_NUMPAD0 60 96 数字键0键
VK_G 47 71 G键
VK_H 48 72 H键
VK_I 49 73 I键
VK_Delete 2E 46 Del键(Num Lock关闭时的数字键盘.)
VK_HELP 2F 47 Help键
VK_0 30 48 0键
VK_BACK 08 8 Backspace键
VK_TAB 09 9 Tab键
VK_CLEAR 0C 12 Clear键(Num Lock关闭时的数字键盘5)
VK_DOWN 28 40 DOWN ARROW键(↓)
VK_Select 29 41 Select键
VK_PRINT 2A 42
VK_NUMPAD4 64 100 数字键4键
VK_NUMPAD5 65 101 数字键5键
VK_NUMPAD6 66 102 数字键6键

delphi 键盘键值对照表

delphi 键盘键值对照表

delphi 键盘键值对照表(2013-07-30 22:48:13)转载▼标签:delphi 键值it 分类:Delphi常数名称十六进制值十进制值对应按键VK_LBUTTON 01 1 鼠标的左键VK_RBUTTON 02 2 鼠标的右键VK-CANCEL 03 3 Ctrl+Break(通常不需要处理)VK_MBUTTON 04 4 鼠标的中键(三按键鼠标)VK_BACK 08 8 Backspace键VK_TAB 09 9 Tab键VK_CLEAR 0C 12 Clear键(Num Lock关闭时的数字键盘5)VK_RETURN 0D 13 Enter键VK_SHIFT 10 16 Shift键VK_CONTROL 11 17 Ctrl键VK_MENU 12 18 Alt键VK_PAUSE 13 19 Pause键VK_CAPITAL 14 20 Caps Lock键VK_ESCAPE 1B 27 Ese键VK_SPACE 20 32 Spacebar键VK_PRIOR 21 33 Page Up键VK_NEXT 22 34 Page Domw键VK_END 23 35 End键VK_HOME 24 36 Home键VK_LEFT 25 37 LEFT ARROW 键(←)VK_UP 26 38 UP ARROW键(↑)VK_RIGHT 27 39 RIGHT ARROW键(→)VK_DOWN 28 40 DOWN ARROW键(↓)VK_Select 29 41 Select键VK_PRINT 2A 42VK_EXECUTE 2B 43 EXECUTE键VK_SNAPSHOT 2C 44 Print Screen键(抓屏)VK_Insert 2D 45 Ins键(Num Lock关闭时的数字键盘0)VK_Delete 2E 46 Del键(Num Lock关闭时的数字键盘.)VK_HELP 2F 47 Help键VK_0 30 48 0键VK_1 31 49 1键VK_2 32 50 2键VK_3 33 51 3键VK_4 34 52 4键VK_5 35 53 5键VK_6 36 54 6键VK_7 37 55 7键VK_8 38 56 8键VK_9 39 57 9键VK_A 41 65 A键VK_C 43 67 C键VK_D 44 68 D键VK_E 45 69 E键VK_F 46 70 F键VK_G 47 71 G键VK_H 48 72 H键VK_I 49 73 I键VK_J 4A 74 J键VK_K 4B 75 K键VK_L 4C 76 L键VK_M 4D 77 M键VK_N 4E 78 N键VK_O 4F 79 O键VK_P 50 80 P键VK_Q 51 81 Q键VK_R 52 82 R键VK_S 53 83 S键VK_T 54 84 T键VK_U 55 85 U键VK_V 56 86 V键VK_W 57 87 W键VK_X 58 88 X键VK_Y 59 89 Y键VK_Z 5A 90 Z键VK_NUMPAD0 60 96 数字键0键VK_NUMPAD1 61 97 数字键1键VK_NUMPAD2 62 98 数字键2键VK_NUMPAD3 62 99 数字键3键VK_NUMPAD4 64 100 数字键4键VK_NUMPAD5 65 101 数字键5键VK_NUMPAD6 66 102 数字键6键VK_NUMPAD7 67 103 数字键7键VK_NUMPAD8 68 104 数字键8键VK_NUMPAD9 69 105 数字键9键VK_MULTIPLY 6A 106 数字键盘上的*键VK_ADD 6B 107 数字键盘上的+键VK_SEPARATOR 6C 108 Separator键VK_SUBTRACT 6D 109 数字键盘上的-键VK_DECIMAL 6E 110 数字键盘上的.键VK_DIVIDE 6F 111 数字键盘上的/键VK_F1 70 112 F1键VK_F2 71 113 F2键VK_F3 72 114 F3键VK_F5 74 116 F5键VK_F6 75 117 F6键VK_F7 76 118 F7键VK_F8 77 119 F8键VK_F9 78 120 F9键VK_F10 79 121 F10键VK_F11 7A 122 F11键VK_F12 7B 123 F12键VK_NUMLOCK 90 144 Num Lock 键VK_SCROLL 91 145 Scroll Lock键上面没有提到的:(都在大键盘)VK_LWIN 91 左win键VK_RWIN 92 右win键VK_APPS 93 右Ctrl左边键,点击相当于点击鼠标右键,会弹出快捷菜单186 ;(分号)187 =键188 ,键(逗号)189 -键(减号)190 .键(句号)191 /键192 `键(Esc下面)219 [键220 \键221 ]键222 ‘键(引号)delphi虚拟键码对应关键VK_LBUTTON鼠标左键VK_RBUTTON鼠标右键VK_CANCEL控制+休息VK_MBUTTON鼠标中键VK_BACK Backspace键VK_TAB Tab键VK_CLEAR清除主要VK_RETURN Enter键VK_SHIFT Shift键VK_CONTROL Ctrl键VK_MENU Alt键VK_PAUSE暂停关键VK_CAPITAL Caps Lock键VK_KANA可与输入法VK_HANGUL可与输入法VK_JUNJA可与输入法VK_FINAL可与输入法VK_HANJA可与输入法VK_KANJI可与输入法VK_CONVERT可与输入法VK_NONCONVERT可与输入法VK_ACCEPT可与输入法VK_MODECHANGE可与输入法VK_ESCAPE Esc键VK_SPACE空间酒吧VK_PRIOR页键VK_NEXT下一页关键VK_END END键VK_HOME主页关键VK_LEFT左箭头键VK_UP向上键VK_RIGHT右箭头键VK_DOWN下箭头键VK_SELECT选择关键VK_PRINT打印键(键盘的具体)VK_EXECUTE执行关键VK_SNAPSHOT Print Screen键VK_INSERT插入关键VK_DELETE Delete键VK_HELP帮助关键VK_LWIN左Windows键(微软键盘)VK_RWIN右Windows键(微软键盘)VK_APPS应用关键(微软键盘)VK_NUMPAD0 0键(数字键盘)VK_NUMPAD1 1键(数字键盘)VK_NUMPAD2 2键(数字键盘)VK_NUMPAD3 3键(数字键盘)VK_NUMPAD4 4键(数字键盘)VK_NUMPAD5 5键(数字键盘)VK_NUMPAD6 6键(数字键盘)VK_NUMPAD7 7键(数字键盘)VK_NUMPAD8 8键(数字键盘)VK_NUMPAD9 9键(数字键盘)VK_MULTIPLY多键(数字键盘)VK_ADD添加键(数字键盘)VK_SEPARATOR分离键(数字键盘)VK_SUBTRACT减去键(数字键盘)VK_DECIMAL小数点键(数字键盘)VK_DIVIDE鸿沟键(数字键盘)VK_F1 F1键VK_F2 F2键VK_F3 F3的关键VK_F4 F4键VK_F5 F5键VK_F6 F6键VK_F7 F7键VK_F8 F8键VK_F9 F9键VK_F10 F10键关键VK_F11 F11键VK_F12 F12键VK_F13 F13键VK_F14 F14键VK_F15 F15键VK_F16 F16键VK_F17 F17键VK_F18 F18键VK_F19 F19键VK_F20 F20键VK_F21 F21键VK_F22 F22键VK_F23 F23键VK_F24 F24键VK_NUMLOCK数Lock键VK_SCROLL滚动Lock键VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_PROCESSKEY工艺关键VK_ATTN经办关键VK_CRSEL CrSel关键VK_EXSEL ExSel关键VK_EREOF擦除EOF分析关键VK_PLAY发挥关键VK_ZOOM变焦关键VK_NONAME保留以供将来使用VK_PA1 PA1关键VK_OEM_CLEAR清除主要标签数:1 “F14键VK_F15 F15键VK_F16 F16键VK_F17 F17键VK_F18 F18键VK_F19 F19键VK_F20 F20键VK_F21 F21键VK_F22 F22键VK_F23 F23键VK_F24 F24键VK_NUMLOCK数Lock键VK_SCROLL滚动Lock键VK_LSHIFT左Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_RSHIFT右Shift键(仅用于GetAsyncKeyState和GetKeyState )VK_LCONTROL左Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_RCONTROL右Ctrl键(仅用于GetAsyncKeyState和GetKeyState )VK_LMENU左Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_RMENU右Alt键(仅用于GetAsyncKeyState和GetKeyState )VK_PROCESSKEY工艺关键VK_ATTN经办关键VK_CRSEL CrSel关键VK_EXSEL ExSel关键VK_EREOF擦除EOF分析关键VK_PLAY发挥关键VK_ZOOM变焦关键VK_NONAME保留以供将来使用VK_PA1 PA1关键VK_OEM_CLEAR清除主要。

delphi中的按键说明

delphi中的按键说明

Delphi中一些常用的组合键值CTRL+A:#1 CTRL+B:#2 CTRL+C:#3 CTRL+D:#4 CTRL+E:#5 CTRL+F:#6 CTRL+G:#7CTRL+H:#8 CTRL+I:#9 CTRL+J:#10 CTRL+K:#11 CTRL+L:#12 CR:#13 CTRL+N:#14CTRL+O:#15 CTRL+P:#16 CTRL+Q:#17 CTRL+R:#18 CTRL+S:#19 CTRL+T:#20CTRL+U:#21 CTRL+V:#22 CTRL+W:#23 CTRL+X:#24 CTRL+Y:#25 CTRL+Z:#26 ESC:#27CTRL+:#28 CTRL+]:#29 SHIFT+CTRL+-:#30 DEL:#127一般用在keydown、keyup、keypress事件中。

OnKeyDown和OnKeyUp事件中的Key是Word型的,表示用户按的是键盘上的哪个键,OnKeyPress中的Key是Char型,表示用户输入什么字符。

一个产生8位(char)常规健值,一个产生16位(word)功能健健值。

1.KeyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符,KeyDown和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键)2.KeyPress 只能捕获单个字符KeyDown 和KeyUp 可以捕获组合键。

3.KeyPress 可以捕获单个字符的大小写4.KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写。

Delphi中的健盘健码对照表

Delphi中的健盘健码对照表
VK_MBUTTON = 4; { NOT contiguous with L & RBUTTON }
{$EXTERNALSYM VK_BACK}
VK_BACK = 8;
{$EXTERNALSYM VK_TAB}
VK_TAB = 9;
{$EXTERNALSYM VK_CLEAR}
VK_CLEAR = 12;
VK_PLAY = 250;
{$EXTERNALSYM VK_ZOOM}
VK_ZOOM = 251;
{$EXTERNALSYM VK_NONAME}
VK_NONAME = 252;
{$EXTERNALSYM VK_PA1}
VK_PA1 = 253;
{$EXTERNALSYM VK_OEM_CLEAR}
{ VK_L & VK_R - left and right Alt, Ctrl and Shift virtual keys.
Used only as parameters to GetAsyncKeyState() and GetKeyState().
No other API or message will distinguish left and right keys in this way. }
VK_F2 = 113;
{$EXTERNALSYM VK_F3}
VK_F3 = 114;
{$EXTERNALSYM VK_F4}
VK_F4 = 115;
{$EXTERNALSYM VK_F5}
VK_F5 = 116;
{$EXTERNALSYM VK_F6}
VK_F6 = 117;
{$EXTERNALSYM VK_F7}

delphi利用SendInput模拟鼠标键盘

delphi利用SendInput模拟鼠标键盘

delphi利用SendInput模拟鼠标键盘delphi 利用SendInput模拟鼠标键盘作者:admin 来源:日期:2011-8-18 13:21:17 人气:1250 标签:QQ空间新浪微博腾讯微博腾讯朋友QQ收藏百度空间百度贴吧更多0前言一、SendInputSendInput可以将指定的鼠标键盘消息插入到系统消息队列,从而实现对鼠标键盘的模拟。

有很多程序对SendInput进行了屏蔽,但不是所有的。

所以这里介绍一下SendInput的使用。

我已经将主要的模拟功能写在了一个单元文件中:SIMouseKeyboard.pas,调用该单元文件中的相关函数就可以实现鼠标键盘的模拟。

该单元文件的下载见本楼末尾。

SendInput的参数其实很简单,在Windows.pas就有函数的声明如下:function SendInput(cInputs: UINT; var pInputs: TInput; cbSize: Integer): UINT; stdcall;cInputs:定义pInputs中记录数组的元素数目。

pInputs:TInput类型记录数组的第1个元素。

每个元素代表插人到系统消息队列的键盘或鼠标事件。

cbSize:定义TInput的大小,一般为SizeOf(TInput)。

函数返回成功插入系统消息队列中事件的数目,失败返回0。

调用SendInput关键的就是要搞清楚它的几个记录结构的意思,在Windows.pas中对TInput的声明如下:tagINPUT = packed recordItype: DWORD;case Integer of0: (mi: TMouseInput);1: (ki: TKeybdInput);2: (hi: THardwareInput);end;TInput = tagINPUT;其中mi、ki、hi是3个共用型的记录结构,Itype指出记录结构中所使用的类型,它有3个值。

delphi 输入法原理

delphi 输入法原理

Delphi输入法原理解析引言Delphi输入法是一种基于拼音输入法的中文输入法,它通过将拼音转换为汉字来实现中文输入。

在这篇文章中,我们将详细解释Delphi输入法的基本原理,并确保解释清楚、易于理解。

1. 拼音转换Delphi输入法的核心功能是将用户输入的拼音转换为对应的汉字。

拼音转换是通过建立一个拼音与汉字之间的映射关系来实现的。

这个映射关系通常以一个拼音库的形式存储在计算机中。

1.1 拼音库拼音库是一个包含了各种汉字与对应拼音之间关系的数据库。

每个汉字都有多个可能的读音,而每个读音又可以对应多个汉字。

因此,拼音库需要记录这些多对多的映射关系。

1.2 拼音分词当用户在Delphi输入法中输入一个完整的拼音串时,Delphi需要将该串进行分词,得到其中每个独立的拼音单元。

这样做是为了能够根据用户当前正在输入的拼音单元来生成合适的候选词。

1.3 候选词生成根据用户当前正在输入的拼音单元,Delphi输入法会从拼音库中查找与该拼音单元对应的所有汉字。

这些汉字就是候选词。

Delphi会根据一定的规则和算法来生成这些候选词。

1.4 候选词排序生成了候选词之后,Delphi需要将它们按照一定的优先级进行排序。

一般来说,常用的、出现频率高的汉字会排在前面,而不常用的、出现频率低的汉字会排在后面。

1.5 候选词展示经过排序之后,Delphi将排好序的候选词展示给用户。

用户可以通过选择其中一个候选词来完成输入。

2. 输入法引擎Delphi输入法还包含了一个输入法引擎,它负责处理用户输入和输出相关的操作。

2.1 用户输入处理当用户在键盘上输入一个字符时,Delphi输入法引擎会首先判断该字符是一个拼音单元还是其他字符(如标点符号、数字等)。

如果是拼音单元,则将其添加到当前正在输入的拼音串中;如果不是,则直接输出该字符。

2.2 候选词展示和选择当用户完成一个拼音串的输入后,Delphi引擎会根据该拼音串生成候选词,并将它们展示给用户。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VK_RBUTTON 02 2 鼠标的右键
VK-CANCEL 03 3 Ctrl+Break(通常不需要处理)
VK_MBUTTON 04 4 鼠标的中键(三按键鼠标)
VK_J 4A 74 J键
VK_K 4B 75 K键
VK_L 4C 76 L键
VK_D 44 68 D键
VK_E 45 69 E键
VK_F 46 70 F键
VK_MULTIPLY 6A 106 数字键盘上的*键
VK_ADD 6B 107 数字键盘上的+键
VK_SEPARATOR 6C 108 Separator键
VK_4 34 52 4键
VK_5 35 53 5键
VK_6 36 54 6键
VK_7 37 55 7键
VK_8 38 56 8键
VK_9 39 57 9键
VK_G 47 71 G键
VK_H 48 72 H键
VK_I 49 73 I键
VK_BACK 08 8 Backspace键
VK_TAB 09 9 Tab键
VK_CLEAR 0C 12 Clear键(Num Lock关闭时的数字键盘5)
VK_EXECUTE 2B 43 EXECUTE键
VK_SNAPSHOT 2C 44 Print Screen键(抓屏)
VK_Insert 2D 45 Ins键(Num Lock关闭时的数字键盘0)

VK_LEFT 25 37 LEFT ARROW 键(←)
VK_UP 26 38 UP ARROW键(↑)
VK_RIGHT 27 39 RIGHT ARROW键(→)
VK_DOWN 28 40 DOWN ARROW键(↓)
VK_Select 29 41 Select键
VK_PRINT 2A 42
VK_NUMPAD7 67 103 数字键7键
VK_NUMPAD8 68 104 数字键8键
VK_NUMPAD9 69 105 数字键9键
VK_V 56 86 V键
VK_W 57 87 W键
VK_X 58 88 X键
VK_A 41 65 A键
VK_B 42 66 B键
VK_C 43 67 C键
VK_MENU 12 18 Alt键
VK_PAUSE 13 19 Pause键
VK_CAPITAL 14 20 Caps Lock键
VK_NEXT 22 34 Page Domw键
VK_END 23 35 End键
VK_HOME 24 36 Home键
VK_NUMPAD1 61 97 数字键1键
VK_NUMPAD2 62 98 数字键2键
VK_NUMPAD3 62 99 数字键3键
VK_Delete 2E 46 Del键(Num Lock关闭时的数字键盘.)
VK_HELP 2F 47 Help键
VK_0 30 48 0键
VK_NUMPAD4 64 100 数字键4键
VK_NUMPAD5 65 101 数字键5键
VK_NUMPAD6 66 102 数字键6键
Delphi键盘按键伪码
Delphi键盘按键伪码
用法:if key = chr(VK_RETURN) then...
常数名称 十六进制值 十进制值 对应按键
VK_LBUTTON 01 1 鼠标的左键
VK_RETURN 0D 13 Enter键
VK_SHIFT 10 16 Shift键
VK_CONTROL 11 17 Ctrl键
VK_P 50 80 P键
VK_Q 51 81 Q键
VK_R 52 82 R键
VK_Y 59 89 Y键
VK_Z 5A 90 Z键
VK_NUMPAD0 60 96 数字键0键
VK_1 31 49 1键
VK_2 32 50 2键
VK_3 33 51 3键
VK_M 4D 77 M键
VK_N 4E 78 N键
VK_O 4F 79 O键
VK_S 53 83 S键
VK_T 54 84 T键
VK_U 55 85 U键
VK_ESCAPE 1B 27 Ese键
VK_SPACE 20 32 Spacebar键
VK_PRIOR 21 33 Page Up键
相关文档
最新文档