подскажите причину почему прога обрабатывает WM_QUERYENDSESSION только после повторного запуска приложения ,т.е. со второй попытки . Прога обычное оконное приложение после нажатия ПУСК ->ВЫКЛЮЧЕНИЕ должна отменить выкл и перевести комп. в спящий или ждущий (не важно)режим . обработка сообщения WM_QUERYENDSESSION : Код (Text): LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { ..... switch (message) { case WM_QUERYENDSESSION : ttt = 444; return FALSE; break; ...... } ..... } перереход в ждущий режим: Код (Text): while (GetMessage(&msg, NULL, 0, 0)) { if(ttt == 444) WinExec((LPCSTR)"rundll32.exe Powrprof.dll,SetSuspendState 1",0); Sleep(10); ttt=ttt+1; if(ttt == 445) { ttt=ttt+1; PostQuitMessage(0); } if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } ось win xp sp3
Возможно вопрос с привилегиями (SE_SHUTDOWN_NAME и т.п.) WinExec + rundll32.exe + Powrprof.dll - долго отрабатывает и вообще не правильно так.
можно напрямую вызывать SetSuspendState из Powrprof.dll DWORD SetSuspendState (DWORD). SetSuspendState=(DWORD WINAPI* (DWORD))GetProcedureAddress(LoadLibrary(Powrprof.dll),"SetSuspendState"); SetSuspendState(1);