通过服务更改墙纸的问题

问题描述 投票:0回答:1

我有一个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。我已使用带有--noconsole标志的pyinstaller将其转换为可执行文件。

接下来,我有一个服务,检查该可执行文件是否未运行,然后启动它...

现在问题是可执行文件成功启动,在任务管理器中报告,但是墙纸未更改,并且res的值为0。我仔细检查了一下,我很确定图像在指定的路径中。此外,如果通过双击执行该可执行文件,则可以完美运行。

我知道该服务无法执行具有某种GUI的程序,但这就是为什么我禁用了可执行程序的控制台...如何运作?

python service
1个回答
0
投票

首先,您应授予程序管理员特权。而且有效。

import ctypes
import time
import sys


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


if is_admin():
    while True:
        path = "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)
© www.soinside.com 2019 - 2024. All rights reserved.