stylesheet

2011-04-23

Windows7エクスプローラー詳細ペインの位置を上にする

Windows7のshell32.dllをResHackerで改造して、エクスプローラーの詳細ペインの位置を上にしてみた。
詳細ペインのサイズを大きめにすると見た目の調和もいい感じに思えるがどうだろうか。

編集前の準備

shell32.dllは保護されたシステムファイルに該当するので、所有者の横取りとアクセス権限の追加が必要になる。(Windows7 保護されたシステムファイルの編集方法
編集を開始する前にバックアップと上記作業は済ませておく。

また、リソースの編集にResHackerを使用するので、インストールしておく。

shell32.dllの編集

  1. %systemroot%\system32\shell32.dllを適当な場所にコピーする。
  2. コピーしたshell32.dllをResHackerで開く。
  3. "UIFILE -> 3 -> 1033"を選択。
  4. "<TemplateBackground id="atom(PreviewContainer)..."の"layoutpos"属性を"bottom"から"top"へ編集。
    <!-- <TemplateBackground id="atom(PreviewContainer)" height="53rp" layoutpos="bottom" layout="filllayout()"> -->
    <TemplateBackground id="atom(PreviewContainer)" height="53rp" layoutpos="top" layout="filllayout()">
  5. "<Sizer id="atom(PreviewPaneSizer)..."の"layoutpos"を"top"から"bottom"へ、"SlidesUpAndDown"を"false"から"true"へ編集。
    <!-- <Sizer id="atom(PreviewPaneSizer)" sizingtarget="atom(PreviewContainer)" FramePersistType="2" SlidesUpAndDown="true" layoutpos="bottom" DownOrRightGrowsTarget="true"/> -->
    <Sizer id="atom(PreviewPaneSizer)" sizingtarget="atom(PreviewContainer)" FramePersistType="2" SlidesUpAndDown="true" layoutpos="bottom" DownOrRightGrowsTarget="true"/>
    "UIFILE -> 3 -> 1033"の全体は以下のようになる。
    <duixml>
    <Element resid="FolderLayout" layout="shellborderlayout()" sheet="genericlayoutstyle">
    <TemplateBackground id="atom(PreviewContainer)" height="53rp" layoutpos="top" layout="filllayout()">
    <TemplateBackground id="atom(PreviewShineLayer)"/>
    <PreviewBackground id="atom(BackgroundClear)" background="ARGB(0, 0, 0, 0)" layout="borderlayout()">
    <PreviewThumbnail ModuleID="PreviewThumbnailModule" MaxThumbSize="256" layoutpos="Left"/>
    <Element layoutpos="Client" layout="filllayout()">
    <PreviewMetadata ModuleID="PreviewMetadataModule" NullSelectPropertyString="prop:*System.OfflineStatus;*System.OfflineAvailability" layoutpos="Client"/>
    </Element>
    </PreviewBackground>
    <Sizer id="atom(PreviewPaneSizer)" sizingtarget="atom(PreviewContainer)" FramePersistType="2" SlidesUpAndDown="true" layoutpos="bottom" DownOrRightGrowsTarget="true"/>
    </TemplateBackground>
    <TemplateBackground id="atom(ReadingPane)" layout="filllayout()" layoutpos="right">
    <PreviewThumbnail ModuleID="ReadingPaneThumbnailModule" HideProperty="PreviewHandlerRunning" Vertical="true" layoutpos="client" background="ARGB(0, 0, 0, 0)"/>
    <ReadingPaneModule ModuleID="ReadingPaneModule" layoutpos="none"/>
    </TemplateBackground>
    <Sizer id="atom(ReadingPaneSizer)" sizingtarget="atom(ReadingPane)" GrowTargetFirst="true" SlidesUpAndDown="false" PrioritySizer="atom(PageSpaceControlSizer)" DownOrRightGrowsTarget="false" FramePersistType="2" layoutpos="Right"/>
    <ProperTreeModule id="atom(ProperTree)" ModuleID="ProperTreeModule" sheet="documentslayoutstyle" layoutpos="Left"/>
    <Element id="atom(ViewHostContainer)" layoutpos="Client" sheet="documentslayoutstyle" layout="borderlayout()">
    <LibraryPaneModule id="atom(LibraryPaneModule)" ModuleID="LibraryPaneModule" layoutpos="top"/>
    <ViewHost id="atom(clientviewhost)" layout="borderlayout()" layoutpos="client">
    </ViewHost>
    </Element>
    </Element>
    </duixml>
    
  6. "Compile Script"ボタンを押す。
  7. UIFILEの3,4,5,6,15,16,19,20,21番について繰り返し同じように編集する。
  8. 上書き保存する。

改造したshell32.dllへ置き換え

  1. %systemroot%\system32\shell32.dll をリネームする。(shell32.backup.dllなど)
  2. 改造した shell32.dll を %systemroot%\system32 へ移動する。
  3. 再起動する。

改造に失敗するとエクスプローラーの表示がおかしくなるのでバックアップは必須。最悪の場合は、Windowsが壊れる。
万一に備えて、再起動の前に復元方法は頭に叩き込んでおく。

また、以上の手順をおこなってもデバイスやゲーム等、一部のページには反映されない。これらのページは編集すべきdllが別となっているのでそちらを同じように編集する。

appwiz.cpl
DeviceCenter.dll
fonttext.dll
gameux.dll

それぞれのファイルを開いて"PreviewContainer"で検索するといいと思う。

尚、リソースの書き換え内容は以下のチュートリアルを参考にした。