关闭窗口或最小化窗口重新启动计算机 ( 积分: 100 )

  • 主题发起人 主题发起人 liuzijie
  • 开始时间 开始时间
L

liuzijie

Unregistered / Unconfirmed
GUEST, unregistred user!
程序是开机自动加载的,由于有人老动计算机,所以想做成最小化或关闭程序时重新启动计算机,麻烦那为大虾告我一下怎么实现,谢谢了
 
unit&nbsp;ShutdownUnit;<br>{关机}<br><br>interface<br>uses<br>&nbsp;&nbsp;Windows,&nbsp;Messages;<br><br>procedure&nbsp;ShutDown;<br><br>implementation<br><br>function&nbsp;GetOSType(out&nbsp;AoIsNT&nbsp;:&nbsp;Boolean)&nbsp;:&nbsp;string;<br>var<br>&nbsp;&nbsp;osinfo&nbsp;:&nbsp;OSVERSIONINFO;<br>begin<br>&nbsp;&nbsp;AoIsNT&nbsp;:=&nbsp;False;<br>&nbsp;&nbsp;osinfo.dwOSVersionInfoSize&nbsp;:=&nbsp;sizeof(OSVERSIONINFO);<br>&nbsp;&nbsp;GetVersionEx(osinfo);<br>&nbsp;&nbsp;with&nbsp;osinfo&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;dwPlatformid&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;3.11';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;dwMinorVersion&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;95';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10:&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(szCSDVersion[1]&nbsp;=&nbsp;'A')&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;98&nbsp;SE'<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;98';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;90:&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;ME';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;'Unknown&nbsp;Version';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2:&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AoIsNT&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;dwMajorVersion&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3:&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;NT';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4:&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;NT';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5:&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;dwMinorVersion&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;2000';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:&nbsp;Result&nbsp;:=&nbsp;'Windows&nbsp;XP';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;'Unknown&nbsp;Version';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;'Unknown&nbsp;Platform';<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>end;<br><br>procedure&nbsp;ShutDown_NT;<br>&nbsp;&nbsp;procedure&nbsp;AdjustToken;<br>&nbsp;&nbsp;var<br>&nbsp;&nbsp;&nbsp;&nbsp;hdlProcessHandle&nbsp;:&nbsp;Cardinal;<br>&nbsp;&nbsp;&nbsp;&nbsp;hdlTokenHandle&nbsp;:&nbsp;Cardinal;<br>&nbsp;&nbsp;&nbsp;&nbsp;tmpLuid&nbsp;:&nbsp;Int64;<br>&nbsp;&nbsp;&nbsp;&nbsp;tkp&nbsp;:&nbsp;TOKEN_PRIVILEGES;<br>&nbsp;&nbsp;&nbsp;&nbsp;tkpNewButIgnored&nbsp;:&nbsp;TOKEN_PRIVILEGES;<br>&nbsp;&nbsp;&nbsp;&nbsp;lBufferNeeded&nbsp;:&nbsp;Cardinal;<br>&nbsp;&nbsp;&nbsp;&nbsp;Privilege&nbsp;:&nbsp;array[0..0]&nbsp;of&nbsp;_LUID_AND_ATTRIBUTES;<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;hdlProcessHandle&nbsp;:=&nbsp;GetCurrentProcess;<br>&nbsp;&nbsp;&nbsp;&nbsp;OpenProcessToken(hdlProcessHandle,(TOKEN_ADJUST_PRIVILEGES&nbsp;Or&nbsp;TOKEN_QUERY),hdlTokenHandle);<br>&nbsp;&nbsp;&nbsp;&nbsp;LookupPrivilegeValue('',&nbsp;'SeShutdownPrivilege',&nbsp;tmpLuid);<br>&nbsp;&nbsp;&nbsp;&nbsp;Privilege[0].Luid&nbsp;:=&nbsp;tmpLuid;<br>&nbsp;&nbsp;&nbsp;&nbsp;Privilege[0].Attributes&nbsp;:=&nbsp;SE_PRIVILEGE_ENABLED;<br>&nbsp;&nbsp;&nbsp;&nbsp;tkp.PrivilegeCount&nbsp;:=&nbsp;1;&nbsp;//&nbsp;One&nbsp;privilege&nbsp;to&nbsp;set<br>&nbsp;&nbsp;&nbsp;&nbsp;tkp.Privileges[0]&nbsp;:=&nbsp;Privilege[0];<br>&nbsp;&nbsp;&nbsp;&nbsp;AdjustTokenPrivileges(hdlTokenHandle,&nbsp;False,&nbsp;tkp,&nbsp;Sizeof(tkpNewButIgnored),&nbsp;tkpNewButIgnored,&nbsp;lBufferNeeded);<br>&nbsp;&nbsp;end;<br>var<br>&nbsp;&nbsp;hProcess,hAccessToken:THandle;<br>&nbsp;&nbsp;LUID_AND_ATTRIBUTES:TLUIDAndAttributes;<br>&nbsp;&nbsp;TOKEN_PRIVILEGES:&nbsp;TTokenPrivileges;<br>&nbsp;&nbsp;BufferIsNull:DWORD;<br>Const<br>&nbsp;&nbsp;SE_SHUTDOWN_NAME='SeShutdownPrivilege';<br>begin<br>&nbsp;&nbsp;hProcess&nbsp;:=&nbsp;GetCurrentProcess();<br>&nbsp;&nbsp;OpenProcessToken(hprocess,&nbsp;TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,&nbsp;hAccessToken);<br>&nbsp;&nbsp;LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,LUID_AND_ATTRIBUTES.Luid);<br>&nbsp;&nbsp;LUID_AND_ATTRIBUTES.Attributes:=SE_PRIVILEGE_ENABLED;<br>&nbsp;&nbsp;TOKEN_PRIVILEGES.PrivilegeCount:=1;<br>&nbsp;&nbsp;TOKEN_PRIVILEGES.Privileges[0]:=LUID_AND_ATTRIBUTES;<br>&nbsp;&nbsp;BufferIsNull:=0;<br>&nbsp;&nbsp;AdjustTokenPrivileges(hAccessToken,False,TOKEN_PRIVILEGES,sizeof(TOKEN_PRIVILEGES),Nil,BufferIsNull);<br>&nbsp;&nbsp;ExitWindowsEx(EWX_POWEROFF&nbsp;or&nbsp;EWX_FORCE,&nbsp;0);<br>end;<br><br>procedure&nbsp;ShutDown_NotNT;<br>begin<br>&nbsp;&nbsp;ExitWindowsEx((EWX_SHUTDOWN&nbsp;or&nbsp;EWX_FORCE),&nbsp;0);<br>end;<br><br>procedure&nbsp;ShutDown;<br>var<br>&nbsp;&nbsp;sOSType&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;IsNT&nbsp;:&nbsp;Boolean;<br>begin<br>&nbsp;&nbsp;SendMessage(HWND_BROADCAST,&nbsp;WM_QUERYENDSESSION,&nbsp;0,&nbsp;0);<br>&nbsp;&nbsp;sOSType&nbsp;:=&nbsp;GetOSType(IsNT);<br>&nbsp;&nbsp;if&nbsp;IsNT&nbsp;then&nbsp;ShutDown_NT<br>&nbsp;&nbsp;else&nbsp;ShutDown_NotNT;<br>end;<br><br>end.
 
谢谢,有重新启动的代码吗?
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部