程序人生
关机代码小全(推荐)
2004-05-25 10:13:40
----------------------C语言的-----------------------------------//Shutdown the machine #include #include void main() {             HANDLE hToken;             TOKEN_PRIVILEGES tkp;             if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))             return;             LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);             tkp.PrivilegeCount=1;             tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;             AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);           InitiateSystemShutdown(         NULL,         NULL,         0,         TRUE,         FALSE                  ); }---------------VBS的---------------------CreateObject("WScript.Shell".SendKeys "^{ESC}u{down}{down}{up}~"---------------VB的------------------------VB 的WINAPI调用-------------- 定义~~~ N多~~~ ------------------------'API FOR CLOSE WINDOWSConst TOKEN_QUERY As Long = &H8&Const TOKEN_ADJUST_PRIVILEGES As Long = &H20&Const SE_PRIVILEGE_ENABLED As Long = &H2Const SE_RESTORE_NAME = "SeRestorePrivilege" 'Important for what we're trying to accomplishConst SE_BACKUP_NAME = "SeBackupPrivilege"Const REG_FORCE_RESTORE As Long = 8& ' Almost as import, will allow you to restore over a key while it's open!Const READ_CONTROL = &H20000Const SYNCHRONIZE = &H100000Const STANDARD_RIGHTS_READ = (READ_CONTROL)Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)Const STANDARD_RIGHTS_ALL = &H1F0000Const SPECIFIC_RIGHTS_ALL = &HFFFFConst KEY_QUERY_VALUE = &H1Const KEY_SET_VALUE = &H2Const KEY_CREATE_SUB_KEY = &H4Const KEY_ENUMERATE_SUB_KEYS = &H8Const KEY_NOTIFY = &H10Const KEY_CREATE_LINK = &H20Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))Private Type LUIDUsedPart As LongIgnoredForNowHigh32BitPart As LongEnd TypePrivate Type TOKEN_PRIVILEGESPrivilegeCount As LongTheLuid As LUIDAttributes As LongEnd TypePublic Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As LongPrivate Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As LongPrivate Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As LongPrivate Const EWX_SHUTDOWN As Long = 1Private Const EWX_FORCE As Long = 4Private Const EWX_REBOOT = 2Private Const EWX_LOGOFF = 0Public Sub AdjustToken()Const TOKEN_ADJUST_PRIVILEGES = &H20Const TOKEN_QUERY = &H8Const SE_PRIVILEGE_ENABLED = &H2Dim hdlProcessHandle As LongDim hdlTokenHandle As LongDim tmpLuid As LUIDDim tkp As TOKEN_PRIVILEGESDim tkpNewButIgnored As TOKEN_PRIVILEGESDim lBufferNeeded As LonghdlProcessHandle = GetCurrentProcess()OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _TOKEN_QUERY), hdlTokenHandle' Get the LUID for shutdown privilege.LookupPrivilegeValue "", "SeShutdownPrivilege", tmpLuidtkp.PrivilegeCount = 1 ' One privilege to settkp.TheLuid = tmpLuidtkp.Attributes = KEY_ALL_ACCESS' Enable the shutdown privilege in the access token of this process.AdjustTokenPrivileges hdlTokenHandle, False, _tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeededEnd SubPublic Sub ShutDown()ExitWindowsEx (EWX_FORCE Or EWX_SHUTDOWN), &HFFFFEnd SubPublic Sub ReStart()ExitWindowsEx (EWX_FORCE Or EWX_REBOOT), &HFFFFEnd SubPublic Sub LOGOFF()ExitWindowsEx (EWX_LOGOFF Or EWX_FORCE), &HFFFFEnd Sub----------------------------- 使用方法 -------------------------call AdjustToken()call ShutDown()WINNT/2K/XP 需要call AdjustToken(),几乎在所有WINDOWS下都能用吧EWX_FORCE 是强制~~ 不用这个的话将等待----------------DELPHI的------------------{********************重启,关机,强力关机,注销********************}function Irc_Reboot_Shutdown(i:integer):boolean;varhToken :THandle;tkp : TOKEN_PRIVILEGES;ReturnLength : DWord;beginRESULT:=false;if (not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGESor TOKEN_ALL_ACCESSor TOKEN_QUERY, hToken))thenRESULT:=false;LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid);tkp.PrivilegeCount := 1;tkp.Privileges[0].Attributes :=SE_PRIVILEGE_ENABLED;ReturnLength :=0;AdjustTokenPrivileges(hToken, FALSE, tkp, 0,nil,ReturnLength);if (GetLastError() <> ERROR_SUCCESS) thenRESULT:=false;case i of1: beginExitWindowsEx(EWX_REBOOT, 0); //rebootRESULT:=true;end;2: beginExitWindowsEx(EWX_SHUTDOWN, 0); //shutdownRESULT:=true;end;3: beginExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN, 0); //force shutdownRESULT:=true;end;4: beginExitWindowsEx(EWX_LOGOFF, 0); //logoffRESULT:=true;end;end;end;