他のウィンドウに好きな文字を表示させる方法
実現したいことはタイトルの通りで、例えばウィンドウフルスクリーン(ボーダーレス)の状態でゲームをしてるときに
予め用意しておいた歌詞などの文字列をゲーム画面上に表示させたいのですが、
いくら調べても参考になるものが見つからなかったので丸投げする形になってしまいますが
その方法を教えてほしいです。
言語はできればC++でお願いしたいですが、知っていることがあれば他言語でも教えてほしいです。
わがままな質問ですみません、、、
追記
すいません、OS書くのすっかり忘れてました、、、
OSはwindows10 64bitです。
tmpさんのいう「常に最前面に表示」という選択肢も見つけたのですが、マウスで視点移動するゲームなのでマウスカーソルが出てきてマウスの反応が最前面のウィンドウに吸われてしまうのではないかと考えたのですが、、、それも回避して見た目、操作上オーバーレイ表示とほとんどかわらないものにできるのであれば教えてほしいです!それが無理ならやはりできれば他のwindowに表示させる方法がいいです、、、
低評価付いてしまうかもですが、とりあえずOSは記載してください。質問欄は編集できます。
ゲームWindowそのものではないですが、そのゲームWindowより前にWindowを置くことでできるかもしれません。「常に手前」「TopMost」などで検索するとやり方がでてきます。
ゲームWindow自体が常に手前のフラグがついている場合がありますので、その場合は、この方法では、できないかもしれません。
また、プログラムで組まなくても任意のウィンドウを常に手前にするツールもあるようなので一度それで試すことも可能です。
希望するのは、他のWindowに文字を表示させる方法ですか?
拡張ウィンドウスタイルにWS_EX_LAYERED | WS_EX_TRANSPARENTを指定すれば、透過色でないところもクリック等スルーされます。
(透過色や透明度SetLayeredWindowAttributesで)
ウィンドウの背景色を透過色とすれば、文字だけ表示されます。文字だけ表示だと醜くなるときがあるので縁取りなどの工夫がいると思います。
あとは問題は、ゲームによっては、TopMost同士の最前面の取り合いです。いい方法は知りません、定期的に前にすることで表示はされますが、背面になってる時みえないので点滅のようになります。いい方法があれば回答お願いします。
別の方法だとDirectXで、ビデオカードが対応していればオーバーレイがあったと思いますが、やったことがありませんので、その方法でやった時には、書いてくれるとありがたいです。(普通のスクリーンショットとっても黒くなるってやつ?)
他のWindowに文字を表示の方法が、描画させる方法だとDLLのフック等でできる可能性はありますが、個別にゲームソフト自体の解析も必要になると思われます。チートと判断される可能性も高いです。
tmpさんのおっしゃるとおり、常に最前面+レイヤードウィンドウ+マウスイベント透過、が期待されている方法かと思います。
ただ、私の情報が古い可能性もありますが、例えばDirectXを使ったフル画面のゲームでは画面を排他モードで利用している場合があり、他のウィンドウをかぶせて表示できない可能性が一点、あと、DirectXの仕組み上、表画面と裏画面を交互に切り替えてアニメーション等を行っているため、ウィンドウを出せても激しくちらつく可能性があります。
その辺はゲームの作り次第なのでとにかくいろいろやってみてくださいとしか言えませんが。
あなたの回答
tips
プレビュー