デスクトップのアイコンが落下するジョークソフトです。
ダウンロード後 GravityDesktop2.zip を展開し GravityDesktop.exe を実行するとデスクトップのアイコンが落下します。
- 実行するとデスクトップのアイコンが落下します
- 右クリックでアイコンをつまむことができます
- 左クリックで選択中の全てのアイコンを寄せ集めることができます
- 1 キーを押しながらドラッグで重力を操作できます
- 2 キーを押すと無重力状態になります
- 3 キーを押すと全てのアイコンがマウスに寄ります
- 4 キーを押すと初期位置に移動します
- Esc キーで終了します
Git、CMake、Visual Studioが必要になります。 これらがインストールされていない場合は事前にインストールしておいてください。
コマンドプロンプトを立ち上げ、任意の場所で以下のコマンドを実行します。
git clone https://github.com/wakewakame/GravityDesktop2.git
cd GravityDesktop2
git submodule update --init --recursive
mkdir build
cd build
cmake ..
cmake --build . --target GravityDesktop2 --target hook --config Releaseコマンドを実行すると build/Release フォルダの中に GravityDesktop2.exe が生成されます。
cd build\Release
cmake -E copy ..\..\README.md .\
cmake -E copy ..\..\CREDIT .\
cmake -E copy ..\..\LICENSE .\
cmake -E tar "cfv" GravityDesktop2.zip --format=zip GravityDesktop2.exe hook.dll README.md CREDIT LICENSEコマンドを実行すると build/Release フォルダの中に GravityDesktop2.zip が生成されます。
| ファイル名 | 説明 |
|---|---|
| main.cpp | このプログラムにmain関数が書かれています。 |
| include/ | C++のヘッダファイルがまとまっています。 |
| src/ | C++のソースファイルがまとまっています。 |
| lib/ | 依存ライブラリがここに格納されます。 |
| lib/hook/ | 他のウィンドウのマウスやキーボードのイベントをフックするライブラリです。 |
| lib/DirectXTK/ | 描画ライブラリです。 |
| lib/directx-vs-templates/ | DirectXの開発環境の雛形がまとまっています。 |
| lib/box2d/ | 二次元の物理演算ライブラリです。 |
| examples/ | サンプルプログラムがまとまっています。 |
| CMakeLists.txt | CMakeLists.txtです。CMakeで環境構築するので、それに使います。 |
デスクトップの画面を再現したウィンドウを全画面に表示することでアイコンが落下しているように見せています。 具体的な処理の流れは以下の通りです。
- Win32API を用いてデスクトップ上の全てのアイコンの座標を取得する
- 1 の座標を用いて Box2D の仮想空間の中に長方形を生成する
- Windows の隠し API である DwmGetDxSharedSurface を用いてデスクトップのアイコンをαチャンネル付きでキャプチャする
- 2 で生成した落下する長方形に 3 で取得したアイコンのキャプチャを貼り付ける
- ウィンドウに対して送られてくるマウスイベントなどを座標変換したのちにデスクトップに転送する
- 3 に戻る
