欢迎来到传世资源网!
加载中...
正在加载,请耐心等待...
本站为收藏、学习站,如有侵权,请联系管理员删除!

按键转汉字,模拟输入法程序

介绍 评论 失效链接反馈

文件列表
│  Clear.bat
│  
├─DLL
│      KeyHook.dpr
│      
├─EXE
│      UseHook.dpr
│      
└─RES
        Disable.ico
        Enable.ico
        Icon.res
        Icon.txt
        LiuMazi.ico
        

library KeyHook;uses Windows, Messages;const Buffer1: PChar = '驿外断桥边,寂寞开无主。已是黄昏独自愁,更著风和雨。'; Buffer2: PChar = '无意苦争春,一任群芳妒。零落成泥碾作尘,只有香如故。'; // 交换高低字节function Swap(x: Word): Word;asm XCHG AH, AL;end; // 字母对应汉字function AsciiToGB(Letter: Char): Word;begin case Letter of 'A'..'Z': Result := Swap( PWord( @Buffer2[ (Ord(Letter) - Ord('A')) shl 1] )^ ); 'a'..'z': Result := Swap( PWord( @Buffer1[ (Ord(Letter) - Ord('a')) shl 1] )^ ); else Result := 0; end;end; // 键盘钩子句柄var KeyboardHook: HHOOK = 0; // 键盘钩子回调function KeyHookPro(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;var State: TKeyboardState; // 键盘状态 Ascii: array[0..1] of Char; // 字符 HFocus: HWND; // 焦点控件 GBCode: Word; // 汉字内码begin // 交下一钩子处理 Result := CallNextHookEx(KeyboardHook, nCode, wParam, lParam); if (nCode = HC_ACTION) and // 键盘消息将移出队列 (lParam and $80000000 = 0) and // 键盘正被按下 IsCharUpper(Char(wParam)) then // 英文字母 begin // 键盘状态 GetKeyboardState(State); // 转成字符 if ToAscii(wParam, (lParam and $FF0000) shr 16, State, Ascii, 0) = 1 then GBCode := AsciiToGB(Ascii[0]) else GBCode := 0; // 转换成功 if (GBCode <> 0) then begin HFocus := GetFocus(); if (HFocus <> 0) then begin SendMessage(HFocus, WM_IME_CHAR, GBCode, 0); // 发送汉字 Result := 1; // 返回TRUE, 屏蔽按键 end; end; end;end; // 卸载钩子procedure HookOff();begin UnHookWindowsHookEx(KeyboardHook); KeyboardHook := 0;end; // 安装钩子procedure HookOn();begin if (KeyboardHook <> 0) then HookOff(); KeyboardHook := SetWindowsHookEx(WH_KEYBOARD, KeyHookPro, HInstance, 0);end; // 导出函数exports HookOn, HookOff; beginend.

下载声明:

本站资源均有第三方用户自行上传分享推荐,非本站自制,仅供玩家做交流学习之用!切勿用于商业用途!游戏作品版权归原作者享有,如有版权问题,请附带版权证明至邮件,本平台将应您的要求删除。
相关推荐:

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复