如何实现,一段时间不使用Windows(比如5分钟),系统自动注销当前已登录的用户。

解决方案 »

  1.   

    function WindowsExit(RebootParam: Longword): Boolean;
    var
       TTokenHd: THandle;
       TTokenPvg: TTokenPrivileges;
       cbtpPrevious: DWORD;
       rTTokenPvg: TTokenPrivileges;
       pcbtpPreviousRequired: DWORD;
       tpResult: Boolean;
    const
       SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
    begin
       if Win32Platform = VER_PLATFORM_WIN32_NT then
       begin
         tpResult := OpenProcessToken(GetCurrentProcess(),
           TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
           TTokenHd) ;
         if tpResult then
         begin
           tpResult := LookupPrivilegeValue(nil,
                                            SE_SHUTDOWN_NAME,
                                            TTokenPvg.Privileges[0].Luid) ;
           TTokenPvg.PrivilegeCount := 1;
           TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
           cbtpPrevious := SizeOf(rTTokenPvg) ;
           pcbtpPreviousRequired := 0;
           if tpResult then
             Windows.AdjustTokenPrivileges(TTokenHd,
                                           False,
                                           TTokenPvg,
                                           cbtpPrevious,
                                           rTTokenPvg,
                                           pcbtpPreviousRequired) ;
         end;
       end;
       Result := ExitWindowsEx(RebootParam, 0) ;
    end;
    //
    调用
    WindowsExit(EWX_LOGOFF);
    //1、将你的程序写成服务或设置成开机自动运行
    //2、在窗体放一个timer组件设置他的Interval值为你想要执行的时间
    //3、在ontimer里执行WindowsExit(EWX_LOGOFF);
    procedure TFormMain.Timer1Timer(Sender: TObject);
    begin
    WindowsExit(EWX_LOGOFF);
    end;