⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 关机代码小全.txt

📁 学习(编程技巧_编程知识_程序代码),是学习编程不可多得的学习精验
💻 TXT
字号:
关机代码小全
 

--------------------------------------------------------------------------------
 
第八军团 时间:2003-12-28 14:11:57 
   
----------------------C语言的----------------------------------- 
//Shutdown the machine 
#include <windows.h> 
#include <stdio.h> 

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 WINDOWS 
Const TOKEN_QUERY As Long = &H8& 
Const TOKEN_ADJUST_PRIVILEGES As Long = &H20& 
Const SE_PRIVILEGE_ENABLED As Long = &H2 
Const SE_RESTORE_NAME = "SeRestorePrivilege" 'Important for what we're trying to accomplish 
Const 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 = &H20000 
Const SYNCHRONIZE = &H100000 
Const STANDARD_RIGHTS_READ = (READ_CONTROL) 
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL) 
Const STANDARD_RIGHTS_ALL = &H1F0000 
Const SPECIFIC_RIGHTS_ALL = &HFFFF 
Const KEY_QUERY_value = &H1 
Const KEY_SET_value = &H2 
Const KEY_CREATE_SUB_KEY = &H4 
Const KEY_ENUMERATE_SUB_KEYS = &H8 
Const KEY_NOTIFY = &H10 
Const KEY_CREATE_LINK = &H20 
Const 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 LUID 
UsedPart As Long 
IgnoredForNowHigh32BitPart As Long 
End Type 

Private Type TOKEN_PRIVILEGES 
PrivilegeCount As Long 
TheLuid As LUID 
Attributes As Long 
End Type 

Public Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, ByVal dwReserved As Long) As Long 
Private Declare Function LookupPrivilegevalue Lib "advapi32" Alias "LookupPrivilegevalueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long 
Private 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 Long 
Private Const EWX_SHUTDOWN As Long = 1 
Private Const EWX_FORCE As Long = 4 
Private Const EWX_REBOOT = 2 
Private Const EWX_LOGOFF = 0 

Public Sub AdjustToken() 
Const TOKEN_ADJUST_PRIVILEGES = &H20 
Const TOKEN_QUERY = &H8 
Const SE_PRIVILEGE_ENABLED = &H2 
Dim hdlProcessHandle As Long 
Dim hdlTokenHandle As Long 
Dim tmpLuid As LUID 
Dim tkp As TOKEN_PRIVILEGES 
Dim tkpNewButIgnored As TOKEN_PRIVILEGES 
Dim lBufferNeeded As Long 

hdlProcessHandle = GetCurrentProcess() 
OpenProcessToken hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or _ 
TOKEN_QUERY), hdlTokenHandle 

' Get the LUID for shutdown privilege. 
LookupPrivilegevalue "", "SeShutdownPrivilege", tmpLuid 

tkp.PrivilegeCount = 1 ' One privilege to set 
tkp.TheLuid = tmpLuid 
tkp.Attributes = KEY_ALL_ACCESS 

' Enable the shutdown privilege in the access token of this process. 
AdjustTokenPrivileges hdlTokenHandle, False, _ 
tkp, Len(tkpNewButIgnored), tkpNewButIgnored, lBufferNeeded 

End Sub 

Public Sub ShutDown() 
ExitWindowsEx (EWX_FORCE Or EWX_SHUTDOWN), &HFFFF 
End Sub 

Public Sub ReStart() 
ExitWindowsEx (EWX_FORCE Or EWX_REBOOT), &HFFFF 
End Sub 
Public Sub LOGOFF() 
ExitWindowsEx (EWX_LOGOFF Or EWX_FORCE), &HFFFF 
End Sub 

----------------------------- 使用方法 ------------------------- 
call AdjustToken() 
call ShutDown() 

WINNT/2K/XP 需要call AdjustToken(),几乎在所有WINDOWS下都能用吧 
EWX_FORCE 是强制~~ 不用这个的话将等待 

----------------DELPHI的------------------ 
{********************重启,关机,强力关机,注销********************} 
function Irc_Reboot_Shutdown(i:integer):boolean; 
var 
hToken :THandle; 
tkp : TOKEN_PRIVILEGES; 
ReturnLength : DWord; 
begin 
RESULT:=false; 
if (not OpenProcessToken(GetCurrentProcess(), 
TOKEN_ADJUST_PRIVILEGES 
or TOKEN_ALL_ACCESS 
or TOKEN_QUERY, hToken)) 
then 
RESULT:=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) then 
RESULT:=false; 
case i of 
1: begin 
ExitWindowsEx(EWX_REBOOT, 0); //reboot 
RESULT:=true; 
end; 
2: begin 
ExitWindowsEx(EWX_SHUTDOWN, 0); //shutdown 
RESULT:=true; 
end; 
3: begin 
ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN, 0); //force shutdown 
RESULT:=true; 
end; 
4: begin 
ExitWindowsEx(EWX_LOGOFF, 0); //logoff 
RESULT:=true; 
end; 
end; 

end;  
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -