как-то извращено получается... в msdn'e нарыл след. что если передать SPI_GETSCREENSAVERRUNNING в SystemParametersInfo то оно возвращает в переменую тру или фалс если запущен или нет... но почему-то в переменую всегда фалс заносится...
kero SPI_GETSCREENSAVERRUNNING - это новый флаг, который доступен с Win98 и должен давать авторитетный ответ на вопрос топика. Спасибо, конечно, но что это?
Quantum >SPI_GETSCREENSAVERRUNNING - [...] должен давать авторитетный ответ на вопрос топика Так дает или только должен давать ? Как насчет рабочего примера для XP ? valix7 Неавторитетный, зато рабочий: FindWindow ("WindowsScreenSaverClass"|"D3DSaverWndClass",0) в цикле, что бы там о FindWindow ни говорилось в Q126627.
кому интересно, вот мое решение проблемы: Код (Text): int isScrSvrRuning(){ HANDLE h; PROCESSENTRY32 pe; long fpid; char buff[256]; HKEY hkey; long i; long j; char *p_ss; j = 256; RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, KEY_QUERY_VALUE, &hkey); RegQueryValueEx(hkey, "SCRNSAVE.EXE", 0, (LPDWORD)&i, (BYTE*)buff, (LPDWORD)&j); RegCloseKey(hkey); p_ss = extractfilename(buff); h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); GetWindowThreadProcessId(GetForegroundWindow(), (LPDWORD)&fpid); Process32First(h, &pe); while(1){ if(pe.th32ProcessID==fpid && !stricmp(pe.szExeFile, p_ss)){CloseHandle(h);return 1;} if(!Process32Next(h, &pe))break; } CloseHandle(h); return 0; } char *extractfilename(char *buff){ int i; for(i = strlen(buff); i >= 0; i--) if(buff[i] == '\\')return buff+i+1; return 0; }
Ну да, это способ №1 из Q126627/"MORE INFORMATION", рекомендованнный MS для WINDOWS NT, где нет SPI_GETSCREENSAVERRUNNING...