rundll32.exe сбой при инициализации dll

Тема в разделе "WASM.WIN32", создана пользователем quporos, 3 июн 2010.

  1. quporos

    quporos New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2010
    Сообщения:
    55
    подскажите причину почему прога обрабатывает WM_QUERYENDSESSION только после повторного запуска приложения ,т.е. со второй попытки . Прога обычное оконное приложение после нажатия ПУСК ->ВЫКЛЮЧЕНИЕ должна отменить выкл и перевести комп. в спящий или ждущий (не важно)режим .
    обработка сообщения WM_QUERYENDSESSION :
    Код (Text):
    1.        LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    2. {
    3.        .....
    4.          switch (message)
    5.     {
    6.                    case WM_QUERYENDSESSION :
    7.                           ttt = 444;
    8.                           return FALSE;
    9.                    break;
    10.                   ......
    11.              }
    12.      .....
    13. }
    перереход в ждущий режим:
    Код (Text):
    1. while (GetMessage(&msg, NULL, 0, 0))
    2.     {  
    3.       if(ttt == 444)
    4.            WinExec((LPCSTR)"rundll32.exe Powrprof.dll,SetSuspendState 1",0);
    5.            Sleep(10);
    6.     ttt=ttt+1;
    7.       if(ttt == 445)
    8.         {
    9.            ttt=ttt+1;
    10.            PostQuitMessage(0);
    11.         }
    12.       if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    13.         {
    14.             TranslateMessage(&msg);
    15.             DispatchMessage(&msg);
    16.         }
    17.      }
    ось win xp sp3
     
  2. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Возможно вопрос с привилегиями (SE_SHUTDOWN_NAME и т.п.)
    WinExec + rundll32.exe + Powrprof.dll - долго отрабатывает и вообще не правильно так.
     
  3. quporos

    quporos New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2010
    Сообщения:
    55
    укажите правильное направление ,куда копать
     
  4. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    можно напрямую вызывать SetSuspendState из Powrprof.dll

    DWORD SetSuspendState (DWORD).

    SetSuspendState=(DWORD WINAPI* (DWORD))GetProcedureAddress(LoadLibrary(Powrprof.dll),"SetSuspendState");

    SetSuspendState(1);
     
  5. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    прототип навскидку накидал
     
  6. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    нужно использовать после того как:
    1. Получишь привилегии;
    2. Отменишь выключение.
     
  7. quporos

    quporos New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2010
    Сообщения:
    55
    спасибо за ответы ,бууду пробовать
     
  8. punxer

    punxer Андрей

    Публикаций:
    0
    Регистрация:
    16 окт 2006
    Сообщения:
    1.327
    Адрес:
    Ржев
    отменить выключение можно shutdown -a
     
  9. quporos

    quporos New Member

    Публикаций:
    0
    Регистрация:
    17 янв 2010
    Сообщения:
    55
    проблема решена выше указанным способом #4,#6.
    Уще раз всем спасибо ,темуможно закрывать