Проблема в смене обоев через сервис - PullRequest
0 голосов
/ 19 марта 2020

У меня есть программа python: -

import ctypes
import time

while True:
    path = r"path to image.jpg"
    res = ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 0)
    time.sleep(3)

, которая постоянно меняет текущие обои на рабочий стол на image.jpg. Я преобразовал его в исполняемый файл с помощью pyinstaller с флагом --noconsole.

Далее у меня есть служба, которая проверяет, не запущен ли этот исполняемый файл, а затем запустите его ...

Теперь проблема в том, что исполняемый файл запускается успешно, сообщает в диспетчере задач, но обои не изменяются, а значение res равно 0. Я дважды проверил его, и я почти уверен, что изображение находится по указанному пути. Более того, исполняемый файл отлично работает, если он выполняется двойным щелчком мыши ...

Я знаю, что служба не может выполнить программу, которая имеет своего рода GUI, но именно поэтому я отключил консоль исполняемого файла ... как заставить это работать?

1 Ответ

0 голосов
/ 19 марта 2020

Сначала вы должны предоставить привилегии администратора программы. И это работает.

import ctypes
import time
import sys


def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False


if is_admin():
    while True:
        path = "C:/004.jpg"
        res = ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 0)
        time.sleep(3)
else:
    if sys.version_info[0] == 3:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    else:
        ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
...