写批处理文件,调用rundll32.exe user.exe exitwindowex!

解决方案 »

  1.   

    用api发消息给自己.
    sendmessage();
    有一个消息是关机的,不过忘了,你查查.
      

  2.   


    关掉你的程序。可以用
    CLOSE重起是
    ExitWindowsEx(2,0) 
      

  3.   

    你调用exitwindowsex时,系统会先给你的程序发消息,等你的程序相应,关闭自己后,他才会关闭系统。
      

  4.   

    调用外部命令rundll32.exe这个电源管理,如下,
    C:\WINDOWS\RUNDLL32.EXE user.exe,ExitWindows
    运行后就关机了。
      

  5.   

    procedure CloseAndReboot;
    var
    F: TextFile; 
    batName: string;
    pi: TProcessInformation; 
    si: TStartupInfo; 
    begin 
    batName := myGetTempPath + 'Reboot.bat';
    AssignFile(F,batName); 
    Rewrite(F);
    Writeln(F,':try');
    Writeln(F,'RUNDLL32.EXE user.exe,ExitWindows'); 
    Writeln(F,'"'+' goto try'); 
    Writeln(F,'del "' + batName + '"' ); 
    CloseFile(F); 
    FillChar(si, SizeOf(si), $00); 
    si.dwFlags := STARTF_USESHOWWINDOW; 
    si.wShowWindow := SW_HIDE;
    if CreateProcess( nil, PChar(batName), nil, nil, False, 
    IDLE_PRIORITY_CLASS,
    nil, nil, si, pi ) then 
    begin 
    CloseHandle(pi.hThread); 
    CloseHandle(pi.hProcess); 
    end;
    end;