みかづきメモ

学習したことのメモとか、日記とか、備忘録。

Wallpaper Engine の仕組みが気になったので

先日、 Twitter してたら面白そうなアプリのツイートが流れてきました。

store.steampowered.com

どういう仕組みで背景に動画を流しているのか気になったので、
とりあえず想像でいろいろ試してみました。

で、いくつか考えたり実際に試したりしてでてきたのが、以下のもの。

  1. 不可視 Window を作成する。
  2. 1 で作成した Window にて、動画などを再生。
  3. 2 の画面をコピーし、デスクトップの Window に対して描画する。

音声などが出ている場合、 1 の Window が出している。

ということで、これを実際にやってみました。
ソースコードこちら

仕組みとしては、WorkerW というプロセスを取得し、そいつに対して描画命令を出しています。
単純に壁紙を変えるだけならば、 SystemParametersInfo を使えばいいみたいですが、
こいつはファイルを入力にとるっぽいので、さすがに違うかなと...。

WorkerW が取得できたら、描画したいウィンドウのクライアント領域をコピーし、
WorkerW に対して送りつけています。

上記ソースの場合は、内部ブラウザーでやっていますが、
それを自由にカスタマイズしたりできるようにしたものじゃないかと考えています。

それでは。

参考: