delphi 编程技巧

源代码在线查看: 实现win2000下关机功能! (2001年5月16日).txt

软件大小: 774 K
上传用户: zyhunicom
关键词: delphi 编程技巧
下载地址: 免注册下载 普通下载 VIP

相关代码

				实现win2000下关机功能! (2001年5月16日) 
				
				本站更新  分类:系统   作者:  推荐:   阅读次数:228  
				(http://www.codesky.net)  
				
				--------------------------------------------------------------------------------
				
				
				procedure TtvAPIThing.ShutDown;
				const
				SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; // Borland forgot this declaration
				var
				hToken : THandle;
				tkp : TTokenPrivileges;
				tkpo : TTokenPrivileges;
				zero : DWORD;
				begin
				if Pos( 'Windows NT', OSVersion ) = 1 then // we've got to do a whole buch of things
				begin
				zero := 0;
				if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
				begin
				MessageBox( 0, 'Exit Error', 'OpenProcessToken() Failed', MB_OK );
				Exit;
				end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
				if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
				begin
				MessageBox( 0, 'Exit Error', 'OpenProcessToken() Failed', MB_OK );
				Exit;
				end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
				
				
				// SE_SHUTDOWN_NAME
				if not LookupPrivilegeValue( nil, 'SeShutdownPrivilege' , tkp.Privileges[ 0 ].Luid ) then
				begin
				MessageBox( 0, 'Exit Error', 'LookupPrivilegeValue() Failed', MB_OK );
				Exit;
				end; // if not LookupPrivilegeValue( nil, 'SeShutdownPrivilege' , tkp.Privileges[0].Luid )
				tkp.PrivilegeCount := 1;
				tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
				
				AdjustTokenPrivileges( hToken, False, tkp, SizeOf( TTokenPrivileges ), tkpo, zero );
				if Boolean( GetLastError() ) then
				begin
				MessageBox( 0, 'Exit Error', 'AdjustTokenPrivileges() Failed', MB_OK );
				Exit;
				end // if Boolean( GetLastError() )
				else
				ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
				end // if OSVersion = 'Windows NT'
				else
				begin // just shut the machine down
				ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
				end; // else
				end; 
				
				 
				 
							

相关资源