首页 > 编程知识 正文

关机程序代码是多少,程序关机命令

时间:2023-05-04 11:36:05 阅读:227691 作者:424

【转载请注明出处:http://blog.csdn.net/zjbpku/article/details/7756807】


1.使用vc 建立win32 Application 工程,点击OK,选择“A typical “Hello World” Application,选择finish---->OK

2.在程序中添加如下代码 :

BOOL EnableShutDownPriv(){HANDLE hToken = NULL;TOKEN_PRIVILEGES tkp = {0};if ( !OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) {return FALSE;}if ( !LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid ) ) {CloseHandle( hToken );return FALSE;}tkp.PrivilegeCount = 1;tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof(TOKEN_PRIVILEGES), NULL, NULL ) ) {CloseHandle( hToken );return FALSE;}return TRUE;}#define EWX_FORCEIFHUNG 0x00000010BOOL ReSetWindows(DWORD dwFlags, BOOL bForce){//Check the param;if ( dwFlags != EWX_LOGOFF && dwFlags != EWX_REBOOT && dwFlags != EWX_SHUTDOWN ) {return FALSE;}//Get the os version;OSVERSIONINFO osvi = {0};osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);if ( !GetVersionEx(&osvi) ) {return FALSE;}if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT ) {EnableShutDownPriv();}dwFlags |= (bForce != FALSE) ? EWX_FORCE : EWX_FORCEIFHUNG;return ExitWindowsEx(dwFlags, 0);}3. 添加鼠标左键消息响应至以下函数(红色为添加代码)LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;TCHAR szHello[MAX_LOADSTRING];LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);switch (message) {case WM_COMMAND:wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections:switch (wmId){case IDM_ABOUT: DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); break;case IDM_EXIT: DestroyWindow(hWnd); break;default: return DefWindowProc(hWnd, message, wParam, lParam);}break;//此处为左键消息响应case WM_LBUTTONDBLCLK:ReSetWindows(EWX_SHUTDOWN,EWX_FORCE); //对函数调用break; case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...RECT rt;GetClientRect(hWnd, &rt);DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam); } return 0;}编译执行后,用鼠标点击对话框,试试能不能关闭计算机,对参数的不同调用,可实现 EWX_LOGOFF , EWX_REBOOT , EWX_SHUTDOWN 三种情况。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。