读书人

关于重启机程序的有关问题

发布时间: 2012-04-02 19:58:59 作者: rapoo

关于重启机程序的问题
我写了一个重启机的程序,为什么直接运行就可以重启,可是用其他程序的调用这个重启机的程序就没反应,这怎么回事的谢谢。

[解决办法]
代码呢, 怎么调用的?
[解决办法]
判断版本, NT下需要先提升权限
OSVERSIONINFO ovi;
ovi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if(GetVersionEx(&ovi))
{
if(ovi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
{
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, &tkp, 0, NULL, 0);
}
}
}
unsigned int m = EWX_REBOOT;
ExitWindowsEx(m,0);

[解决办法]
这段代码放到WIN32平台下就不好用
===============================

printf之类的函数在控制平台下才可以啊
[解决办法]
权限问题,普通USER权限是不可以的.你可以直接调用xp的里面的shutdown.exe来实现就ok了.
[解决办法]
关机发送WM_QUERYENDSESSION消息,如果拦截了,会导致不能关机。
有个网络控件有这个问题,忘记是哪个了。
[解决办法]
看看MSDN的介绍:
The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls the ExitWindows function. If any application returns zero, the session is not ended. The system stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.

读书人网 >C++ Builder

热点推荐