Application有一个OnIdle事件,可以在这里定义一个定时器,是见到后弹出密码框,然后再OnMessage事件中设置定时器的Enabled=false;
//OnIdle
Timer1.Enabled=true;
//OnMessage
Timer1.Enabled=false;
Timer1计时到事件//
自动弹出密码对话框 ——这个是很久以前的一个帖子里说的,能否说的详细点。
谢谢。
//OnIdle
Timer1.Enabled=true;
//OnMessage
Timer1.Enabled=false;
Timer1计时到事件//
自动弹出密码对话框 ——这个是很久以前的一个帖子里说的,能否说的详细点。
谢谢。
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;
能否再帮一下忙?
procedure TForm1.Timer1Timer(Sender: TObject);
var t:TLastInputInfo;
begin
t.cbSize := SizeOf(TLastInputInfo);
GetLastInputInfo(t);
Caption := IntToStr(GetTickCount - t.dwTime);
end;
不好意思,我用的是delphi3.0,这个方法用不了(delphi5我试过,可以)。
因为delphi3里没有TLastInputInfo这个类。
期待继续帮忙。再次谢谢你。