ページ 11

ソフトのウィンドウプロシージャを改変する方法

Posted: 2013年9月30日(月) 20:35
by shiro4ao
とても便利なステータス表示系のソフトが有るのですが、
このソフトがちょっと大きすぎて画面を専有してしまいます
便利なので変えたくはないので、
このソフトにマウスが乗ったら透明化するようにしたいです

ウィンドウプロシージャを改変してマウスメッセージが来たら自分のウィンドウに対して
ShowWindowで表示方法を変えるような感じにできるのでしょうか?
SetWindowsHookEx()でDLLを対象プロセスへ注入できますが、
ここからウィンドウプロシージャの改変は可能でしょうか?

ウィンドウプロシージャの改変ができるのであれば
別にDLLインジェクションだけでなくてもがんばります

Re: ソフトのウィンドウプロシージャを改変する方法

Posted: 2013年9月30日(月) 22:49
by ISLe
ウィンドウプロシージャを乗っ取ることを『サブクラス化』と呼びます。
他のプロセスに属するウィンドウをサブクラス化するにはメッセージフックによるDLLの注入と組み合わせて行う必要があります。

「サブクラス化 {別プロセス|他プロセス}」でGoogle検索

Re: ソフトのウィンドウプロシージャを改変する方法

Posted: 2013年9月30日(月) 22:53
by taketoshi
考え方としてなんですが・・・。

ソフトのウインドウプロシージャを乗っ取るのではなく。
グローバルフックを掛け、お目当てのウインドウハンドルを取得し、
そのウインドウ上にカーソルが乗ったらShowWindowを掛けるソフトを書いた方が早いかなぁ・・・?と感じました。

やったことないですが、SetWindowLongPtr関数でウインドウプロシージャの書き換えができるようです。
FindWindowあたりでウインドウハンドルを取得して書き換えればいけるかもしれません。

Re: ソフトのウィンドウプロシージャを改変する方法

Posted: 2013年9月30日(月) 23:21
by ISLe
taketoshi さんが書きました:やったことないですが、SetWindowLongPtr関数でウインドウプロシージャの書き換えができるようです。
それがサブクラス化なんですよね。

Re: ソフトのウィンドウプロシージャを改変する方法

Posted: 2013年10月01日(火) 00:00
by shiro4ao
>ISLeさん
ウィンドウプロシージャののっとりで行けるんですねありがとうございます

>taketoshiさん
マウスフックをやったことがあるので「ウインドウ上にカーソルが乗ったら~」の方法も
挑戦してみようと思います


ちょっと今忙しいので、実装はもう少しあとになるかもしれませんが
方針が立ったのでこれにて解決とさせていただきます
ありがとうございましたm(_ _)m