KADABRA
Великий покусатель | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Могу вам сказать, что на NT based виндах комп не выключится: нужно получить соответствующие привилегии. Код: #include <windows.h> #include <tchar.h> int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { if (MessageBox(NULL, "Выключить компьютер?", "Выключить компьютер?", MB_ICONEXCLAMATION | MB_OKCANCEL) == IDOK) { HANDLE hToken; TOKEN_PRIVILEGES* NewState; OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES, &hToken); NewState = (TOKEN_PRIVILEGES*) malloc (sizeof (TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES)); NewState->PrivilegeCount = 1; LookupPrivilegeValue (NULL, SE_SHUTDOWN_NAME, &NewState->Privileges[0].Luid); NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges (hToken, FALSE, NewState, NULL, NULL, NULL); free (NewState); CloseHandle (hToken); ExitWindowsEx(EWX_POWEROFF /*| EWX_FORCE*/, NULL); // Флаг EWX_FORCE запрашивает "брутальный" shutdown, когда все процессы закрываются // принудительно, без рассылки WM_QUERYENDSESSION и WM_ENDSESSION. } return NULL; } |
---------- Это не подпись. |
|