2012年のユーロを見越して、Donbass Arenaの
ウェブカメラからの画像をデスクトップにインストールするプログラムを作成することにしました。
アルゴリズムは非常に単純で、わずかなポイントで構成されています。
- Windowsが現在のデスクトップイメージを保存するファイルへのパスを取得します。
- サイトから画像をダウンロードし、パスの最初のステップで受信したとおりに保存します。
- デスクトップイメージを更新するコマンドを提供します。
「HKEY_CURRENT_USER \ Control Panel \ Desktop」キーの「Wallpaper」パラメータを読み取ることにより、現在のデスクトップイメージのファイルへのパスをレジストリから取得できます。
String value = ""; try { RegistryKey hkey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop", false); value = (String) hkey.GetValue("Wallpaper"); hkey.Close(); } catch (Exception) { value = ""; }
値には、「C:\ Users \%username%\ AppData \ Roaming \ Microsoft \ Windows \ Themes \ TranscodedWallpaper.jpg」のようなものが格納されます
C#を使用する2番目のステップは、2行で実装できます。
WebClient client = new WebClient(); client.DownloadFile(fromUrl, pathToFile);
fromUrlのファイルは、指定されたpathToFileの場所にダウンロードされ、以前の場所があれば、それを問題なく置き換えます。
3番目のステップでは、少し手を加える必要がありました。 WinAPIでデスクトップイメージを更新するコマンドは次のようになります。
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NULL, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
しかし、私は.NETツールを使用してこのコマンドを呼び出す方法を知りませんでしたが、Alexander Klimovの本ではかなり長い間、これが可能であることがわかりました。
pinvoke.netのウェブサイトは私の助けになり、この簡単なコードを書くのを助けました:
public static void updateWallpaper() { SystemParametersInfo(SPI.SETDESKWALLPAPER, 0, null, SPIF.SENDCHANGE | SPIF.UPDATEINIFILE); } [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool SystemParametersInfo(SPI uiAction, uint uiParam, String pvParam, SPIF fWinIni); private enum SPI { SETDESKWALLPAPER = 0x0014 } private enum SPIF { UPDATEINIFILE = 0x01, SENDCHANGE = 0x02 }
残りの時間はインターフェースに費やされました:
まとめ
プログラムはトレイにハングアップし、
容赦なくトラフィックを消費し、デスクトップを更新します。
ソースは
ここからダウンロードでき、プログラム自体は
ここからダウンロードでき
ます 。
動作させるには、.NET Framework 2.0以降が必要です。
ご清聴ありがとうございました!