喫茶XRAYトップページ

[スレッド全体
]

[3940] エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/21 (日) 23:54:38 Mr.XRAY
Windows XPでは,どうしても「ナビゲーション・ペイン」というのを
非表示にできないようですが,Vista以降ではAPIが追加されて可能に
なったようです.

エクスプローラ関係のシェルインターフェイスを実装するんですが,
中々情報がありません.
探してみたら,以下のサイトに貴重な記事がありました.
http://eternalwindows.jp/index.html

結構詳しい説明があります.
エクスプローラのフォルダツリー,フォルダビュー(ファイルリスト)
の表示が実現できました.
残念ながら,Vista以降,Delphi 2010以上でないと利用できません.

http://mrxray.on.coocan.jp/Delphi/plSamples/947_ExplorerBrowsert.htm

エクスプローラのもつ機能とほとんど同じ,でなければ,Delphiに
付属しているシェルコンポーネントを使うことになるかと思います.


[3942] Re:エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/22 (月) 17:42:34 宮 〔HomePage
▼ Mr.XRAYさん
> Windows XPでは,どうしても「ナビゲーション・ペイン」というのを
> 非表示にできないようですが,Vista以降ではAPIが追加されて可能に
> なったようです.


あのぉ〜はずしていたらご免下さい。
「ナビゲーション・ペイン」というのが「ファイルとフォルダのタスク」のことなのか
分かりませんが、もしそれならXPでは
コントロールパネル→パフォーマンスとメンテナンス→システム
→詳細設定タブ→パフォーマンスの設定→
「フォルダでよく使用するタスクを使用する」→
→チェックをはずす→適用
で非表示になるのでは・・・・・?


> http://mrxray.on.coocan.jp/Delphi/plSamples/947_ExplorerBrowsert.htm
>
> エクスプローラのもつ機能とほとんど同じ,でなければ,Delphiに
> 付属しているシェルコンポーネントを使うことになるかと思います.


今後大いに参考にさせていただきます。
ありがとうございます。

[3943] Re2:エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/22 (月) 18:13:27 Mr.XRAY
▼ 宮さん

> コントロールパネル→パフォーマンスとメンテナンス→システム
> →詳細設定タブ→パフォーマンスの設定→
> 「フォルダでよく使用するタスクを使用する」→
> →チェックをはずす→適用


おおっ,こんな設定があったんですね.
これでWindows 2000よりも前のと同じになります.
すると,やはりAPIにあるのかな?
MSDNを結構さがしたんですけど.


[3944] Re3:エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/22 (月) 20:14:39 宮 〔HomePage
▼ Mr.XRAYさん

> すると,やはりAPIにあるのかな?
> MSDNを結構さがしたんですけど.


よく分かりませんが、マスターに
エクスプローラー周りをがっちりやってもらうため、
今からリクエストしておこ〜っと(他力本願(^_^;))

下記は以前小生のブラウザに付けていた機能で
ユーザーが自由に邪魔なペインを消せるようにしていたのですが
Win7では、@EnumWinProcUpdateが未定義となりコンパイルできないため
いまは取り外してあります。
(どうしてなのかの判断能力無し)
7になれば無用なので、しかしまだXPも多そうだし。迷っているところです。


//フォルダペインを変更した後レジストリを更新する
function EnumWinProcUpdate(aHandle: HWND; param: Pointer): BOOL; stdcall;
var
  wName :array [0..79] of Char;
begin
  Result := True;
  GetClassName(aHandle, wName, 80);
  if (StrLIComp(wName, 'ExploreWClass', 80) = 0) or
     (StrLIComp(wName, 'CabinetWClass', 80) = 0) then begin
    SendMessage(aHandle, WM_COMMAND, 28931, 0);
  end;
end;

//ファイルとフォルダのタスクを消す
procedure TformMDI.NotDispTaskPainClick(Sender: TObject);
const
    News='\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced';
var
    Reg:TRegistry;
