win98,win2000,winxp关机分别要调用什么api函数?请指教,谢谢!
解决方案 »
- 那位仁兄帮帮忙:error RC2135 : file not found: Splsh16.bmp
- 各位高手 有没谁知道链表名有什么作用
- 如何为一个程序加入帮助文件?
- 为何Class View中无法看见C*APP类?急!急!急!
- 菜鸟提问:关于switch的问题
- 这样怎样取数据??在线等..
- 我编写了一个ATL控件,在win98,win2000下可以注册,但在winXP下注册时提示“LoadLibrary 失败,找不到指定模块”
- 高分求助!如何利用NetBIOS名获得对方的Mac地址?
- 一个巨蠢的问题,在字符串中如何保留"号
- 对话条创建时出错!请帮帮忙。
- 在vc中如何使用ado连接foxpro 数据库?
- 一个简单的问题
但在win2000或winxp下要先取得权限. 在写这个程序之前,我曾看到过别人用SDK写的关机程序。不过他的程序只在WIN9X下有效,在2000中就不行了,不能关机只能注销。因为2000属于多用户操作系统,要想关机就要获得权限。在查阅了MSDN后整理出了这个关机程序。 TOKEN_PRIVILEGES tkp;
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
MessageBox("OpenProcessToken failed!");
} LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限
if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges enable failed!");
} fResult =InitiateSystemShutdown(
NULL, // 要关的计算机用户名,可在局域网网中关掉对方的机器,NULL表示关本机
"由于系统不稳定,WINDOWS将在上面的时间内关机,请做好保存工作!", // 显示的消息
10, // 关机所需的时间
TRUE,
TRUE); //设为TRUE为重起,设为FALSE为关机 if(!fResult)
{
MessageBox("InitiateSystemShutdown failed.");
} tkp.Privileges[0].Attributes = 0;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges disable failed.");
} ExitWindowsEx(EWX_SHUTDOWN,0); //开始关机
强烈要求再加点分.