是否有高手知道,怎么在程序中区别windows的关机和重启!!!! 我想对关机作特殊的处理,在截拦关机消息后,发现关机和重启的消息一样,但我只想关机作特殊的处理,所以不知有那位高手可以指点指点怎么区别windows的关机和重启。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function ShutdownPC(Action : Integer) : boolean; const ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES; SHTDWN_PRIV = 'SeShutdownPrivilege'; PRIV_SIZE = sizeOf(TTokenPrivileges); var uFlags: Cardinal; Len: DWORD; TokenPriv, Dummy: TTokenPrivileges; Token: THandle; Error: integer; begin error := 0; 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; case Action of 0: uFlags := EWX_POWEROFF + EWX_SHUTDOWN; //提示关机 1: uFlags := EWX_POWEROFF + EWX_FORCE; //强制关机 2: uFlags := EWX_ReBoot; //提示重启系统 3: uFlags := EWX_ReBoot + EWX_FORCE; //强制重启系统 end; if Application.MessageBox(PChar('您是否要执行 ''' + inttostr(cbAction.ItemIndex) +':'+ cbAction.Text +''' 操作?'),PChar('提示'),MB_YESNO + MB_ICONQUESTION) = IDYES then ExitWindowsEx(uFlags, 0); Result := (Error = 0); end; WM_ENDSESSION,WM_QUERYSESSION消息.不过好象确实是一样的你就把她理解为重启也要经历关机过程吧不知道你这样区分用意何在? 循环读取txt 不能在窗体的oncreate中设置窗体的clientwidth、clientheight? 注册热键问题 请高手指教,如何循环赋值:edit[n].text:=str[m]; 为什么会could not obtain ole control window handle 怎样使窗体一直保持透明~~~~ 调用动态库函数的问题 内嵌汇编编译问题Inline assembler syntax error 温州的delphi高手请进 如何编写一个全屏幕的程序,就像程序员大本营? 跪求 发送EMAIL 的原码或例子,谢谢!!! windows的进程管理
const
ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
SHTDWN_PRIV = 'SeShutdownPrivilege';
PRIV_SIZE = sizeOf(TTokenPrivileges);
var
uFlags: Cardinal;
Len: DWORD;
TokenPriv, Dummy: TTokenPrivileges;
Token: THandle;
Error: integer;
begin
error := 0;
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;
case Action of
0: uFlags := EWX_POWEROFF + EWX_SHUTDOWN; //提示关机
1: uFlags := EWX_POWEROFF + EWX_FORCE; //强制关机
2: uFlags := EWX_ReBoot; //提示重启系统
3: uFlags := EWX_ReBoot + EWX_FORCE; //强制重启系统
end;
if Application.MessageBox(PChar('您是否要执行 ''' + inttostr(cbAction.ItemIndex) +':'+ cbAction.Text +''' 操作?'),PChar('提示'),MB_YESNO + MB_ICONQUESTION) = IDYES then
ExitWindowsEx(uFlags, 0);
Result := (Error = 0);
end;
不过好象确实是一样的
你就把她理解为重启也要经历关机过程吧
不知道你这样区分用意何在?