CabwcPos

最新版 10/05 2017
【概要】
Windows 7 を常用してみると 各々のフォルダーウィンドウ ( エクスプローラー ) の位置 サイズを覚えて いないのではないかと 思う様にないました。( 一番最後に閉じたウインドウ状態だけ覚えてて 全ての ウインドウをその状態から並べて開こうとするらしい。確認してみると Windows 8 10 も同様な仕様の様です。) 仕様の評価はとりあえずとして 此では不便なので プログラムによって 各々の フォルダーウィンドウの 位置と サイズを 再現出来る様にと 此の CabwcPos を作成しました。
ちなみに CabwcPos は解りにくい 名前ですが フォルダー表示をするウィンドウは Windows 95 から変わらずに クラス名が CabinetWClass で 統一で Windows 8 10 まで変わりが無いので Cabinet Window Class Posision を 適当に短くして CabwcPos と付けました。

【特徴】
常駐させれば その時点から 閉じた 各フォルダーウィンドウ ( エクスプローラー ) の位置 サイズ を記憶して 次回に そのフォルダーを開く時に 最後に閉じた位置とサイズで 開く様にします。実際には 記憶した位置に開く様に するのではなく 開く 位置 サイズは ウィンドウ が決めた所ですが すぐに記憶した位置に移動しサイズを調整します。 したがって多少のちらつきが有るかと思います。

【動作環境】
Win 98 / 2000 / XP / Vista / 7 / 8 / 10 です。特別なランタイムはいりません。
但し 意味のあるのは 位置 サイズを 覚えていない Windows 7 / 8 / 10 となります。

【インストール/アンインストール方法】
適当な同じ所に CabwcPos.exe と CabwcPos.dll を置いて下さい。そこから ショートカット を作って立ち 上げて下さい。各ユーザーの アプリケーションフォルダー ( shell:AppData で開けられます。 ) に CabwcPos.pkg と言う 位置とサイズを 記憶した ファイルを残します。( サイズ 8.00 KB (8,192 バイト) ) アンインストールは単に CabwcPos.exe と CabwcPos.dll と作成したショートカット を 後 各ユーザーの アプリケーションフォルダー に有る 記憶データ CabwcPos.pkg を削除して下さい。

【使用方法】
通常は スタートアップに登録して動作させっぱなしと言う事になるかと思います。
立ち上げ時に オプション設定用のマンドライン 指定が出来ます。
通常はタスクトレイにアイコンが出ます 此を左右クリックする事でメニューが出ます。

通常はフォルダーウィンドウを閉じる時 位置 サイズを 変えた時に その都度 その位置を記憶しますが この時に 無変換 キーを 押しているとその位置は記憶しません。 同様に 開く時 に記憶している位置 サイズに移動しますが 無変換 キーを押していると 此の動作をしません。

【コマンドライン】
オプション設定用のコマンドラインで 最初の動作を指定出来ます。
/N タスクトレイにアイコンを表示しないで立ち上げます。
/F 此までの記憶した位置サイズをロードしないで始めます。終わる時もデータは残しません。
/L コントパネル を有効にして立ち上がります。
/Q 閉じて終了 を有効にして立ち上がります。
/S サイズ調整を無効にして立ち上がります。
/P 位置移動を無効にして立ち上がります。
/D 開くを詳細 を有効にして立ち上げます。
/G 開くを大きく を有効にして立ち上げます。
/U カーソル移動 を有効にして立ち上げます。
/B ボタンに移動 を有効にして立ち上げます。
/A アクティブ+ を有効にして立ち上げます。
/J 背景長押し機能を有効にして立ち上げます。
/W800 既定サイズの幅を 800ピクセルにします。
/H600 既定サイズの高さを 600ピクセルにします。

【立ち上げ時のキー】
コマンドラインの /N /R と排他的な動作になります。
Control : タスクトレイにアイコンを表示しなくなります。( /N がある時は 表示します。)
Shift : 此までの記憶した位置サイズをロードしないで始めます。終わる時もデータは残しません。
Shift + Control 常駐している CabwcPos.exe を終了させます。( /R がある時には 通常動作です。)

【制限事項】
【注意事項】
【使用に関して】
此の プログラムは バグ 動作不良などが無い事を期待されて作られてはいますが 違う環境での 正常動作 又 誤動作から来る損害等 についての 保証はいたしかねます。 ただし ご意見 提案 動作不具合報告等は歓迎いたします。

【履歴】
2014/02/10 Ver 1.000
Windous 7 8 が フォルダー表示の 位置 サイズを覚えていない様なので此に対処する為に作成しました。
2014/03/02 Ver 1.200
確実にサイズの変更 ウィンドウのクローズ オープン を認識する為にメッセージ取得の方法を変えて 確実に必要な情報を取得出来る様になりました。この為 無駄に余分な状況の取得をする必要が無くなり 何もない時の常駐している時には全く何もせずにシステムに負荷をかけない様になり 必要な時にはより速い 対応が出来る様になりました。又 Control キーを 押しているとその時の動作は何にしても無視する オプションを付けました。
当然の事ですが CabwcPos.dll とセットです。Ver 1.000 とは互換性は有りません。両方セットで換えて 下さい。後 フォルダー認識の文字を一字増やしていますので 記憶データ CabwcPos.pkg も互換性が 無くなっています。一度 リセット した方が無駄がなくなって良いかと思います。 ( しなくても問題は有りません。)
2014/03/22 Ver 1.300
今回限り のメニューを新設して 記憶した位置サイズをロードしないで始め 終わる時もデータは 残さない動作をはっきりさせ 途中で切り替える事も出来る様にしました。
ウィンドウがシャットダウンする時に内部的な事後処理が間に合わずに 記憶したデータを CabwcPos.pkg に セーブするのが出来ない様な事を避ける様な終了コードを採用しました。
内部的な設定の記憶を配列型式から数値のビット列の形にして効率を上げました。出来るだけウィンドウを 動かした時のちらつきを少なくするコードにしました。
二重に起動しようとした時の扱いを 先に常駐している物に常に設定メニューを出させる様に変え 余分な 二重起動の警告はやめました。
最小化 最大化している物に関しても 開いている数の内に入れる様にして リストアした時の位置サイズの 動作の 対象とすると同時に 最大化して開く物に影響してしまう不具合も修正しました。
CabwcPos.dll は 最大化 最小化 リストア時 のメッセージも出す様にして CabwcPos.exe と合わせました。 又 誤動作を招きそうなパスが有ったので此はやめて CabwcPos.exe で確実に処理する方向に一本化しました。
2014/09/30 Ver 1.320
フォルダーウィンドウの 認識が出来たら それ以上待つ事なく 直ぐにこの認識したウィンドウを記憶した位置と サイズに動かす事にしました。一度保証された状態を再度確認する無駄はやめました。dll は 必ず状態を 保証してからポストする様に 又 認識効率コードを良くしました。
2015/01/02 Ver 1.322
ウィンドウのシャットダウンと共に終了する時に出来るだけ早い反応で終了するコードに変えました。
2015/02/28 Ver 1.330
画面のサイズが変えられた時に ウィンドウを動かす位置に不具合の出ない様にし 又 サイズ 位置を変更する基準を 変えて 不具合な位置を記憶している時には 後で不便の無い位置サイズに 調整して移動する様にして サイズが 変えられない程に大きくなってしまう事が有る可能性も排除しました。
2015/04/05 Ver 1.400
二重に記憶していたデータを最後に記録するデータに直にメモリーする事で 取りこぼしを無くして且つ効率も 良くしました。短い間に起こる クローズやオープンにも対処できるように 又 一連の動作が終了してから 確認して余分なループをしない様にしました。
フォルダー認識データの代入方法を変えてより広範囲で確実に認識出来る様にしました。この為今までの フォルダー認識と違ってくるので 一度 データのリセットをして下さい。
CabwcPos.dll も此に合わせて送出するメッセージを整理しました。
CabwcPos の動作を一時的に止めるキーは Control では色々な機能と被る事が多いので 無変換 キーに 変えました。
2015/05/30 Ver 1.420
サイズ調整と位置移動 をそれぞれ分離して機能も出来る様にして 此に関する メニューと コマンドラインオプションを 付加しました。
DPI スケーリング は自身でする事を宣言し OS がする DPI スケーリング によって位置やサイズが違ったり ニューの 文字が影響を受ける事を避ける様にしました。
2015/09/05 Ver 1.430
アクセス権の無いフォルダーを開こうとした時等にエクスプローラーのダイアログ等が出る様な時に 此を待ってしまう事が 無いように 避けるコードで対応しました。
開いた エクスプローラー が準備が出来るまで待つ時のタイトルの決め打ちをやめてその環境での初期値を確認する事にして 環境対応の柔軟性を上げました。此の部分だけなら言語の違いも吸収出来るのではないかと思います。
2015/10/05 Ver 1.500
CabwcPos を管理者権限で実行すると CabwcPos.dll が メッセージをポスト出来なくなってしまい 何も反応しなくなる事を 修正しました。フォルダーウィンドウを認識する文字列を待つ時に 最初に取得した文字列を DLL から送られたウィンドウが 作成された時のタイトルと 比較をする事で その変化を待つのが妥当かどうかの 判断を早く正確ににする事が出来る様に なりました。この為 必ず CabwcPos.dll とセットで換えて下さい。
開くを詳細 のオプションとコマンドライン /D を付加しました。
2015/11/30 Ver 1.520
既定サイズのオプションとメニューコマンドライン指定を付加して新たに開かれるフォルダーウィンドウでも サイズを統一出来る様にしました。CabwcPos.dll は分岐条件が重ならない様にして多少なりとも効率を良く しました。
2016/08/05 Ver 1.530
COM に関連するプログラム API の為に 宣言は スレッドで確実にする事で 重複等の無駄が起きない様にしました。 dll から Hook の結果を送るのを より汎用性が有り exe のコードに無駄が出ない物に変えました。
CabwcPos.exe CabwcPos.dll 共に変えて下さい。
2016/11/05 Ver 1.550
新しく開かれたフォルダー表示ウィンドウが落ち着くまで待つのを関数内で待つコードから スレッドループで 待つ方法に変えました。此により 新しく開かれる事が重複しても同時に処理に移れる様になり 待機時間の重複も 無くなり反応も外部 内部 共に速くなりました。今の所同時に8個までの対応にしていますが 現実的には実験でもしない限りそれ以上の必要は無いかと思います。
CabwcPos.dll も此に対応し 内部的に送るメッセージも整理して本体の効率も良くなっています。
CabwcPos.exe CabwcPos.dll 共に変えて下さい。
2016/11/25 Ver 1.600
カーソル移動のオプションとコマンドライン /U CabinetWClass を使用する コントロールパネルも対象にするかどうかの オプション コントパネルとコマンドライン /L を新設しました。
記憶する 数を 256 から 384 に増やしました。同時に内部的な並べ替えを効率の良い物にしています。
固定サイズ メニューの選択時に ターゲットウィンドウを判り易くする様にアクティブ色にする様にしました。
記憶データの リセット はより間違いの起こりにくい 又 意識的に セーブ と ロードの出来る 汎用性の有る 方法に換えました。
CabwcPos.dll は フォルダー表示ウィンドウとして可能性のある ExploreWClass にも対応しました。
2017/01/10 Ver 1.700
サイズ 位置を変える時には 対象ウィンドウの状態を見て反応時間を変える事にして 出来るだけ早く 移動処理をする コードにして ウィンドウの画面のちらつきを減少させる 様にしました。此と同時に認識できないウィンドウを 待つ時間が切り上げられ反応が良くなりました。
開くを詳細 のオプションでも 相手の反応によって待ち時間を変える様にして無駄な待ちを無くしました。
後 関連している ウィンドウを閉じる 全て 閉じる のメニューを新設しました。この関係でコマンドライン SW の 閉じて終了 を /C → /Q に変えました。
規定サイズを取得する基準となる 一番上のウィンドウを 条件によっては取り違える事を修正しました。
CabwcPos.dll は 送るコマンドを若干変えてありますので 同時に新しくして下さい。
2017/02/25 Ver 2.000
開くを大きく ボタンに移動 を新設しました。位置移動 サイズ調整 をしない コマンドライン設定の不具合を 修正しました。既定サイズメニューの表示や決定のリアルタイム変化も確認のし易い物にしました。
CabwcPos.dll は メッセージ取得の再設定機能を付加し 必要のないメッセージを排除して CabwcPos.exe に 出来るだけ付加の掛からない様にしました。同時に CabwcPos.exe は自分自身の内部の相手に対する待ち時間の 繰り返しで ハングしている様になる可能性を排除しました。
あまり影響は無いとは思いますが このバージョンから Win 98 NT4.0 は対象外です。
2017/04/05 Ver 2.020
内部的に他のプログラムの変わるのを待つ時には 統一した パックした形で待つ事にして 待ち時間の重複が出ない様に しました。
開くを詳細 開くを大きく ボタンに移動 を1つのウィンドウには統一した物にして無駄を無くしました。
検索等でタイトルバーが変わってしまう事で違うウィンドウとして認識してしまい記憶しているデータの無駄が 出てしまうのを防止しました。
2017/08/10 Ver 2.100
Windows 10 8.1 の コピー 確認や プログレス表示の "OperationStatusWindow" の 表示 その他の作成された プログラムフォームの最初の表示のアクティブ化を補助する アクティブ+を付加しました。
又 此処の所の待ちを整理して途中でも判断する様にして要らない時には効率よく取り下げる様に かつ 判断する 時期も新しいウィンドウ用にも調整して ボタンに移動 の範囲も広げました。同時に何個かのウィンドウを 扱う時にメッセージの順序が正しく廻る様に メッセージの廻し方をウィンドウポストから スレッドポストに 変えました。
一度 フックを取得したら 殆どトラブルも無くする必要も無かった再フック ( バージョン OK + Control )は 無駄になるのでやめました。
多少足りない事も出て それ程の負荷にもならないので記憶するフォルダー数を 384 から 512 に増やしました。
CabwcPos.dll には "OperationStatusWindow" クラス取得のコードが入りました 同時に変えて下さい。
2017/10/05 Ver 2.200
エクスプローラーのエラーでタスクトレイのアイコンが失われた時に内部の保持デートと 整合性がとれなくなり タスクトレイのアイコンを表示出来なくなる事を修正しました。
背景長押し の機能を付加し メニュー コマンドライン /J を新設しました。
画面の解像度が変わった時でも此に追従して自分で再修正出来る様にしました。
CabwcPos.dll は 何らかのシステム上の理由で メッセージ受信のチェーンがおかしくなった時に此を回復する 為に 一時停止 再開 は内部で メッセージ受信のチェーンから外れ 又 チェーンに入る動作にしました。 したがって CabwcPos.exe CabwcPos.dll 同時に変えて下さい。

 最新版 10/05 2017 Ver 2.100 Size 16 kb CabwcPos のダウンロード
−戻る−