日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

java一键换壁纸_Java 版下载必应每日壁纸并自动设置 Windows 系统桌面(改编自 C# 版)...

發布時間:2023/12/14 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java一键换壁纸_Java 版下载必应每日壁纸并自动设置 Windows 系统桌面(改编自 C# 版)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哈哈,好久沒有寫博客了,已經荒廢了,前幾天在某 IT 網站看到一個用 C# 寫的設置必應每日壁紙為 Windows 系統桌面,看了看源碼是通過調用 User32.dll 進行設置的,剛剛最近做的項目更調用 dll 有關,感覺用 Java 也能做出來,果斷用 Java 也寫了一個,不過只實現了簡單的下載保存圖片并設置圖片為桌面壁紙的功能,沒有做到和 C# 版的那么強大,比較雞肋,僅用于本人無聊時練練手,分享出來,有興趣的可以到 GitHub 查看源碼。

說明

參數 format 可選值:xml / js (json)

一、C# 原版(可以選擇尺寸和樣式)

二、本人改編的 Java 版(默認 1080P 及填充)

1. 開始歡迎界面:

2. 主界面,自動下載并設置壁紙:

2017-09-07 今日白露

2017-09-04

2017-09-03

3. Alt + F12 打開/關閉信息控制臺:

2017-09-04

2017-09-03

4. Ctrl + W 關閉程序

5. 特別說明:

雖然程序使用 Java 開發的,理論上也可以在 Mac 和 Linux 上運行,但是由于需要調用系統層的東西,在 Mac 及 Linux (在網上查到 Linux 可以通過執行終端命令來設置壁紙,未在程序中實現)運行并不能設置壁紙,只能夠下載并保存必應每日壁紙圖片:

6. 2018-01-26 更新:添加快捷方式參數

通過在快捷方式后添加 -hide 或 -h 打開程序提示設置壁紙完成后直接關閉程序,不顯示主程序窗口:

三、原 C# 版核心代碼:

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Imaging;

using System.IO;

using System.Linq;

using System.Net;

using System.Runtime.InteropServices;

using System.Text;

using System.Text.RegularExpressions;

using System.Threading.Tasks;

namespace BingWallpaperTest

{

class Program

{

static void Main(string[] args)

{

setWallpaper();

}

/**

* 獲取壁紙網絡地址

*/

public static string getURL()

{

string InfoUrl = "http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(InfoUrl);

request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8";

string xmlDoc;

// 使用using自動注銷HttpWebResponse

using (HttpWebResponse webResponse = (HttpWebResponse)request.GetResponse())

{

Stream stream = webResponse.GetResponseStream();

using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))

{

xmlDoc = reader.ReadToEnd();

}

}

// 使用正則表達式解析標簽(字符串),當然你也可以使用XmlDocument類或XDocument類

Regex regex = new Regex("(?.*?)", RegexOptions.IgnoreCase);

MatchCollection collection = regex.Matches(xmlDoc);

// 取得匹配項列表

string ImageUrl = "http://www.bing.com" + collection[0].Groups["MyUrl"].Value;

if (true)

{

ImageUrl = ImageUrl.Replace("1366x768", "1920x1080");

}

return ImageUrl;

}

public static void setWallpaper()

{

string ImageSavePath = @"D:\Program Files\BingWallpaper";

// 設置墻紙

Bitmap bmpWallpaper;

WebRequest webreq = WebRequest.Create(getURL());

// Console.WriteLine(getURL());

// Console.ReadLine();

WebResponse webres = webreq.GetResponse();

using (Stream stream = webres.GetResponseStream())

{

bmpWallpaper = (Bitmap)Image.FromStream(stream);

// stream.Close();

if (!Directory.Exists(ImageSavePath))

{

Directory.CreateDirectory(ImageSavePath);

}

// 設置文件名為例:bing2017816.jpg

bmpWallpaper.Save(ImageSavePath + "\\bing" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + ".jpg", ImageFormat.Jpeg); //圖片保存路徑為相對路徑,保存在程序的目錄下

}

// 保存圖片代碼到此為止,下面就是

string strSavePath = ImageSavePath + "\\bing" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + ".jpg";

setWallpaperApi(strSavePath);

}

// 利用系統的用戶接口設置壁紙

[DllImport("user32.dll", EntryPoint = "SystemParametersInfo")]

public static extern int SystemParametersInfo(

int uAction,

int uParam,

string lpvParam,

int fuWinIni

);

public static void setWallpaperApi(string strSavePath)

{

SystemParametersInfo(20, 1, strSavePath, 1);

}

}

}

四、Java 版核心代碼(dom4j.jar / jna.jar + jna-platform.jar):

