2017/04/12

Java Setup PC Wallpaper 設定電腦桌布


最近剛好在整理一些漂亮的電腦桌布,

雖然 Windows 有隨機桌布功能,

但只能選一個目錄, 且沒有包含子目錄內的檔案, 也沒有過濾功能,

就乾脆自己寫個 Java Application 透過 JNA (Java Native Code Access) 來滿足以上需求,

點選此處: 下載 JNA Sample Code (裡面包含 jna.jar 檔案)

設定桌布的基本範例, 參考如下 :

 程式碼
import java.util.HashMap;
import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIFunctionMapper;
import com.sun.jna.win32.W32APITypeMapper;

public class HelloTomKuo
{
    // --------------------
    // 以下這段程式碼很重要
    // --------------------
    private interface SPI extends StdCallLibrary
    {
        // from MSDN article
        long SPI_SETDESKWALLPAPER = 20;
        long SPIF_UPDATEINIFILE = 0x01;
        long SPIF_SENDWININICHANGE = 0x02;
        
        SPI INSTANCE = (SPI) Native.loadLibrary( "user32"
                                               , SPI.class
                                               , new HashMap()
                                                 {
                                                     {
                                                         put(OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE);
                                                         put(OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE);
                                                     }
                                                 }
                                               );
        
        boolean SystemParametersInfo(
                  long uiAction
                , int uiParam
                , String pvParam
                , long fWinIni
                );
    }
    // --------------------
    
    public static void main(String[] args)
    {
        // 圖片路徑
        String vFile = "C:\\圖片\\tomkuopic.jpg";
        
        // 設定桌布
        SPI.INSTANCE.SystemParametersInfo (
                  SPI.SPI_SETDESKWALLPAPER
                , 0
                , vFile
                , SPI.SPIF_UPDATEINIFILE | SPI.SPIF_SENDWININICHANGE
                );
    }
}

點選此處: 上述範例, 參考 Stack Overflow 討論 JNA 設定桌布的相關資訊.

可以將這個基本範例改良後, 就可以實現自身的桌布需求了.