用Delphi程序怎么控制电脑重新启动、注销、关机呢??还有一个问题就是怎么设置让程序运行的时候看不到呢?最好连进程都看不到。
还有怎么用热键调出呢?就是QQ隐藏的进修用热键调出。

解决方案 »

  1.   

    1.ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);  强行关机
    2.ExitWindowsEx(EWX_REBOOT or EWX_FORCE, 0);    强行重启
    3.exitwindowsex(EWX_SHUTDOWN, 0);              正常关机
    4.exitwindowsex(EWX_REBOOT, 0);                 正常重启
      

  2.   

    不能用啊。。我用的是Windows2000的操作系统不能用啊。
      

  3.   

    2000下需要这样!
        openprocesstoken(getcurrentprocess(),token_adjust_privileges or token_query,htoken);
        lookupprivilegevalue(nil,'seshutdownprivilege',tkp.privileges[0].luid);
        tkp.PrivilegeCount:=1;
        tkp.Privileges[0].Attributes:=se_Privilege_enabled;
        adjusttokenPrivileges(htoken,false,tkp,0,nil,rr);
        exitwindowsex(ewx_shutdown or ewx_poweroff,0);
      

  4.   

    具体你看一下帮助,  上面的参数改为EWX_LOGOFF
      

  5.   

    呵呵,看看下面的,包你搞定,为了演示程序,我在窗体上放了一个button,先解释一样,由于,windows2000,关机,或是重新启动都要先得到权限,所以:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        function WinExitInNT(iFlags: Integer): Boolean;
        function SetPrivilege(sPrivilegeName: string; bEnabled: Boolean): Boolean;
        procedure Button1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function Tform1.WinExitInNT(iFlags: Integer ): Boolean;
    begin
     Result := True;
     if (SetPrivilege('SeShutdownPrivilege',True)) then
     begin
       if(not ExitWindowsEx(iFlags,0))then
       begin
         Result := False;
       end;
       SetPrivilege('SeShutdownPrivilege',False)
     end else begin
       Result := False;
     end;
    end; function Tform1.SetPrivilege(sPrivilegeName: string; bEnabled: Boolean): Boolean;
    var
     TPPrev,TP: TTokenPrivileges;
     Token: THandle;
     dwRetLen: DWord;
    begin
     Result := False;
     OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token);
     TP.PrivilegeCount := 1;
     if( LookupPrivilegeValue(Nil,PChar(sPrivilegeName),TP.Privileges[ 0 ].LUID )) then
     begin
       if(bEnabled) then
       begin
         TP.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
       end else begin 
         TP.Privileges[ 0 ].Attributes := 0;
       end;
       dwRetLen := 0;
       Result := AdjustTokenPrivileges(Token,False,TP,SizeOf( TPPrev ),TPPrev,dwRetLen);
     end;
     CloseHandle(Token );
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
       WinExitInNT(EWX_POWEROFF);
    end;end.
      

  6.   

    补充一下:要是98或是me的话你可以用
    const
    EWX_FORCE=4;
    //关闭所有程序并以其他用户身份登录
    EWX_LOGOFF=0;
    //重新启动计算机并切换到MS-DOS方式
    EWX_REBOOT=2;
    //重新启动计算机
    EWX_SHUTDOWN=1;
    //关闭计算机
    运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句:
    ExitWindowsEx(How,0);
    就可以搞定了,在windwos2000下:
    上面的程序里的EWX_POWEROFF你可以根据你的需要自己改,也可以把它们设成常量,方便调用,对了,还有就是,
    EWX_LOGOFF:关闭所有调用函数ExitWindowsEx的进程的安全环境里运行的进程,然后注销用户;EWX_POWEROFF:关闭系统并关闭电源,系统必须具有电源关闭特性;EWX_REBOOT:关闭系统并重新启动系统。EWX_SHUTDOWN:关闭系统使之能安全关闭电源。所有文件缓冲区都被清洗到磁盘,所有运行进程都停止;EWX_FORCE强迫中止没有响应的进程;ExitWindowsEx(4,0);--这个也可以在2000下注销好了,就这样了。