2015-10-03 2 views
0

Я пытаюсь установить обои в Windows 7 с помощью Java. Я пробовал использовать код из ответов here и here. Он отлично работает в Windows 8 и 10, но не в 7. Нет ошибок, он просто ничего не делает. Я пробовал устанавливать разные обои 1920x1080 (это разрешение, установленное на панели управления) и различные форматы файлов (png, jpg, bmp) и запуск программы на нескольких разных компьютерах. Код, который у меня есть после строки, которая должна установить обои, работает нормально. Я использую JNA версии 4.2.0 и Java 8 update 60.Установка обоев в Windows с использованием Java

Есть ли способ установить обои в Windows 7 с помощью Java?

EDIT:

Вот мой код:

import java.util.HashMap; 

import com.sun.jna.Native; 
import com.sun.jna.platform.win32.WinDef.UINT_PTR; 
import com.sun.jna.win32.StdCallLibrary; 
import com.sun.jna.win32.W32APIFunctionMapper; 
import com.sun.jna.win32.W32APITypeMapper; 

public class WallpaperChanger { 

    public interface SPI extends StdCallLibrary { 

     long SPI_SETDESKWALLPAPER = 20; 
     long SPIF_UPDATEINIFILE = 0x01; 
     long SPIF_SENDWININICHANGE = 0x02; 

     @SuppressWarnings("serial") 
     SPI INSTANCE = (SPI) Native.loadLibrary("user32", SPI.class, 
       new HashMap<Object, Object>() { 
        { 
         put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE); 
         put(OPTION_FUNCTION_MAPPER, 
           W32APIFunctionMapper.UNICODE); 
        } 
       }); 

     boolean SystemParametersInfo(UINT_PTR uiAction, UINT_PTR uiParam, 
       String pvParam, UINT_PTR fWinIni); 
    } 

    public static void main(String[] args) { 
     System.out.println("changing"); 

     String filename = "C:\\wallpapers\\wallpaper.jpg"; 

     SPI.INSTANCE.SystemParametersInfo(
       new UINT_PTR(SPI.SPI_SETDESKWALLPAPER), new UINT_PTR(0), 
       filename, new UINT_PTR(SPI.SPIF_UPDATEINIFILE 
         | SPI.SPIF_SENDWININICHANGE)); 
     System.out.println("changed"); 
    } 

} 

Под «не работает», я имею в виду, что код работает, но обои не меняется.

+0

Вы должны разместить здесь код, на котором у вас есть вопрос, и, если хотите, более конкретно, чем «он не работает». – hotzst

+0

@hotzst Извините, я знал, что что-то забыл – marti201

+0

Проверьте возвращаемое значение и Native.getLastError(). Windows вполне может сказать вам, что не так. – technomage

ответ

1

Оказывается, Windows 7 не любит устанавливать jpeg-изображения в качестве обоев. Сначала вам нужно преобразовать файл изображения в растровое изображение, а затем установить образ bmp в качестве фона.