Я попытался получить вывод списка задач, когда заставка запускается, чтобы проверить, работает ли какой-либо конкретный процесс, когда экранная заставка активна, но я не смог получить вывод списка задач в моей программе.
Я попытался использовать Qt QProcess и системную функцию C, но запуск списка задач не удался в обоих из них (без вывода). Я не знаю причины!
Даже запуск чего-то вроде системы ("tasklist> out.txt") создает пустой файл out.txt!
В любом случае, я ищу простейший способ узнать, работает ли экранная заставка в программе C/C++/Qt.
Я использую Windows XP sp3.
Я нашел ответ сам!
Во-первых, tasklist.exe не работает, потому что я вызвал свою программу из командной строки Qt, а командная строка Qt задает собственную переменную среды PATH. tasklist.exe нужна dll с именем framedyn.dll, которая не находится в командной строке Qt PATH (я нашел ее в C:\WINDOWS\system32\wbem).
Во-вторых, чтобы узнать, работает ли заставка, сначала я использовал поиск.scr в выводе списка задач, но, наконец, нашел (кто-то предложил), казалось бы, намного лучший способ:
bool bSaver;
SystemParametersInfo(114,0,&bSaver,0);
if(bSaver) QMessageBox::information(0, "hi", "screen saver is running");
else QMessageBox::information(0, "hi", "screen saver is not running");
Примечание: для использования этого кода вам нужно добавить #include <windows.h>
в исходный файл Qt.
SPI_GETSCREENSAVERRUNNING
вместо 114
а также передать адрес BOOL
, который является typedef для int
, а не bool
который обычно не имеет тот же размер.