определить запущен ли скринсейвер?

Тема в разделе "WASM.WIN32", создана пользователем valix7, 26 ноя 2006.

  1. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    Привет!
    Собственно сабж... есть-ли какие-нибудь API? Заранее спасибо!
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Q126627: в "MORE INFORMATION" описано решение.
     
  3. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    как-то извращено получается... в msdn'e нарыл след. что если передать SPI_GETSCREENSAVERRUNNING в SystemParametersInfo то оно возвращает в переменую тру или фалс если запущен или нет... но почему-то в переменую всегда фалс заносится...
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    valix7
    А как Вы запускаете тестовое приложение при запущенном скринсейвере?
     
  5. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
  6. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kero
    SPI_GETSCREENSAVERRUNNING - это новый флаг, который доступен с Win98 и должен давать авторитетный ответ на вопрос топика.

    Спасибо, конечно, но что это? :)
     
  7. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    >SPI_GETSCREENSAVERRUNNING

    Ай!
     
  8. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    приложение запущено уже с запуском системы..
     
  9. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Quantum
    >SPI_GETSCREENSAVERRUNNING - [...] должен давать авторитетный ответ на вопрос топика

    Так дает или только должен давать ? Как насчет рабочего примера для XP ?

    valix7

    Неавторитетный, зато рабочий: FindWindow ("WindowsScreenSaverClass"|"D3DSaverWndClass",0) в цикле,

    что бы там о FindWindow ни говорилось в Q126627.
     
  10. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    кому интересно, вот мое решение проблемы:

    Код (Text):
    1. int isScrSvrRuning(){
    2. HANDLE h;
    3. PROCESSENTRY32 pe;
    4. long fpid;
    5. char buff[256];
    6. HKEY hkey;
    7. long i;
    8. long j;
    9. char *p_ss;
    10.  
    11. j = 256;
    12.  
    13. RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, KEY_QUERY_VALUE, &hkey);
    14. RegQueryValueEx(hkey, "SCRNSAVE.EXE", 0, (LPDWORD)&i, (BYTE*)buff, (LPDWORD)&j);
    15. RegCloseKey(hkey);
    16. p_ss = extractfilename(buff);
    17.  
    18. h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    19.  GetWindowThreadProcessId(GetForegroundWindow(), (LPDWORD)&fpid);
    20.  
    21. Process32First(h, &pe);
    22. while(1){
    23.      
    24.     if(pe.th32ProcessID==fpid && !stricmp(pe.szExeFile, p_ss)){CloseHandle(h);return 1;}
    25.     if(!Process32Next(h, &pe))break;
    26. }
    27. CloseHandle(h);
    28.     return 0;
    29. }
    30.  
    31.  
    32. char *extractfilename(char *buff){
    33. int i;
    34.    
    35. for(i = strlen(buff); i >= 0; i--)
    36.     if(buff[i] == '\\')return buff+i+1;
    37.    
    38.     return 0;
    39. }
     
  11. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    valix7
    жжешь!!!
     
  12. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Ну да, это способ №1 из Q126627/"MORE INFORMATION", рекомендованнный MS для WINDOWS NT, где нет SPI_GETSCREENSAVERRUNNING...
     
  13. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
  14. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    в каком смысле? :))
     
  15. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    да код просто понравился )
    а какой второй способ?
     
  16. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    а второго способа вроде нет )