本來是想用 jcom.jar 去調用 dll 來設置壁紙的,奈何沒弄出來,反而知道了還有一個叫 jna 的東西...

package cn.zixizixi.wallpaper;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.SocketTimeoutException;

import java.net.URL;

import java.net.URLConnection;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import com.sun.jna.Library;

import com.sun.jna.Native;

import com.sun.jna.Platform;

import com.sun.jna.win32.StdCallLibrary;

import cn.zixizixi.wallpaper.util.ConsoleDialog;

import cn.zixizixi.wallpaper.util.StrUtils;

/**

* 下載并設置必應每日桌面壁紙

* @author Tanken·L

* @version 20170901

*/

public class SetBingImage {

private static boolean debug = true;

/**

* 獲取必應每日壁紙圖片網絡路徑

* @param custom

* @return

*/

public static String getUrl(String custom) {

String infoUrl = "http://cn.bing.com/HPImageArchive.aspx?idx=0&n=1";

URL url = null;

URLConnection urlConn = null;

try {

url = new URL(infoUrl);

urlConn = url.openConnection();

urlConn.setConnectTimeout(3000);

BufferedReader bufRead = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "UTF-8"));

StringBuilder strBud = new StringBuilder();

String line = null;

while ((line = bufRead.readLine()) != null) {

strBud.append(line);

}

Element imgEle = DocumentHelper.parseText(strBud.toString()).getRootElement();

infoUrl = "http://cn.bing.com" + imgEle.element("image").elementText("url");

if (custom != null && custom.trim() != "") {

infoUrl = infoUrl.replace("1366x768", custom);

}

return infoUrl;

} catch (SocketTimeoutException e) {

// "[TOE]請求接口連接超時:" + e.getMessage()

} catch (IOException e) {

// "[IOE]請求接口加載出錯:" + e.getMessage()

} catch (DocumentException e) {

// "[DOE]請求接口解析出錯:" + e.getMessage()

} finally {

url = null;

urlConn = null;

}

return null;

}

/**

* 保存網絡圖片到本地

* @param size

* @return

*/

public static String downloadImage(String imageUrl) {

String fileSepar = StrUtils.F_SEPAR;

String savePath = StrUtils.U_HOME + fileSepar + "Pictures" + fileSepar + "BingWallpaper";

try {

URL url = new URL(imageUrl);

URLConnection urlConn = url.openConnection();

urlConn.setConnectTimeout(5000);

File fileDir = new File(savePath);

if(!fileDir.exists()){

fileDir.mkdirs();

}

InputStream is = urlConn.getInputStream();

byte[] bs = new byte[1024];

int len;

String fileName = imageUrl.substring(imageUrl.indexOf("_ZH-CN") + 6, imageUrl.length());

String filePath = fileDir.getPath() + fileSepar + StrUtils.nowStr("yyyyMMdd_") + fileName;

OutputStream os = new FileOutputStream(filePath);

while ((len = is.read(bs)) != -1) {

os.write(bs, 0, len);

}

os.close();

is.close();

return filePath;

} catch (IOException e) {

// "下載圖片加載出錯:" + e.getMessage();

} finally {

fileSepar = null;

savePath = null;

imageUrl = null;

}

return null;

}

public static boolean setWinWallpaper(String filePath) {

boolean flag = false;

if (StrUtils.isEmpty(filePath)) {

// 圖片路徑為空,無法設置壁紙!

} else {

if (Platform.isWindows()) {

// 調用 User32 設置桌面背景

flag = User32.INSTANCE.SystemParametersInfoA(20, 1, filePath, 1);

} else {

// TODO Other OS 目前僅能設置 Windows 系統的壁紙,其他系統只能下載保存壁紙圖片!

}

}

return flag;

}

public interface CLibrary extends Library {

CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);

void printf(String format, Object... args);

}

public interface User32 extends StdCallLibrary {

User32 INSTANCE = (User32) Native.loadLibrary("User32", User32.class);

/**

* 查詢/設置系統級參數

* @param uAction 要設置的參數:

* 6(設置視窗的大小) / 17(開關屏保程序) / 13, 24(改變桌面圖標水平和垂直間距) / 15(設置屏保等待時間) /

* 20(設置桌面背景墻紙) / 93(開關鼠標軌跡) / 97 (開關Ctrl+Alt+Del窗口)

* @param uParam 參數

* @param lpvParam 參數

* @param fuWinIni

* @return

*/

public boolean SystemParametersInfoA(int uAction, int uParam, String lpvParam, int fuWinIni);

}

}

總結

以上是生活随笔為你收集整理的java一键换壁纸_Java 版下载必应每日壁纸并自动设置 Windows 系统桌面(改编自 C# 版)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。