Как определить, работает ли хранитель экрана в программе Qt (C / C ++)? (MS Windows)

0

Я попытался получить вывод списка задач, когда заставка запускается, чтобы проверить, работает ли какой-либо конкретный процесс, когда экранная заставка активна, но я не смог получить вывод списка задач в моей программе.

Я попытался использовать Qt QProcess и системную функцию C, но запуск списка задач не удался в обоих из них (без вывода). Я не знаю причины!

Даже запуск чего-то вроде системы ("tasklist> out.txt") создает пустой файл out.txt!

В любом случае, я ищу простейший способ узнать, работает ли экранная заставка в программе C/C++/Qt.

Я использую Windows XP sp3.

Теги:
qt
command-line

1 ответ

0

Я нашел ответ сам!

Во-первых, 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.

  • 0
    Вам, вероятно, следует использовать SPI_GETSCREENSAVERRUNNING вместо 114 а также передать адрес BOOL , который является typedef для int , а не bool который обычно не имеет тот же размер.
  • 0
    Я использовал 114, потому что с SPI_GETSCREENSAVERRUNNING я получаю 'необъявленную' ошибку, хотя я тоже включил 'winuser.h'. Я использую MinGW для компиляции.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню