请问delphi中强制关机该用什么方法?

liuer 2002-11-27 10:41:00
能够在win98/winxp下都能用有效使用的,谢了
...全文
214 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaOk 2003-05-02
  • 打赏
  • 举报
回复
google搜索
AdjustTokenPrivileges delphi

可以找到n多直接可以用的函数。支持98和2000
xp下没试过。
sapdigger 2003-05-02
  • 打赏
  • 举报
回复
前两位前辈的方法真见效呀!




dawnming 2003-05-02
  • 打赏
  • 举报
回复
帮你顶一下
我只会瞎说
wjlsmail 2002-12-23
  • 打赏
  • 举报
回复
用 EXITWINDOWSEX 不行的,2000下
--------------------------------------------------------
function ShutDownSystem(): BOOL;
var
hProcess, hAccessToken: THandle;
LUID_AND_ATTRIBUTES: TLUIDAndAttributes;
TOKEN_PRIVILEGES: TTokenPrivileges;
BufferIsNull: DWORD;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
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);
ExitWindowsEx(EWX_SHUTDOWN,0);
ShutDownSystem := True;
end;

-----------------------------------------
这样不完全,试试上面两前辈的
ogrehui 2002-11-27
  • 打赏
  • 举报
回复
调用API函数:EXITWINDOWSEX
键行天下 2002-11-27
  • 打赏
  • 举报
回复
来晚了
liuer 2002-11-27
  • 打赏
  • 举报
回复
谢楼上两位贴源码朋友,谢另外两位没贴源码的朋友:))))))
CDSoftwareWj 2002-11-27
  • 打赏
  • 举报
回复
me 的关机小程序 ^^

http://www.playicq.com/dispdoc.php?t=33&id=2139
hmily1688 2002-11-27
  • 打赏
  • 举报
回复
如果是2000或xp你得调用一api函数,进行授权.
总有一天我会不菜的
liuer 2002-11-27
  • 打赏
  • 举报
回复
我看了好几个关机软件,在xp下面根本关不了,在98下就可以正常关机
不知还有什么好办法?
ePing 2002-11-27
  • 打赏
  • 举报
回复
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
var
hToken: THandle;
NewTP: TTokenPrivileges;
PreTP: TTokenPrivileges;
Zero: DWord;
begin
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, NewTP.Privileges[0].Luid);
NewTP.PrivilegeCount := 1;
NewTP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, NewTP, SizeOf(TTokenPrivileges), PreTP, Zero);
ExitWindowsEx(EWX_SHUTDOWN, 0);
end;

2000下适用

ePing

Good Luck
CDSoftwareWj 2002-11-27
  • 打赏
  • 举报
回复
//--------------------------------------------------------------[ ShutDown ]---
{ 关闭计算机核心代码 }
function ShutDown :boolean;
const
ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
SHTDWN_PRIV = 'SeShutdownPrivilege';
PRIV_SIZE = sizeOf(TTokenPrivileges);
var
Len: DWORD;
TokenPriv, Dummy: TTokenPrivileges;
Token: THandle;
Error: integer;
OSVersionInfo: TOSVERSIONINFO;
begin
OSVersionInfo.dwOSVersionInfoSize := sizeof(OSVERSIONINFO);
GetVersionEx(OSVersionInfo);
// 如果是Win NT/2000操作系统
if (OSVersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT) then
begin
error:=0;
// 设置特权
// Delphi2:
//if not OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, @Token) then
if not OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, Token) then
Error := Error or 4;
if not LookupPrivilegeValue(nil, SHTDWN_PRIV,TokenPriv.Privileges[0].Luid) then
Error := Error or 8;
TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
TokenPriv.PrivilegeCount := 1; // One privilege to set
if not AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE,Dummy, Len) then
Error:=Error or 16;
ExitWindowsEx(EWX_POWEROFF or EWX_FORCE, 0);
Result := (Error=0);
end
else
ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
end; {ShutDown}
happysl 2002-11-27
  • 打赏
  • 举报
回复
ExitWindowsEx(EWX_SHUTDOWN and EWX_POWEROFF,1)
这样可以实现强制关机,但在2000下是不行的,具体的使用方法你可以打入函数后使用帮助看看!!!!
Hermit 2002-11-27
  • 打赏
  • 举报
回复
ExitWindowsEx(EWX_SHUTDOWN,0)

98下试过,XP应该也行吧。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