ファイルの順番が常に降順になってしまうときは

雑記
スポンサーリンク

はじめに

以前、インターネット上で何かファイルを保存しようとするたびに、表示されるダイアログ形式のエクスプローラにて、毎回ファイルが昇順ではなく降順に表示されてしまうという事件が起きました。

右クリックから並び替えすれば元に戻るのですが、エクスプローラでファイルを開くたびにまたアイコンが降順に並べ替えられてしまうという呪いです。しかも、「すべてのフォルダに適用」をしてもならない。

それから、数ヶ月後、直す方法をようやく見つけて、まあその場限りで直せたのですが、なぜ直ったか、いまいちよく分からなかったので、もう一度調べてみようと思いました。

ここに記載してある内容は、Windows XPでの話となります。最新のOSでは、原因が違う可能性が御座いますのでご了承ください。

原因について

設定が記載されたレジストリ

問題はエクスプローラの設定が保存されている以下のレジストリでした。

\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellState

レジストリの情報

中は36byteのバイナリで記述されているのですが、この中には一体なにが書きこまれているのか、調べてみました。

typedef struct {
BOOL fShowAllObjects:1; 全てのファイルを表示する
BOOL fShowExtensions:1; 拡張子を表示する
BOOL fNoConfirmRecycle:1;  削除するときに確認を表示する
BOOL fShowSysFiles:1; システムファイルを表示する
BOOL fShowCompColor:1; 暗号化や圧縮されたNTFS圧縮ファイルをカラーで表示する
BOOL fDoubleClickInWebView:1; ダブルクリックでウェブ上に表示する
BOOL fDesktopHTML:1; アクティブデスクトップを使用する
BOOL fWin95Classic:1; enforce Microsoft Windows 95 Shell behavior and restrictions. 訳すの面倒
BOOL fDontPrettyPath:1; prevent the conversion of the path to all lowercase characters. 訳すの面倒
BOOL fShowAttribCol:1; 使用されていない
BOOL fMapNetDrvBtn:1; NetworkDriveを表示する
BOOL fShowInfoTip:1; ファイルやフォルダでポップアップで説明を表示する
BOOL fHideIcons:1; デスクトップのアイコンを隠す
BOOL fWebView:1; ウェブページとして表示する
BOOL fFilter:1; 使用されていない
BOOL fShowSuperHidden:1; OSのファイルを表示する
BOOL fNoNetCrawling:1; 自動で無効なネットワークドライブやプリンタを調べる
DWORD dwWin95Unused; 使用されていない
UINT uWin95Unused; 使用されていない
LONG lParamSort; ★アイコンを並び替える★
int iSortDirection; ★アイコンの名前でアルファベットにおいて、1で昇順ソート・-1で降順ソートを行う★
UINT version; 使用されていない
UINT uNotUsed; 使用されていない
BOOL fSepProcess:1; ウィンドウズのフォルダを個別のプロセスで起動する
BOOL fStartPanelOn:1; スタートメニューをクラシックスタイルではなく、XP風にする(XPのみ)
BOOL fShowStartPage:1; 使用されていない
BOOL fAutoCheckSelect:1; フォルダをクラシックスタイルではなく、Vista風にする(Vistaのみ)
BOOL fIconsOnly:1; サムネイルを利用せずに、一般的なアイコンのみ表示する(Vistaのみ)
BOOL fShowTypeOverlay:1; 実行ファイルのアイコン?サムネイルのこと?なんたらかんたら(Vistaのみ
UINT fSpareFlags:13; 字あまり
} SHELLSTATE, *LPSHSHELLSTATE;

SHELLSTATE Structure ()より

UINT fSpareFlags:13;のビットフィールドだけ、内容がどのようになっているのかは分かりませんでした。

問題の設定値について

恐らく、上記の設定の中でソート関係の設定、つまり、「lParamSort」と「iSortDirection」が、その変なことを起こさせる原因になっていたのではないかと推測されます。

この2つの設定は、LONG型と、int型であることから、両方とも4byteの情報となっており、ビットフィールドを用いなくても表現できるデータいます。そのため、修正する場合は直接数値をいじれば治るかと思います。デフォルトの値は0のため、この2つの項目を両方とも0にしてみるとよいです。

上下にあるBOOL型は、:1とあるようにビットフィールドが必要であるため、編集は少し面倒そうです。

設定を実際に確認してみる

ShellStateチェックをダウンロード

上のソフトは、レジストリを読み書き、内容表示するソフトウェアをHSP言語で作ってみたものです。

実際は拡張子は表示させているのに「fShowExtensions」がFALSEになっていたり、未使用のはずの「dwWin95Unused」や「fSpareFlags」によくわからない数字が書き込まれていました。うーん。私のソフトのバグなのかな・・・。まだ先月にWindowsインストールしたからレジストリはあんまり汚れていないと思うのですが。

参考にしたサイト

コメント

タイトルとURLをコピーしました