Application有一个OnIdle事件,可以在这里定义一个定时器,是见到后弹出密码框,然后再OnMessage事件中设置定时器的Enabled=false;     
  //OnIdle   
  Timer1.Enabled=true;     
  //OnMessage   
  Timer1.Enabled=false;   
    
  Timer1计时到事件//     
  自动弹出密码对话框   ——这个是很久以前的一个帖子里说的,能否说的详细点。
谢谢。

解决方案 »

  1.   

    var
      hHookKbd: HHOOK;
      hHookMouse: HHOOK;
      dwLastInputTick: DWORD; procedure TfrmMain.FormShow(Sender: TObject);
    begin
      dwLastInputTick := GetTickCount;
      TimerLock.Enabled := true;
    end;function MyKbdHook(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
    begin
      if (iCode = HC_ACTION) then
        dwLastInputTick := GetTickCount;
      Result := CallNextHookEx(hHookKbd, iCode, wParam, lParam);
    end;function MyMouseHook(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
    begin
      if (iCode = HC_ACTION) then
        dwLastInputTick := GetTickCount;
      Result := CallNextHookEx(hHookMouse, iCode, wParam, lParam);
    end;procedure TfrmMain.Hook;
    begin
      hHookKbd := SetWindowsHookEx(WH_KEYBOARD, MyKbdHook, HInstance, GetCurrentThreadId);
      hHookMouse := SetWindowsHookEx(WH_MOUSE, MyMouseHook, HInstance, GetCurrentThreadId);
      dwLastInputTick := GetTickCount;
      TimerLock.Enabled := True;
    end;procedure TfrmMain.UnHook;
    begin
      TimerLock.Enabled := False;
      if hHookKbd <> 0 then
        UnhookWindowsHookEx(hHookKbd);
      if hHookMouse <> 0 then
        UnhookWindowsHookEx(hHookMouse);
      hHookKbd := 0;
      hHookMouse := 0;
    end;procedure TfrmMain.TimerLockTimer(Sender: TObject);
    begin
      if (GetTickCount - dwLastInputTick > 5000) then //这里的5000是指:5秒之内没有任何操作(鼠标、键盘),则弹出密码输入框
      begin
        UnHook;
        DoOperatorLock(''); //弹出密码输入框,若密码输入后通过验证,则调用Hook;
      end;
    end;
      

  2.   

    http://blog.csdn.net/jinjazz/archive/2008/02/21/2110620.aspx
      

  3.   

    谢谢楼上的热心,不过我是用delphi写的。
    能否再帮一下忙?
      

  4.   

    delphi 调用api函数不是更方便么
    procedure   TForm1.Timer1Timer(Sender:   TObject);   
      var   t:TLastInputInfo;   
      begin   
          t.cbSize   :=   SizeOf(TLastInputInfo);   
          GetLastInputInfo(t);   
          Caption   :=   IntToStr(GetTickCount   -   t.dwTime);   
      end;
      

  5.   

    谢谢你的帮助!
    不好意思,我用的是delphi3.0,这个方法用不了(delphi5我试过,可以)。
    因为delphi3里没有TLastInputInfo这个类。
    期待继续帮忙。再次谢谢你。