デスクトップ上のドンバスアリーナ



2012年のユーロを見越して、Donbass Arenaのウェブカメラからの画像をデスクトップにインストールするプログラムを作成することにしました。

アルゴリズムは非常に単純で、わずかなポイントで構成されています。
  1. Windowsが現在のデスクトップイメージを保存するファイルへのパスを取得します。
  2. サイトから画像をダウンロードし、パスの最初のステップで受信したとおりに保存します。
  3. デスクトップイメージを更新するコマンドを提供します。


「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以降が必要です。

ご清聴ありがとうございました!

Source: https://habr.com/ru/post/J144137/


All Articles