program winstyle; { 2009-01-01:〜 ウィンドウのスタイルを詳細表示するツール。 合わせてウィンドウの各種操作を行う機能を実装。 -------------------------------------------------------------------------------- 課題 ・ウィンドウを前面や背景に移動させたり常に前面に表示の指定や解除をした後のツリー  ビューへの反映。 2016-08-25:Ver 1.2.3.14 ・APIテストを追加。 ・ファイル情報に64ビットアプリか32ビットアプリかの表示を行うようにできた。 ・ファイルの日付が2秒違う不具合あり。 2015-03-06:Ver 1.2.2.14 ・Aero テーマの時トップレベルウィンドウ以外のウィンドウのRECTの取得に失敗していた  不具合を修正。 2015-02-05:Ver 1.2.1.14 ・ウィンドウスタイルのテキストをRichEditボックスに表示する形式を少し改善。 ・WS_EX_TRANSPARENTのメッセージにWS_EX_LAYEREDとの併用事項を追加。 2013-10-20:Ver 1.2.0.14 ・ウィンドウ情報、ウィンドウの実行ファイル情報、ウィンドウスタイルの三種類の情報  をフォームの右側にまとめ、タブで切り替えて表示するようにした。 ・ウィンドウスタイルの変更でレイヤードウィンドウをセットした時、対象ウィンドウの  表示が更新されない不具合を修正。 ・実行ファイル名の検索に対応。 ・検索語をスペースを区切りとした複数の語のor検索で行うように変更。 ・ウィンドウスタイルのテキストをヒントだけでなくRichEditボックスに表示するように  した。 2012-10-28:Ver 1.1.0.14 ・クラス名とウィンドウテキストの検索機能実装。 マイナーバージョンアップ。 2012-08-10:Ver 1.0.12.13 ・Unicode版Delphiに移植。 2012-04-06:Ver 1.0.11.12 ・情報表示グリッドのコピーでエラーが出る不具合を修正。 2011-06-25:Ver 1.0.10.12 ・スクロールバーのスタイルを追加。 ・メインメニューを実装。 ・「バージョン情報」を実装。 ・ウィンドウ情報、ウィンドウツリー、スタイル情報のコピーを実装。 ・「最前面に表示を解除」コマンドが機能しなかった不具合を修正。 ・検索の16進値オプションを追加。 ・[Ctrl]を押しながらキャプチャでbmp画像に関連付けされたプログラムを前面に表示する  ようにした。 ・[Shift]と[Ctrl]を押しながら起動で設定ファイルの読み込みをスキップするようにした。 ・[Shift]と[Ctrl]を押しながら終了で設定ファイルの書き込みをスキップするようにした。 2011-05-10:Ver 1.0.9.10 ・TScreenのMonitorプロパティがモニター情報の変更に追随しないことからモニター情報  が変わった後にツールバーのドロップダウンメニューを表示させようとするとアクセス  違反のエラーが出てしまっていた不具合を修正。 2011-04-10:Ver 1.0.8.10 ・ウィンドウのEnabledの切り替えができていなかった不具合を修正。 2011-03-10:Ver 1.0.7.10 ・「スタイルセット」を選択するとアクセス違反のエラーが出ていた不具合を修正。  単にスタイルセット用のフォームを事前に作成していなかっただけだった。 2011-03-09:Ver 1.0.6.10 ・ウィンドウ操作の「システムメニュー」の「移動」の値が親ウィンドウのクライアント  座標ではなくスクリーン座標だったためとんでもないところに吹っ飛んでいってしまう  不具合を修正。 2011-02-10:Ver 1.0.5.10 ・起動中にシステムを終了させたりログオフさせたりした場合設定を保存していなかった  不具合を修正。 ・ウィンドウ操作を行った後、対象ウィンドウの情報表示を更新するようにした。 ツリービューの表示を事前に取得していた情報ではなく表示する時点での情報を表示す るように変更。 ・表示する時点の情報ではなく事前に取得していた情報を表示するオプション「キャッシュ  情報を表示」を追加。 2011-01-21:Ver 1.0.4.10 ・Dllプリロード攻撃対策。 ・ウィンドウのキャプチャ機能実装。  OSがXP以上で対象がデスクトップでない場合はウィンドウが他のウィンドウに隠れてい  てもキャプチャOK。  ただしレイヤードウィンドウで透過処理しているトップレベルウィンドウの場合は透過  された背景画像ではなく透過処理対象の背景色がキャプチャされる点に注意。 2010-12-19:Ver 1.0.3.10 ・スタイルセットウィンドウでマウスホイールのホイール操作に対応。 ・コンボボックスでリストを移動する機能を実装。 2010-12-15:Ver 1.0.2.10 ・ウィンドウスタイルのセットで実行対象ではなく実行対象ウィンドウのトップレベルウィ  ンドウの表示をON/OFFすることでスタイルの適用を行うように変更。  その方が確実のようなので。 2010-12-08:Ver 1.0.1.10 ・ウィンドウの可視・非可視の切り替えが出来なくなっていた不具合を修正。 2010-11-30:Ver 1.0.0.10 ・ウィンドウ操作機能に「移動」と「サイズ変更」「前面に移動」「背面に移動」を追加。 ・ウィンドウハンドルの検索機能を搭載。 ・ウィンドウスタイルの変更機能を搭載。 ・ツールバーを搭載。  それに伴い下部のボタン類を削除。 ・ステータスバーにスタイルウィンドウの選択行を表示。 ・winfoのような情報を(選択ウィンドウのみではあるけれど)上部に表示。 2010-09-24:Ver 0.2.1.10 ・コマンドに「常に前面に表示」「常に前面に表示を解除」「Visible」「Enabled」  「SetForegroundWindow」「モニター間移動」を追加。 ・アイコンをワシ(多分ハクトウワシ)のものに変更。 ・ウィンドウテキストを取得する汎用関数でSendMessageW APIを使っていたものを  SendMessageTimeoutW API仕様に変更。  これでフリーズしているウィンドウがあってもつられてフリーズすることがなくなるの  ではないかと期待。 2010-09-03:Ver 0.2.0.10 ・コンボボックス、リストボックスのスタイル表示に対応…できていなかった不具合を修正。 ・ウィンドウ操作を行う機能を搭載開始。  まずはシステムメニューまわり(最大化、最小化、閉じる)から。 ・Visibleの状態を設定ファイルに保存して起動時に反映させていたのを廃止。  必ずVisibieにチェックのついている状態で起動するように変更。 ・取得状態を順次表示するように変更。 マイナーバージョン上げ。 2010-08-12:Ver 0.1.2.10 ・コンボボックス、リストボックスのスタイル表示に対応。 ・スタイルの判定の不具合を修正。 2009-01-25:Ver 0.1.1.10 ・iniファイルの後ろにゴミがついてしまう不具合を修正。 2009-01-20:Ver 0.1.0.10 ・wstyleから派生。winstyle。 ・左にツリービュー、右にリストボックスの形に変更。 ・ウィンドウスタイル以外にボタンコントロール、エディットコントロール、スタティッ  クコントロールのスタイルも(選択すれば)表示可能にした。 2009-01-09:Ver 0.0.2.4 ・GWL_STYLEとGWL_EXSTYLEを二つのチェックリストボックスに分けて表示するようにした。  (チェックリストボックスのメモリーリークが回避できないので苦肉の策として) ・それに伴いチェックリストボックスのBorderStyleをbsSingleに変更。  別々のリストボックスなのが分かりやすいだろうということで。 ・スタイルのセットとリセットの後に再描画していないことへ対処。  ウィンドウを非表示のあと再表示させてるだけの簡易版。 ・WM_*スタイルが0であったときの判定の間違いを修正。  mod 10ではなくmod 16($10)でなければならなかった。 2009-01-08:Ver 0.0.1.4 ・「リセット」ボタンでスタイル変更前に戻すようにした。 2009-01-01:作成 } //{$DEFINE _DEBUG} uses my_safedll, Forms, main in 'main.pas' {App_TOOLWindowStyle}, style in 'style.pas' {TOOL_WindowStyle}, image in 'image.pas' {TOOL_winStyleImage}, text in 'text.pas' {TOOL_winStyleText}; {$R *.res} begin {$IFDEF DEBUG} ReportMemoryLeaksOnShutdown := True; {$ENDIF} Application.Initialize; Application.MainFormOnTaskbar := True; Application.Title := 'winStyle'; Application.CreateForm(TApp_TOOLWindowStyle, App_TOOLWindowStyle); Application.CreateForm(TTOOL_WindowStyle, TOOL_WindowStyle); Application.CreateForm(TTOOL_winStyleImage, TOOL_winStyleImage); Application.CreateForm(TTOOL_winStyleText, TOOL_winStyleText); Application.Run; end.