50分紧急求助如何在xp下用一个按钮进行自动关闭计算机
我试了一下有些文章上的说法,大多都是在98下进行的,到了xp 下时就不灵了,请高手帮忙 问题点数:0、回复次数:4Top
1 楼ehom(?!)回复于 2005-04-03 05:24:40 得分 0
你确定都仔细看了?还别说用google,在CSDN,类似问题都出现过成千上万遍。
说实在的,很多问题,有个MSDN可以查,都没必要问了。Top
2 楼lianshaohua(永远深爱一个叫“...”的好女孩儿!)回复于 2005-04-03 09:12:21 得分 0
要源程序?我有,其实楼上大侠说的很对,抽空给你,请留Email;Top
3 楼alimyso(我存在我精彩)回复于 2005-04-07 10:48:20 得分 0
procedure TFrm_regedit.GetPrivilege;
var
NewState: TTokenPrivileges;
lpLuid: Int64;
ReturnLength: DWord;
ToKenHandle: Cardinal;
begin
OpenProcessToken(GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES
OR TOKEN_ALL_ACCESS
OR STANDARD_RIGHTS_REQUIRED
OR TOKEN_QUERY,ToKenHandle);
LookupPrivilegeValue(nil,'SeShutdownPrivilege',lpLuid);
NewState.PrivilegeCount:=1;
NewState.Privileges[0].Luid:=lpLuid;
NewState.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
ReturnLength:=0;
AdjustTokenPrivileges(ToKenHandle,False,NewState,0,nil,ReturnLength);
end;Top
4 楼hellolongbin(一个人(自从扩充话题改版,再也不去灌水乐园了))回复于 2005-04-07 11:58:21 得分 0
procedure ShutDownSystem;
var
hProcess, hAccessToken: THandle;
LUID_AND_ATTRIBUTES: TLUIDAndAttributes;
TOKEN_PRIVILEGES: TTokenPrivileges;
BufferIsNull: DWord;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
//VER_PLATFORM_WIN32s = 0;
//VER_PLATFORM_WIN32_WINDOWS = 1;
//VER_PLATFORM_WIN32_NT = 2;
if Win32PlatForm = VER_PLATFORM_WIN32_NT then
begin //WindowsNT
hProcess := GetCurrentProcess;
OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES + TOKEN_QUERY, hAccessToken);
LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, LUID_AND_ATTRIBUTES.Luid);
LUID_AND_ATTRIBUTES.Attributes := SE_PRIVILEGE_ENABLED;
TOKEN_PRIVILEGES.PrivilegeCount := 1;
TOKEN_PRIVILEGES.Privileges[0] := LUID_AND_ATTRIBUTES;
BufferIsNull := 0;
AdjustTokenPrivileges(hAccessToken, False, TOKEN_PRIVILEGES, sizeof(TOKEN_PRIVILEGES), nil, BufferIsNull);
end;
ExitWindowsEx(EWX_POWEROFF, 0);
end;Top