begin
    if MessageDlg('サムネイル画面の「フォルダのタスク」窓を非表示にしますか?'
                +#13#10+#13#13+'これは、エクスプローラでも表示しません。XP以外はヘルプ参照',
                mtConfirmation, [mbYes, mbNo], 0)=mrNo  then exit;

    Reg:=TRegistry.Create;
    with Reg do
    begin
        try
            RootKey:=HKEY_CURRENT_USER;
            if OpenKey(News , False) then begin
                WriteInteger('WebView' , 0);
                reg.CloseKey;
            end;
            //更新
            EnumChildWindows(0, @EnumWinProcUpdate, 0);
        finally
            Free;
        end;
    end;
end;
//ファイルとフォルダのタスクを表示する
procedure TformMDI.DispTaskPainClick(Sender: TObject);
const
    News='\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced';
var
    Reg:TRegistry;
begin
    if MessageDlg('サムネイル画面で「フォルダのタスク」窓を表示しますか?'
                +#13#10+#13#13+'これは、エクスプローラでも表示します。XP以外はヘルプ参照',
                mtConfirmation, [mbYes, mbNo], 0)=mrNo  then exit;

    Reg:=TRegistry.Create;
    with Reg do
    begin
        try
            RootKey:=HKEY_CURRENT_USER;
            if OpenKey(News , False) then begin
                WriteInteger('WebView' , 1);
                reg.CloseKey;
            end;
            //更新
            EnumChildWindows(0, @EnumWinProcUpdate, 0);
        finally
            Free;
        end;
    end;
end;



[3952] Re4:エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/24 (水) 09:28:06 ぽむぽむ
▼ 宮さん

> //フォルダペインを変更した後レジストリを更新する
> function EnumWinProcUpdate(aHandle: HWND; param: Pointer): BOOL; stdcall;
> var
>   wName :array [0..79] of Char;
> begin
>   Result := True;
>   GetClassName(aHandle, wName, 80);
>   if (StrLIComp(wName, 'ExploreWClass', 80) = 0) or
>      (StrLIComp(wName, 'CabinetWClass', 80) = 0) then begin
>     SendMessage(aHandle, WM_COMMAND, 28931, 0);
>   end;
> end;


横レスで恐縮ですが、28931($7103) は、 Vista 以降、41504($A220) に
変わっていたはずです・・・が、環境がなくてテストできません。

Windows 7 Home で、41504を使ってリフレッシュするプログラムがあり、
動作確認していますが、ソースがなくて、28931で動作しない確認が
とれません。


参考資料
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200711/07110034.txt
http://hpcgi1.nifty.com/MADIA/DelphiBBS/wwwlng.cgi?print+200809/08090055.txt

[3954] Re5:エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/24 (水) 14:21:03 Mr.XRAY
▼ ぽむぽむさん,どうもです.

> 横レスで恐縮ですが、28931($7103) は、 Vista 以降、41504($A220) に
> 変わっていたはずです・・・が、環境がなくてテストできません。


Windows 7 + Delphi 2010でテストしてみました.
宮さんのコードそのままで,この値だけ変えてみました.
変更されませんでした.
下図の設定をする時に,コマンドの発行をフックして調べれば何か
わかるかも知れませんが,やっていません.そのうちに.
(サンプルプログラム集の[947]の時はフックして調べました)

あるいは,ナビゲーションペインの場合は,また違うのかも知れません.


[3959] Re6:エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/25 (木) 10:15:59 ぽむぽむ
▼ Mr.XRAYさん

> あるいは,ナビゲーションペインの場合は,また違うのかも知れません.

レイアウトの変更のレジストリは、ここのようです。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\
Explorer\Modules\GlobalSettings\Sizer

ですが、ここを変更しても、SendMessage&WM_COMMANDでは
反応してくれないようです。

いずれかのウインドウで設定を変更すると、次回以降開いた分は、
設定が反映されますが現在開いているウインドウには影響ないようです。
拡張子の表示有無のような、表示内容の変更とは違うようですね。


[3960] Re7:エクスプローラのような(続) Vista,D2010以降限定返信 削除
2010/11/25 (木) 10:42:52 Mr.XRAY
▼ ぽむぽむさん.どうもです.

> 設定が反映されますが現在開いているウインドウには影響ないようです。
> 拡張子の表示有無のような、表示内容の変更とは違うようですね。


なるほど.そういうことですか.
レジストリの情報ありがとございます.
例によって,サンプルの見直しはいつになるかわかりませんが,
利用させていただきます.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82