系统关机代码
忙碌时知道休闲的幸福
休闲时却不知忙碌的幸福
BOOL ShutDown() { OSVERSIONINFO osVI; HANDLE hToken=NULL; osVI.dwOSVersionInfoSize=sizeof(OSVERSIONINFO); if(GetVersionEx(&osVI)) { switch(osVI.dwPlatformId) { case VER_PLATFORM_WIN32s: case VER_PLATFORM_WIN32_WINDOWS: ExitWindowsEx(EWX_POWEROFF,0); break; case VER_PLATFORM_WIN32_NT: if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES, &hToken)) { SetPrivilege(hToken,SE_SHUTDOWN_NAME,TRUE); if(!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE ,0)) { AfxMessageBox("关闭电脑失败!"); return FALSE; } } break; default: break; } SendMessage(WM_CLOSE,0,0); return TRUE; } else return FALSE; } BOOL SetPrivilege(HANDLE hToken, LPCTSTR lpszPrivilege, BOOL bEnablePrivilege) { TOKEN_PRIVILEGES tp; LUID luid; CString strErrMsg=""; if ( !LookupPrivilegeValue( NULL, // lookup privilege on local system lpszPrivilege, // privilege to lookup &luid ) ) // receives LUID of privilege { MessageBox("无法查找权限.", "Error", MB_ICONERROR | MB_OK); return FALSE; } tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; if (bEnablePrivilege) tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; else tp.Privileges[0].Attributes = 0; // Enable the privilege or disable all privileges. AdjustTokenPrivileges( hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), (PTOKEN_PRIVILEGES) NULL, (PDWORD) NULL); // Call GetLastError to determine whether the function succeeded. if (GetLastError() != ERROR_SUCCESS) { MessageBox("设置关闭机器权限失败.", "Error", MB_ICONERROR | MB_OK); return FALSE; } return TRUE; }
注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/2098.html
如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:)
我们不要
A B C D E