ホーム
>プログラム
>自作フリーソフト
winfo
マウスカーソル下のウィンドウの各種ウィンドウ情報を表示するツール。
目次
プログラムしていると実行中のプログラムのウィンドウハンドルやクラス名、サイズなどを確認したくなることがあります。
そういう時にWinSightのような解析ソフトは詳しすぎていささか大仰で、、
そんな本格的なものまでは必要ない、ちょっとした確認程度の用途としてマウスカーソル下のウィンドウの情報を子ウィンドウも含めて一覧表示し比較できるようにしたものです。
(すべてのウィンドウを列挙してツリービュー形式で表示するのがwinStyleです)
全然本格的なものではないのですが、マウスカーソル下のウィンドウをターゲットにしていることから直観的で、親ウィンドウや子ウィンドウとの比較ができるので意外と重宝しています。
クラス名 |
クラス名。
ウィンドウの親子関係をインデントで表現。
GetClassName APIで取得した値。 |
ハンドル |
ウィンドウハンドル。
16進値と10進値で表示。 |
テキスト |
ウィンドウのキャプションあるいはテキスト。
GetWindowText APIやWM_GETTEXTメッセージなどで取得した値。 |
Wサイズ |
ウィンドウサイズ。
ウィンドウのタイトルバーや枠を含めたサイズ。
GetWindowRect APIで取得した値から算出。
Left,Top 幅x高さ で表示。
Left値とTop値はGetAncestor APIで取得した親ウィンドウのクライアント座標から計算。
トップレベルウィンドウの場合はデスクトップ座標の値。 |
Cサイズ |
クライアントサイズ。
ウィンドウのクライアントのサイズ。
GetClientRect APIで取得した値から算出。 |
C原点 |
クライアントウィンドウの左上端のスクリーン座標。 |
Rect |
Rect。
ウィンドウのLeft、Top、Right、Bottomのそれぞれの画面座標での値。
GetWindowRect APIで取得した値。 |
コントロールID |
ウィンドウのコントロールID。
GetWindowLong APIの第二引数にGWL_IDを指定して取得した値。 |
Unicode |
ウィンドウがUnicodeに対応しているかどうか。
IsWindowUnicode APIの戻り値。 |
Visible |
ウィンドウの可視、不可視。
IsWindowVisible APIの戻り値。 |
Enabled |
ウィンドウが有効か無効か。
IsWindowEnabled APIの戻り値。 |
APIテスト |
選択したWindows APIをテストした値。
APIテストウィンドウで選択したAPIを実行した時の戻り値。 |
これらの情報を各ウィンドウごとに取得して表示します。
すべてのウィンドウを表示
マウスカーソル下のトップレベルウィンドウ(Form)中のすべてのウィンドウの情報を表示します。
マウスカーソルの位置にかからないウィンドウも含め、非可視ウィンドウも表示します。
上から9番目の太字のTInspListBoxというのが画面上ではマウスカーソル上にあり、一番手前の見えているウィンドウになります。
非可視(VisibleがFalse)のウィンドウは打ち消し線で表示します。
マウスカーソルの位置にかからないウィンドウはアンダーラインで表示します。
マウス下にあるウィンドウのみ表示
ウィンドウの領域(Rect)がマウスカーソルの位置にかかるウィンドウのみ表示します。
マウスカーソルの位置(下の図では X=231, Y=417)にウィンドウの領域がかかれば表示します。
上の図のアンダーラインのあるウィンドウをその子ウィンドウも含めて表示しないモードです。
見比べてみると、アンダーラインで表示されていたウィンドウが根こそぎなくなっているのが分かると思います。
可視ウィンドウのみ表示
マウスカーソル下にあってVisibleがTrueのウィンドウのみ表示します。
上の「マウス下にあるウィンドウのみ表示」から、更にVisibleがFalseのウィンドウを取り除いて表示するモードです。
よってVisibleはTrueだけれどもマウスカーソルの位置にかからないウィンドウは表示されません。
また親ウィンドウのVisibleがFalseの場合、その子ウィンドウのVisibleがTrueであっても表示はされません。
更に打ち消し線のウィンドウも根こそぎなくなっています。
- WinSightのような本格的なものではなく、またWinSightのようにウィンドウメッセージを補足する機能はありません。
- マウスカーソルがある場所の一番上にあるトップレベルウィンドウの情報だけを表示します。
動作環境
Windows XP SP3、Windows 7 SP1(64bit)で動作確認。
2000やVistaでも大丈夫かも知れません。
95や98、meでは動きません。
インストール
専用のフォルダを作りwinfo.exeをコピーしてください。
レジストリには何も書き込みませんがプログラムのあるフォルダに設定ファイルを作ります。
アンインストール
専用のフォルダを作っていた場合はそのフォルダごと削除すればOKです。
専用のフォルダを作らなかった場合は下記のファイルを削除してください。
- winfo.exe - プログラム本体。
- winfo.ini - 設定ファイル。
レジストリには何も書き込みません。
winfo
winfo.exe 2018-02-10:Ver 0.4.3.45
ファイルは圧縮していません。
ダウンロードしてそのまま実行できます。
以前の安定版バージョンはこちら。
winfo.exe 安定版 Ver 0.3.1.4.16
ソースコード
ソースコードは公開しているというよりもバックアップ目的なので見通しは良くありません。
- コピー
セル内のデータをクリップボードへコピーします。
- 16進値でコピー
ウィンドウハンドルを16進値でクリップボードコピーします。
- 10進値でコピー
ウィンドウハンドルを10進値でクリップボードコピーします。
- 全体をコピー
現在表示している情報を親子関係をクラス名のインデントで表してコピーします。
- すべて
マウスカーソル下にあるトップレベルウィンドウに属するウィンドウすべてを表示します。
- マウス下にあるウィンドウのみ
ウィンドウの範囲がマウスカーソルの位置にかかるウィンドウのみ表示します。
親ウィンドウの範囲がマウスカーソルの位置にかからなければ、その子ウィンドウも非表示になります。
- 可視ウィンドウのみ
VisibleがTrueのウィンドウだけを表示します。
親ウィンドウのVisibleがFalseなら、その子ウィンドウも非表示になります。
- 常に前面に表示
他のアプリケーションの下に隠れないように常に前面に表示します。
識別のためタイトルバーに「↑」マークがつきます。
- テキストの取得を高速にする
ウィンドウテキストの取得を簡易なものにして高速にします。
チェックを外すと動作が多少もたつく代わりにコンボボックスやリストボックスおよび他のウィンドウのエディットコントロールのテキストも取得できます。
- フォント
表示フォントを選択します。
- APIテストウィンドウを表示
ウィンドウ情報を取得するWindows APIをテストするウィンドウを表示します。
- 一時停止
マウスカーソルに追従してウィンドウ情報を表示するのを中止し、一時停止した時の情報を保持します。
- バージョン情報
バージョン情報を表示します。
- 終了
プログラムを終了します。
ショートカット
Esc |
一時停止 |
Ctrl+C |
選択セルの内容をクリップボードへコピー |
F2 |
全体をクリップボードへコピー |
Space |
ウィンドウのサイズ調整 |
マウスジェスチャー
マウスの右ボタンを押しながら |
↑ |
常に前面に表示のOn/Off |
↓ |
一時停止のOn/Off |
← |
すべのウィンドウを表示 |
→ |
シンプル表示 |
2018-02-10:Ver 0.4.3.45
2017-04-30:Ver 0.4.2.45
2017-01-27:Ver 0.4.1.36
- テキスト取得を簡易にして高速にするオプションを追加。
コンボボックスやリストボックス及び他のウィンドウのエディットボックスのテキストの取得をやめて、その分動作は高速になる。
- フォント選択オプション実装。
- 表示の仕方の変更。
マウスカーソルにかからないウィンドウはアンダーラインで。
非可視のウィンドウは打ち消し線で。
Windows 7で淡色表示が通常表示とあまり変わらず、非常に見分けづらくなったため。
2016-12-03:Ver 0.4.0.34
- API Testの表示を追加。
- コピーに全体をコピーを追加。
- シンプル表示を削除。
- 表示の順番で見た目に近いやり方を削除。
EnumChildWindowsの列挙順に合わせた表示のみにした。
- Control IDの表示を10進数のみにした。
2015-03-10:Ver 0.3.17.16
- ウィンドウスタイルにWS_EX_TRANSPARENTとWS_EX_LAYEREDがセットされているマウスで触れないウィンドウの情報が取得できなかった不具合を修正。
2015-03-05:Ver 0.3.16.15
- シンプル表示の時「EnumChildWindowsに合わせる」オプションの値に関わらず
(この後コメントを書いていなかったので何を変更したのか分からない)
2013-01-01:Ver 0.3.15.15
- Delphi XE2に移植。
公開は2017-01-27。
- 「W-Size」を 「Wサイズ」、「C-Size」を 「Cサイズ」へそれぞれ変更。
- 表示情報の「位置」を「C原点」に変更。
ウィンドウのLeft,Top値からクライアント原点のスクリーン座標の表示へ。
- Left,Top値はウィンドウサイズの「Wサイズ」へ表示するように変更。
2011-08-28:Ver 0.3.14.14
- ハンドルとコントロールIDのコピーが選択セルの一つ下のセルを読み出すようになっていた不具合を修正。
2011-06-24:Ver 0.3.12.14で紛れ込んだ不具合。
2011-08-26:Ver 0.3.13.14
2011-06-24:Ver 0.3.12.14
- ハンドルのコピーを16進値と10進値で分けてコピーするように仕様変更。
- [Ctrl]を押しながら「コピー」でテキストファイルに関連付けられたプログラムに渡して実行させる機能を追加。
2011-05-10:Ver 0.3.11.14
- TScreenのMonitorプロパティがモニター情報の変更に追随しない不具合を回避。
2011-04-11:Ver 0.3.10.14
- 透明ウィンドウの透過部分にマウスカーソルがある場合透過して見えている下のウィンドウではなく透明ウィンドウの情報を表示していた仕様を透過していたら下のウィンドウの情報を表示するように変更。
ライブラリのアップデートによる変更。
2011-02-10:Ver 0.3.9.14
- 起動中にシステムを終了させたりログオフさせたりした場合設定を保存していなかった不具合を修正。
2011-01-21:Ver 0.3.8.14
2010-10-15:Ver 0.3.7.14
- Delphi製のプログラムでタイトルバーなしのウィンドウやダイアログウィンドウの位置が画面の中心からの相対座標で表示される仕様を変更。
親ウィンドウを取得するAPIをGetParent APIからGetAncestor APIに変更したことによるアップデート。
2010-09-24:Ver 0.3.6.14
- ウィンドウテキストの取得でSendMessageW APIを使っていたものをタイムアウトのあるSendMessageTimeoutW
APIに変更。
フリーズしているプログラムにつられてフリーズしないように(なればいいなぁと)。
2010-02-09:Ver 0.3.5.10
- EnumChildWnindowProcが子ウィンドウを列挙する順番を逆に捕らえていた致命的なミス発覚。
間違いを修正。
EnumWindowProcもEnumChildWindowProcも両方Zオーダーで上のウィンドウから列挙するのをEnumChildWindowProcはZオーダーの奥から列挙するものだと思っていた。
2010-02-02:Ver 0.3.4.9
- EnumChildWindowに合わせる」オプションにチェックが入っていると対象Windowの太字表示が正しくない不具合を修正。
2010-01-18:Ver 0.3.3.9
- 親子関係を下から上にではなくEnumChildWindowの列挙の仕方と同じ上から下へ表示する 「EnumChildWindowに合わせる」オプション追加。
2009-06-22:Ver 0.3.2.9
- フォームスタイルをbsSizeToolWinからbsSizeableに変更。
- ウィンドウの指定をした後すぐに再描画していなかった不具合を修正。
- バージョン情報表示を汎用フォームに変更。
2009-05-30:Ver 0.3.1.7
2009-03-15:Ver 0.3.0.7
- UTF-8で保存してあったiniファイルのBOMをShift-JISで書き出すようした後もそのまま書き出していた不具合を修正。
- ウィンドウの親子関係をクラス名のインデントで表現する方式に変更。
より直観的になったのではなかろうかと。
- マウス位置にかからないウィンドウも表示できるように変更。
- シンプル、可視ウィンドウのみ表示、マウス下にあるウィンドウのみ表示、すべてのウィンドウを表示の4種類の表示に対応。
- 簡易ヘルプ実装。
マイナー一つあげ。
2009-01-25:Ver 0.2.2.6
- iniファイルの後ろにゴミがついてしまう不具合を修正。
2009-01-19:Ver 0.2.1.6
- マウスジェスチャー対応。
上:常に前面に表示
下:一時停止
左:すべての親を表示
右:簡易表示
- 「すべての親を表示」に変えたとき今まではVisibleの幅を狭めていたのをフォームの幅を広げるように変更。
- すべての親を表示と簡易表示を切り替えたときに一時停止していてもウィンドウ情報をアップデートするように変更。
- 実行ファイル名を表示しているラベルをドラッグして移動できるように変更。
2008-12-12:Ver 0.2.0.5
- コピーのUnicode対応。
これまた今までやってなかったのかと…
- 起動時に画面外に表示しないように調整。
- セル幅を調整する時にタイトルより下のセルにマウスカーソルを持っていってマウスアップした場合にフォームの横幅の調整がなされない不具合を修正。
- 一時停止時の表示色を変えるようにした。
- 「すべての親を表示」でToplevelの表示を廃止。
Ownerの上のウィンドウがトップレベルウィンドウ。
- クラス名を除く項目の表示オプション追加。
- アイコン変更。
マイナー一つあげ。
2008-02-10:Ver 0.1.5.2
- テキスト欄のウムラウトのようなUnicode文字の表示に対応。
今までやってなかったのかと…
- 実行ファイル名のUnicode文字の表示に対応。タイトルバーからリストボックス利用に変更。
- 項目ヘッダーのセンタリング。
2007-12-19:Ver 0.1.4.2
- Unicode欄が正しく表示されていなかった不具合を修正。IsWindowVisibleを使ってた…
2007-12-11:Ver 0.1.3.2
- タイトルバーにマウスカーソル下の実行ファイル名を表示するようにした。
2007-10-03:Ver 0.1.2.2
- ポップアップメニューから「ウィンドウの幅を自動調整」「ウィンドウの高さを自動調整」、「ウィンドウ幅を初期化」を削除(というか非表示に)した。シンプルに。
- 「すべての親を表示」のときの横幅の自動調整をやめた。というかスクロールバーの分だけグリッドの幅を狭めて対処。
その方が(プログラムが)簡単なので。
見た目はあれだけどもまぁ所詮ツールなんで。
- ウィンドウの自動調整は[Space]に変更。また幅、高さともそのときにやるように変更。
よりシンプルにってことで。
2007-10-12:Ver 0.1.2.2
- IsWIndowUnicodeもいれてみた。けど、どれもこれもみなTrue。意味なかったかなぁ。
(間違えてIsWindowVisibleを使っていたことに後で気づく、、)
2007-09-28:Ver 0.1.1.2
- 「すべての親を表示」で「ウィンドウの幅を自動調整」がチェックされているとき機能するように変更。高さは[Ctrl]キー押下時に適用。
両方[Ctrl]キー押下時のみにしたほうが良いかも。
- 親子関係の表示をChildからParentに変更。
これで下にあるのが親ウィンドウであるという関係がわかりやすくなったのではなかろうかと。
2007-09-09:Ver 0.1.0.2
- マウスカーソル下にあるウィンドウをすべて列挙するように変更。
ただしトップレベルウィンドウどまり+オーナーウィンドウ。
2007-09-08:Ver 0.0.2.2
- 値をコピーできるようにした(結構と手間かかった)
- 設定をiniファイルに書きこみ。
2007-09-07:Ver 0.0.1.1
2007-09-06:Ver 0.0.0.0:作成。