小胖网络知识大全
首页 | TAGS | QQ | 输入法 | Win7
  • 计算机锁定状态下执行关机、注销任务

  •  

    来至 footsetp
    // xp+sp2下测试成功

    program Portscan;
    {$APPTYPE CONSOLE}

    uses
    sysutils,
    windows;

    function SetPrivilege(PrivilegeName: String; Enable: Boolean): Boolean;
    var
    NewState, PreviousState: TTokenPrivileges;
    token: THandle;
    dwRetLen: DWord;
    begin
    Result := False;
    OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, token);
    NewState.PrivilegeCount := 1;
    if LookupPrivilegeValue(nil, PChar(PrivilegeName),NewState.Privileges[0].LUID) then
    begin
    if Enable then
    NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
    else
    NewState.Privileges[0].Attributes := 0;
    dwRetLen := 0;
    Result := AdjustTokenPrivileges(token,False, NewState, SizeOf(PreviousState),PreviousState, dwRetLen);
    end;
    CloseHandle(token);
    end;

    begin
    SetPrivilege(SeShutdownPrivilege, True);
    Sleep(6000); // 这里延迟是为了测试之用,运行后来得及锁定计算机
    ExitWindowsEx($0c,0); // 关机
    // 注销
    // ExitWindowsEx($4,0);
    end .

    试了很多很多关机软件都不能在计算机锁定的状态下执行关机操作,
    最近看到一款 "关机酷XP"的就能在这样的环境下执行关键/注销的
    操作,于是简单的分析了下,发现作者只是用ExitWindowsEx 这个API
    就实现了,本以为很复杂啊..-_-|. 昨天晚上看了点delphi,手痒,试着
    用delphi写了下,还真能用..只是不知道delphi如何实现C那样接受命
    令行参数呢?用GetCommandline的话,在delphi操作字符串还真不熟练,
    故此就写成这样..

  • TAGS:
  • 作者:管理员 时间:2009-4-28 来源:网络 人气:
版权所有:小胖网络迷 www.209j.cn 2004-2009 All Rights Reserved.
站长QQ: 951969697 粤ICP备05096685号