System Log-Off, Suspend, Reboot, Shutdown 시키기 | |||
| |||
윈도우 NT를 베이스로 하는 2000, XP의 경우는 시스템을 컨트롤 하기 위해서는 권한을 변경하는 과정이 필요합니다. BOOL IsWindowsNT() { OSVERSIONINFO verInfo; verInfo.dwOSVersionInfoSize = sizeof(verInfo); GetVersionEx(&verInfo) ; switch(verInfo.dwPlatformId) { case VER_PLATFORM_WIN32_WINDOWS: return FALSE; case VER_PLATFORM_WIN32_NT: return TRUE; } return FALSE; } BOOL AdjustSystemForShutdown() { if(IsWindowsNT() == FALSE) return FALSE ; HANDLE hTk; TOKEN_PRIVILEGES tp; /* Get a token for this process. */ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hTk)) return FALSE; /* Get the LUID for the shutdown privilege. */ LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tp.Privileges[0].Luid); tkp.PrivilegeCount = 1; /* one privilege to set */ tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; /* Get the shutdown privilege for this process. */ return AdjustTokenPrivileges(hTk, FALSE, &tp, 0, (PTOKEN_PRIVILEGES)NULL, 0); } 이렇게 해서, 권한 변경에 성공하면 ExitWindowsEx, SetSystemPowerState 함수로 자신이 원하는 대로 시스템을 컨트롤 할 수 있습니다. // Windows 2000, XP // Log Off ExitWindowsEx(EWX_LOGOFF|EWX_FORCEIFHUNG , SHTDN_REASON_FLAG_PLANNED ); // Shutdown ExitWindowsEx(EWX_POWEROFF|EWX_FORCEIFHUNG , SHTDN_REASON_FLAG_PLANNED ); // NT // Reboot ExitWindowsEx(EWX_REBOOT|EWX_FORCEIFHUNG,SHTDN_REASON_FLAG_PLANNED ); // Suspend SetSystemPowerState(TRUE, TRUE ); // force suspend // Windows 95, 98, ME // Log Off ExitWindowsEx(EWX_LOGOFF|EWX_FORCE , 0 ); // Shutdown ExitWindowsEx(EWX_SHUTDOWN|EWX_FORCE, 0 ); // Windows 98, Windows ME // Reboot ExitWindowsEx(EWX_REBOOT|EWX_FORCE, 0 ); // Suspend SetSystemPowerState(TRUE, TRUE ); // force suspend Tags: MFC WIN32 윈도우즈 | |||
| |||
| |||
로그인을 하시면 댓글을 등록 할 수 있습니다. |
OTHER POSTS IN THE SAME CATEGORY how to record keyboard & mouse event |