您的位置:首页 > 编程语言 > Delphi

程序的开机关机重启,开机启动,休眠功能delphi实现

2016-07-08 10:59 816 查看
 TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff);

 procedure ShutDown(sdStatus : TShutDownStatus);

  var

     NewState:       TTokenPrivileges;

     lpLuid:         Int64;

     ReturnLength:   DWord;

     ToKenHandle:    Cardinal;

  begin

     OpenProcessToken(GetCurrentProcess,

                   TOKEN_ADJUST_PRIVILEGES

                   OR TOKEN_ALL_ACCESS

                   OR STANDARD_RIGHTS_REQUIRED

                   OR TOKEN_QUERY,ToKenHandle);

     LookupPrivilegeValue(nil,'SeShutdownPrivilege',lpLuid);

     NewState.PrivilegeCount:=1;

     NewState.Privileges[0].Luid:=lpLuid;

     NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;

     ReturnLength:=0;

     AdjustTokenPrivileges(ToKenHandle,False,NewState,0,nil,ReturnLength);

    case sdStatus of

      sdShutDown: ExitWindowsEx(EWX_SHUTDOWN OR EWX_POWEROFF or EWX_FORCE,0);

      sdReboot: ExitWindowsEx(EWX_REBOOT OR EWX_POWEROFF or EWX_FORCE,0);

      sdLogOff:ExitWindowsEx(EWX_LOGOFF,0);

      sdPowerOff:SetSystemPowerState(False,True);

      end;
  end;

  {

    函数功能:实现系统睡眠休眠功能

    bHibernate : True 睡眠  False 休眠

  } 

procedure TEpComOper.SystemSleep(bHibernate:Boolean);

  var

    h_Module : THandle;

    pSetSuspendState : function(Hibernate,ForceCritical,DisableWakeEvent:Boolean):Boolean;

  begin

    h_Module := LoadLibrary('PowrProf.dll');

    if h_Module <>0 then

    begin

      pSetSuspendState := GetProcAddress(h_Module,'SetSuspendState');

      if @pSetSuspendState<>nil then

      begin

        pSetSuspendState(bHibernate,False,False);

      end;

      FreeLibrary(h_Module);

    end;

  end;

{设置取消程序的开机启动功能}

  procedure TEpComOper.SetAppAutoRun(bRun : Boolean);

  var

    Reg:TRegistry;

  begin

    Reg := TRegistry.Create;

    try

      Reg.RootKey := HKEY_LOCAL_MACHINE;

      Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',True);

      if bRun then

        Reg.WriteString(‘test’,Application.ExeName)

      else

        Reg.DeleteValue('test');

      Reg.CloseKey;

    finally

      Reg.Free;

    end;

  end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: