JAVA调用JNA修改桌面壁纸

一时兴起想用java定时修改桌面,折腾一番,终于成功。

其实无非是java调用jna,实现对dll的调用,控制修改了桌面,纯属娱乐,不喜勿喷。

完美世界壁纸

代码在此:

import java.util.Timer;
import java.util.TimerTask;

import com.sun.jna.Native;
import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinReg;
import com.sun.jna.win32.StdCallLibrary;

public class EditDesktop {


    public static void main(String[] args) {

    final Timer timer = new Timer();
        TimerTask task = new TimerTask() {
            private int count=0;
            private int tot=0;
            String img="E:/AAAprojectDoc/img/"; 
            @Override
            public void run() {
                this.count++;
                this.tot++;
                img="E:/AAAprojectDoc/img/"+count+".jpg";

                change(img);

                if (count ==11)count = 0;                                           
                if(tot==12){
                    System.out.println("定时器停止了,img="+img);
                    timer.cancel();// 停止定时器
                }
            }
        };
        timer.schedule(task, 0, 3000);// 1秒一次       
    }



    private interface MyUser32 extends StdCallLibrary {

        MyUser32 INSTANCE = (MyUser32) Native.loadLibrary("user32", MyUser32.class);
        boolean SystemParametersInfoA(int uiAction, int uiParam, String fnm, int fWinIni);
    }


    public static  void change(String img){

            Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER,   
                    "Control Panel\\Desktop", "Wallpaper", img);  
            //WallpaperStyle = 10 (Fill), 6 (Fit), 2 (Stretch), 0 (Tile), 0 (Center)  
            //For windows XP, change to 0  
            Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER,   
                    "Control Panel\\Desktop", "WallpaperStyle", "10"); //fill  
            Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER,   
                    "Control Panel\\Desktop", "TileWallpaper", "0");   // no tiling

            // refresh the desktop using User32.SystemParametersInfo(), so avoiding an OS reboot  
            int SPI_SETDESKWALLPAPER = 0x14;  
            int SPIF_UPDATEINIFILE = 0x01;  
            int SPIF_SENDWININICHANGE = 0x02;  

           // User32.System
            boolean result = MyUser32.INSTANCE.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0,   
                    img, SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );  
     }




}

下了3个jart包,4.2.1版成功可用。
所需jar包下载:http://so.csdn.net/so/search/s.do?q=JNA&t=doc

参考资料:用Java更换Windows桌面壁纸http://xpenxpen.iteye.com/blog/2178860

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值