我调用ExitWindowsEX()时。
只有注销能正常工作。重启和关机都不行。我的操作系统是2000。
只有注销能正常工作。重启和关机都不行。我的操作系统是2000。
解决方案 »
- 怎么要编写一个软件的升级包
- udp怎么进行纠错或抗丢包呢?有没有效率比较高的算法阿?
- 两台机器的数据库间互导数据
- 中文版改不成了英文版啊,我是直接改的rc文件
- 请教atl做的activex中使用其它activex控件的问题
- 能否实现CFileDialog操作后的路径还原(100分奉送)
- 为什么MDI程序开始运行,便打开一个视图窗口
- 编译时出现c:\program files\microsoft visual studio\vc98\include\winsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
- 自定义listctrl控件最小化后再还原,上面绘制的内容消失.
- windows编程机制主要有哪些,是不是只要熟悉API就可以了?
- 关于按纽
- 请教这句SQL怎么写?
//EWX_LOGOFF,EWX_POWEROFF,EWX_REBOOT,EWX_SHUTDOWN
//EWX_FORCE,EWX_FORCEIFHUNG
BOOL ShutDownWindows(UINT t)
{
OSVERSIONINFO osv; //定义一个操作系统信息的结构体
osv.dwOSVersionInfoSize=sizeof OSVERSIONINFO;
GetVersionEx(&osv); //查询当前操作系统
if(osv.dwPlatformId==VER_PLATFORM_WIN32_NT) //判断是否是2000/NT
{
//下面为向操作系统获取权限操作
HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
hProcess=GetCurrentProcess();
//下面为打开当前进程对话
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL);
ExitWindowsEx(t,0);
}
else
{
ExitWindowsEx(t,0);//调用ExitWindowsEx关闭机器。
PostQuitMessage(0);
}
return true;
}
然后把这个函数拷贝到你的程序里...
或者就把下面拷到你要关机的地方
//====================================
UINT t=EWX_SHUTDOWN|EWX_FORCE;
OSVERSIONINFO osv; //定义一个操作系统信息的结构体
osv.dwOSVersionInfoSize=sizeof OSVERSIONINFO;
GetVersionEx(&osv); //查询当前操作系统
if(osv.dwPlatformId==VER_PLATFORM_WIN32_NT) //判断是否是2000/NT
{
//下面为向操作系统获取权限操作
HANDLE hProcess,hToken;
TOKEN_PRIVILEGES Privileges;
LUID luid;
hProcess=GetCurrentProcess();
//下面为打开当前进程对话
OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken);
Privileges.PrivilegeCount=1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&luid);
Privileges.Privileges[0].Luid=luid;
Privileges.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&Privileges,NULL,NULL,NULL);
ExitWindowsEx(t,0);
}
else
{
ExitWindowsEx(t,0);//调用ExitWindowsEx关闭机器。
PostQuitMessage(0);
}
//=====================================================================