请问:要如何在窗体上加一个按钮,实现关闭计算机!在线等

解决方案 »

  1.   

    转贴:
    控制WINDOWS的开关:如关闭WINDOWS,重新启动WINDOWS等, ExitWindowsEx(UINT uFlags,DWORD dwReserved);是实现这一功能的API函数
    首先定义常数
    const
    EWX_FORCE=4; //关闭所有程序并以其他用户身份登录
    EWX_LOGOFF=0; //重新启动计算机并切换到MS-DOS方式
    EWX_REBOOT=2; //重新启动计算机
    EWX_SHUTDOWN=1;//关闭计算机
    运行时给How赋值,让他等于EWX_SHUTDOWN或其他,调用以下语句
    ExitWindowsEx(How,0);///////////////////////////////////////////
    Function ShutDownWindows(Flags: Byte) : Boolean;
    begin
         Result := ExitWindowsEx(Flage, 0)
         // 如果成功返回 True.
    end;Flags可用参数:EWX_LOGOFF:
      (=0)
      安全地关闭所有进程,并关闭用户登录。EWX_SHUTDOWN:
      (=1)
      关闭系统。所有缓冲区的内容都能被安全的存盘,所有进程都将被停止。
      对于Windows NT: 必须有 SE_SHUTDOWN_NAME 的安全特权方可进行此项操作。
      对于Windows 95: 不必有任何特权。EWX_REBOOT:
      (=2)
      关闭并重新启动系统。
      对于Windows NT: 必须有 SE_SHUTDOWN_NAME 的安全特权方可进行此项操作。
      对于Windows 95: 不必有任何特权。EWX_FORCE:
      (=4)
       强制切断连接,关闭所有应用程序。当使用这个参数时,Windows 将不向正在运行的应用程序发送 WM_QUERYENDSESSION 和 WM_ENDSESSION 消息,有可能造成数据丢失。所以推荐只在紧急时使用这个参数。EWX_POWEROFF:
      (=8)
      关闭系统并切断电源,需要ATX电源支持。
      

  2.   

    请你们把程序写出来,行吗?我一直在等你们。我不是搞DELPHI的,所以不熟。但一时又要用它。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure ShutDownSystem;
    var
        hProcess, hAccessToken: THandle;
        LUID_AND_ATTRIBUTES: TLUIDAndAttributes;
        TOKEN_PRIVILEGES: TTokenPrivileges;
        BufferIsNull: DWord;
    const
        SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
    begin
        //VER_PLATFORM_WIN32s = 0;
        //VER_PLATFORM_WIN32_WINDOWS = 1;
        //VER_PLATFORM_WIN32_NT = 2;
        if Win32PlatForm = VER_PLATFORM_WIN32_NT then
        begin //WindowsNT
            hProcess := GetCurrentProcess;
            OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hAccessToken);
            LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, LUID_AND_ATTRIBUTES.Luid);
            LUID_AND_ATTRIBUTES.Attributes := SE_PRIVILEGE_ENABLED;
            TOKEN_PRIVILEGES.PrivilegeCount := 1;
            TOKEN_PRIVILEGES.Privileges[0] := LUID_AND_ATTRIBUTES;
            BufferIsNull := 0;
            AdjustTokenPrivileges(hAccessToken, False, TOKEN_PRIVILEGES, sizeof(TOKEN_PRIVILEGES), nil, BufferIsNull);
        end;
        ExitWindowsEx(EWX_POWEROFF, 0);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        ShutDownSystem;
    end;end.
      

  4.   

    关闭时先判断操作系统,不同的系统关闭的方式会不一样,具体内容就见    ShutDownSystem过程二楼的兄弟不会说这个也是你知道想答的被我抢了吧?哈哈