心野的小巢

  IT博客 :: 首页 :: 联系 :: 聚合  :: 管理
  36 Posts :: 51 Stories :: 1305 Comments :: 0 Trackbacks
首先定义一函数如下:

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;

如果你想实现定时关机,可以加入一定时器,在一Edit或ComboBox中设定时间段(也可以是时刻,但同样可以根据当前时间计算出时间差),例如设定定时器间隔为1000毫秒,TimeSet为经由Edit或ComboBox而得到的关机时间(假设单位为秒),Count为自定义的一整形数据,代表经历的时间,则定时器的触发函数可以定义为:

procedure TFormMain.Timer1Timer(Sender: TObject);
begin
  Count := Count + 1;
  if Count >= TimeSet then
  begin
    SetPrivilege('SeShutdownPrivilege', True);
    if not ExitWindowsEx((ewx_logoff+ewx_force+EWX_shutdown+ewx_poweroff),0) then
      SetPrivilege('SeShutdownPrivilege', False);
    close;
  end;
end;

如果你经常进行BT下载,想实现下载完成后自动关机(BitCommit好像不支持下载完毕自动关机),可以定义定时器的触发函数为:

procedure TFormMain.Timer1Timer(Sender: TObject);
begin
  if FileExists(Trim(EditFileName.Text)) then
  begin
    DeleteFile(Trim(EditFileName.Text));
    SetPrivilege('SeShutdownPrivilege', True);
    if not ExitWindowsEx((ewx_logoff+ewx_force+EWX_shutdown+ewx_poweroff),0) then
      SetPrivilege('SeShutdownPrivilege', False);
  end;
end;

其中EditFileName是你设定的文件名,这里利用了一般BT下载完毕会自动更改文件名这个特点。
posted on 2006-06-09 20:26 心野 阅读(1118) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。