初めまして、こんにちわ
質問なのですが下記のようにエクスプローラを開いて
その表示されたエクスプローラのツールバーを非表示にするにはどうしたらよいのでしょうか?
よろしくお願いします。
ShellExecute(0,"open","explorer","/e,/root=e:\\",NULL,SW_SHOW);
環境はVC++6.0 MFC WinXP ProsSP2です
単純に考えると、
メニューの 表示 → ツールバー → 標準のボタン
のチェックをはずした状態にすればいいということになるので、
起動したエクスプローラを探して、ウィンドウハンドルを取得し、
WM_COMMANDでSendMessageをすればよさそうです。
「表示 → ツールバー → 標準のボタン」のIDはSpy++を使って調べれます。
// ダイアログクラスから操作する例
// ShellExecuteでopenを指定してExplorer起動するとクラス名は「CabinetWClass」になる。
// 第2引数にパスを指定できればよいが、ルートディレクトリの場合
// ボリューム名(であっていたかな)が、パスの前についてしまうので。
// 例) C:\\ を指定すると 「Windows (C:)」 というウィンドウタイトルになるため
// 複数起動している場合、FindWindowExで1つずつ調べる必要がありそう。
CWnd* pWnd = this->FindWindow( TEXT( "CabinetWClass" ), NULL );
// WinXP ProsSP2でSpy++で調べたところIDは0xA204だった
pWnd->SendMessage( WM_COMMAND, ( WPARAM )0xA204, ( LPARAM )0L );
> WM_COMMANDでSendMessageをすればよさそうです。
はまずいことに気づきました。
もともと、「表示 → ツールバー → 標準のボタン」にチェックが入っていない場合、
逆に表示してしまいますな。
SendMessageする前にメニューの状態を調べる必要があるようです。
いろいろ調べたところ、Explorerのメニューらしきものは、GetMenuから取得できないっぽいです。
(メニューではなく、ToolbarWindow32らしい)
ですので、、「表示 → ツールバー → 標準のボタン」をチェックするのは難しいかもと思います。
Shell32系のCOMを使って、何とかできるかもと思ったけど、ShellFolderViewオブジェクトの
ToolBarプロパティではメニューらしきものと、標準のボタン、アドレスバーとすべて消えます。
小出しですみませんが、Windows Xp Sp2のExplorerでは、「標準のボタン」と呼ばれるコントロールは
CabinetWClass
+ WorkerW (0xA005)
+ ReBarWindow32 (0xA005)
+ ToolbarWindow32 (0xA000)
のコントロールです。
で、
>pWnd->SendMessage( WM_COMMAND, ( WPARAM )0xA204, ( LPARAM )0L );
を送る前に、このウィンドウハンドルを取得して、IsWindowで表示しているかどうかチェックすればよさそう。
if ( ( int )::ShellExecute( 0, _T( "open" ), _T( "explorer" ),
_T( "/e,/root=e:\\" ), NULL, SW_SHOW ) >= 32 )
{
CWnd* pExplorer;
// CabinetWClass か ExploreWClass
while ( ( pExplorer = this->FindWindow( _T( "ExploreWClass" ), NULL ) ) == NULL );
while ( !pExplorer->IsWindowVisible() );
CWnd* pWork = pExplorer->GetDlgItem( 0xA005 );
if ( pWork )
{
CWnd* pReBar = pWork->GetDlgItem( 0xA005 );
if ( pReBar )
{
CWnd* pToolBar = pReBar->GetDlgItem( 0xA000 );
if ( pToolBar && pToolBar->IsWindowVisible() )
{
pExplorer->SendMessage( WM_COMMAND, ( WPARAM )0xA204, ( LPARAM )0L );
}
}
}
}
Blueさん。
無事ツールバーも非表示にできました。
それにわかりやすい説明で非常に参考になりました。
本当にありがとうございました。
ツイート | ![]() |