首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关机函数如何不起作用了?

2012-04-01 
关机函数怎么不起作用了??是这样的我写了个小程序 前面执行完后 调用 shudown()函数只是前面的 命令都成

关机函数怎么不起作用了??
是这样的 我写了个小程序 前面执行完后 调用 shudown();函数 只是前面的 命令都成功执行了。就是不关机 设置重启也是一样 没反应 .
然后我用了最简单的方法 winexec("shutdown -s -t 0 -f",0); 但还是不起作用 前面的语句都执行了 就到这里。。
我猜想 可能是不是 我前面调用的什么函数 跟关机函数有冲突 ,要不 我用关机命令和关机函数都不能起作用呢?我的猜想。

我单独 编译

main()
{
shutdown()
{
......
}
}

类似的代码 就能关机 重启 直接 运行winexec("shutdown -s -t 0 -f",0); 也能达到效果 。弹就是加入到我的代码中 不起作用了。。

郁闷。。
前面的代码 主要用的函数 就这些:hDevice=CreateFile("\\\\.\\PHYSICALDRIVE0",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
DeviceIoControl(hDevice, FSCTL_LOCK_VOLUME, NULL,0,NULL,0,&dwBytesReturned,NULL);


WriteFile(hDevice,pMBR,sizeof(pMBR),&dwBytesWritten,NULL);


DeviceIoControl(hDevice, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL);
CloseHandle(hDevice);

ExitProcess(-1);
return 0;


主要的就这些函数

高人们帮帮我吧 看看怎么回事。。怎么关机 重启不能用呢。。 郁闷 。。。


[解决办法]
给你一个关机代码

C/C++ code
//因为2000属于多用户操作系统,要想关机就要获得权限。      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);     //开始关机
[解决办法]
先施放资源,然后关试试
[解决办法]
哈哈,解决了就好。

热点排行