2016-06-26 3 views
0

Я пробовал каждый пример на SO и Google, но никто из них не работает. Я не знаю, почему, скрипт заканчивается без ошибок. Но фоновое изображение не меняется. Я поставил абсолютный путь для этого образа, я пробовал jpg,png форматов, в основном я пробовал все, но все примеры закончили без каких-либо ошибок, но фоновое изображение не изменилось. Есть ли для этого рабочий пример? Windows-7 Python 3.4Python 3.4 изменение фонового изображения рабочего стола не работает

Некоторые примеры не работают;

import ctypes 
SPI_SETDESKWALLPAPER = 20 
ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "myimage.jpg" , 0) 
######################################## 

#This example can't find images, but I put absolute path to it. Don't know what's the problem 
import struct 
import ctypes 


SPI_SETDESKWALLPAPER = 20 
WALLPAPER_PATH = 'C:\\your_file_name.jpg' 


def is_64_windows(): 
    """Find out how many bits is OS. """ 
    return struct.calcsize('P') * 8 == 64 


def get_sys_parameters_info(): 
    """Based on if this is 32bit or 64bit returns correct version of SystemParametersInfo function. """ 
    return ctypes.windll.user32.SystemParametersInfoW if is_64_windows() \ 
     else ctypes.windll.user32.SystemParametersInfoA 


def change_wallpaper(): 
    sys_parameters_info = get_sys_parameters_info() 
    r = sys_parameters_info(SPI_SETDESKWALLPAPER, 0, WALLPAPER_PATH, 3) 

    # When the SPI_SETDESKWALLPAPER flag is used, 
    # SystemParametersInfo returns TRUE 
    # unless there is an error (like when the specified file doesn't exist). 
    if not r: 
     print(ctypes.WinError()) 


change_wallpaper() 
+0

Вы можете показать свой код? –

+0

Есть 10 примеров, которые я пробовал, должен ли я положить их все? В самом деле? – GLHF

+0

ну, вы не даете много информации, чтобы получить помощь. Можете ли вы выбрать тот, который, по вашему мнению, должен работать? –

ответ

1

попробуйте использовать следующий код:

import struct 
import ctypes 
import os 

def is_64_windows(): 
    """Find out how many bits is OS. """ 
    return 'PROGRAMFILES(X86)' in os.environ 

def get_sys_parameters_info(): 
    """Based on if this is 32bit or 64bit returns correct version of SystemParametersInfo function. """ 
    return ctypes.windll.user32.SystemParametersInfoW if is_64_windows() \ 
     else ctypes.windll.user32.SystemParametersInfoA 

def change_wallpaper(): 
    sys_parameters_info = get_sys_parameters_info() 
    r = sys_parameters_info(SPI_SETDESKWALLPAPER, 0, WALLPAPER_PATH, 3) 
    if not r:   # When the SPI_SETDESKWALLPAPER flag is used, SystemParametersInfo returns TRUE unless there is an error (like when the specified file doesn't exist). 
     print(ctypes.WinError()) 

SPI_SETDESKWALLPAPER = 20 
WALLPAPER_PATH = 'C:\\your_file_name.jpg' 
change_wallpaper() 

Я думаю, ваша проблема в том, что у вас есть 64 окна, но 32 питона, а, то ваша is_64_windows() функция возвращает False, но это на самом деле True, 'PROGRAMFILES(X86)' in os.environ должен работать.

+0

Ничего себе. Это действительно работает. Многие вау. Хотелось бы, чтобы я мог возвыситься не один раз. – GLHF

Смежные вопросы