C言語の作品制作でアプリケーションのウィンドウを透明化するソフトを作ることになったのでC++で作って見た。
なんとなく思っていたがC言語を学んだのにいきなりC++のプロジェクトをやれと言われても無理に決まっていると思う。そういう課題をだす学校側もできるのかと逆に聞きたいくらいだ。
授業でちょっとポインタや配列、構造体を使ったくらいでVisual Studioを使いこなしてくださいとか無理だろと突っ込みたいところ情報電子部はプロのC言語プログラマーの集いのようなものらしいのでだいたい班に一人は情報電子部が割り当ててあるらしいが僕の班には元情報電子部しかいない。
一応、班員にダメ出しされた部分の修正が終わってある程度使えるようになったので何をしたか記録にしておこうと思う。
大体これでも使いにくいんだったら使うなと言いたい。
リポジトリ:
https://github.com/almajiro/transparent_window
流れとしてはウィンドウハンドラを受け取ってSetLayeredWindowAttributesで透明度を適用させているだけのシンプルなもの。
起動しているアプリケーションの一覧はプロセスの一覧ではないのでZオーダーより上?のウィンドウハンドラ受け取ってIsEnumCheckという関数を作ってそこで判定をしている。また同じPIDで複数のウィンドウがあるもの(Chromeやエクスプローラーなど)に対応するために一度アプリケーションのリストを格納する構造体を作りそこにPIDとウィンドウのタイトルを格納し選択されたら全てのウィンドウハンドラからマッチしたもの選びGetWindowLongでウィンドウハンドラを受け取る。
コマンドラインの色付けはエスケープシーケンスが使えないのでSetConsoleTextAttributeを使って行う。
Windowsのプログラムを作るのは初めてなのでわからない事だらけであったがいい機会なので色々とわかって面白かったと思う。