2

私がやろうとしているのは、Windows のデスクトップの壁紙を変更することです。そのために、次のコードを使用します。

import ctypes
import Image

pathToBmp = "PATH TO BMP FILE"
SPI_SETDESKWALLPAPER = 20  
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, pathToBmp , 0) 

これは.pyファイルを実行すると機能し、py2exeを使用して変換して現在のユーザーでexeを実行すると機能しますが、exeをSYSTEMとして実行すると、現在のユーザーの背景は変わりません。

もちろん、これは当然のことでした。しかし、私はそれを解決する方法がわかりません。

ところで、ソリューションのいずれかが現在のユーザーの背景またはすべてのユーザーの背景を変更するかどうかは問題ではありません。

お時間をいただきありがとうございます。

4

1 に答える 1

4

次のレジストリに値キーを作成してみてはどうでしょうか。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

これにより、ユーザーがログインするたびに背景が変更されます。

SetDesktopBackground.py試してみるには、次のスクリプトを作成し、好きな場所に名前を付けます。

#!python

from ctypes import *
from os import path

SPI_SETDESKWALLPAPER = 0x14
SPIF_UPDATEINIFILE   = 0x1

lpszImage = path.join(path.dirname(path.realpath(__file__)), 'your_image.jpg')

SystemParametersInfo = windll.user32.SystemParametersInfoA

SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, lpszImage, SPIF_UPDATEINIFILE)

your_image.jpg画像を同じディレクトリに置くのを忘れないでください。次に、レジストリ エディターを開きます。

Start > Search > type regedit.exe

次に、パスに移動します。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

右クリックしNew > String Valueて、この値に好きな名前を選択して入力します。

この新しい値を右クリックして を選択Modifyし、Data Valueフィールドに次のように記述します。

"C:\Python26\pythonw.exe" "C:\Path\To\SetDesktopBackground.py"

テストするには、ログアウトしてから再度ログインします。このユーザーがログインするたびに背景が変わるはずです。

これは手動で行う方法でした。アプリケーションで_winregを使用して、インストール中に値を作成できます。

#!python

from _winreg import *
from sys import executable
from os import path

subkey  = 'Software\\Microsoft\\Windows\\CurrentVersion\\Run'
script  = 'C:\\Path\\To\\SetDesktopBackground.py'
pythonw = path.join(path.dirname(executable), 'pythonw.exe')

hKey = OpenKey(HKEY_CURRENT_USER, subkey, 0, KEY_SET_VALUE)

SetValueEx(hKey, 'MyApp', 0, REG_SZ, '"{0}" "{1}"'.format(pythonw, script))

CloseKey(hKey)
于 2013-01-21T06:26:24.183 に答える