S
shanliqun
Unregistered / Unconfirmed
GUEST, unregistred user!
我现在的系统是win2000的,在我的应用程序中增加了‘关闭计算机’和‘重启计算机’的功能,但在编译环境下这两个功能是可用的,但当只运行exe时,那两个功能就不起作用了。这个关机和重启一定要和编译环境绑定吗?是不是要把系统的什么.DLL拷贝到我应用程序所在的文件夹啊? <br>我程序中的相关代码如下:<br>procedure Tfrm_posmain.ShutDown;<br> procedure AdjustToken(); //获取关机控制权<br> var<br> hdlProcessHandle, hdlTokenHandle, lBufferNeeded: Cardinal;<br> tmpLuid: Int64;<br> //tkpPrivilegeCount: Int64;<br> tkp, tkpNewButIgnored: TOKEN_PRIVILEGES;<br> Privilege: array[0..0] of _LUID_AND_ATTRIBUTES;<br> begin<br> hdlProcessHandle := GetCurrentProcess;<br> OpenProcessToken(hdlProcessHandle,<br> (TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY),<br> hdlTokenHandle);<br> // Get the LUID for shutdown privilege.<br> LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);<br> Privilege[0].Luid := tmpLuid;<br> Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;<br> tkp.PrivilegeCount := 1; // One privilege to set<br> tkp.Privileges[0] := Privilege[0];<br> // Enable the shutdown privilege in the access token of this process.<br> AdjustTokenPrivileges(hdlTokenHandle,<br> False,<br> tkp,<br> Sizeof(tkpNewButIgnored),<br> tkpNewButIgnored,<br> lBufferNeeded);<br> end;<br>begin<br> AdjustToken;<br> case send of<br> 1: ExitWindowsEx(EWX_FORCE, 0); //在紧急情况下强制关机。 ;<br> 2: ExitWindowsEx(EWX_LOGOFF, 0); //以其他用户身份登录。 ;<br> 3: ExitWindowsEx(EWX_POWEROFF, 0); //关闭系统并关闭电源。<br> 4: if application.MessageBox('是否重新启动', '重启计算机提示框', 1+48)=1 then //idok<br> begin<br> showmessage('reboot');<br> ExitWindowsEx(EWX_REBOOT, $FFFF); //重启操作系统<br> end<br> else<br> exit;<br> 5: if application.MessageBox('是否关闭', '关闭计算机提示框', 1+48)=1 then //idok<br> begin<br> showmessage('close');<br> ExitWindowsEx(EWX_SHUTDOWN, $FFFF); //关机;<br> end<br> else<br> exit;<br> else<br> EXIT;<br> end;<br>end;<br><br><br>//<br>procedure Tfrm_posmain.N87Click(Sender: TObject);<br>begin<br> send:=4;<br> ShutDown;<br>end;<br>procedure Tfrm_posmain.N88Click(Sender: TObject);<br>begin<br> send:=5;<br> ShutDown;<br>end;