エクスプローラのフォルダ選択右クリックメニューから
あるプログラムを実行したく、レジストリに下記キーを追加しました。
HKEY_CLASSES_ROOT\Folder\Shell\Test\command
確かにエクスプローラのフォルダ選択右クリックメニューで
Testというメニューが追加されるのですが、
タスクバーの「スタート」の右クリックメニューにもTestという
メニューが追加されてしましまい、意図にそいません。
タスクバーの「スタート」の右クリックメニューにはTestを出さない
ようにする方法を教えて頂けませんか。
難しいと思う。
あのメニューは、スタートメニューフォルダに対して出るものと同じだからね。
コンテキストメニューハンドラを書いて、スターとメニューフォルダだけ個別に除外す
れば、できないこともない。
ただし、その場合、スタートボタンではなく、
C:\Documents And Settings\<UserName>\スタート メニュー
フォルダにもメニューが出なくなってしまうんじゃないかな。
スタートボタンがクリックされたのか、スタートメニューフォルダがクリックされたの
か判別できる方法があるかなぁ…。マウス座標から判断する?
ご回答、ありがとうございまうす。
>あのメニューは、スタートメニューフォルダに対して出るものと同じだからね。
スタートの右クリックメニューには、
例えば、「開く- All users(P)」、「エクスプローラ- All users(X)」等があり、
通常のエクスプローラのフォルダ右クリックに対して出るのとは
違うのかな~と思ったので、思考錯誤していました。
ちなみにWINXP HOMEです。
例えば、「フォルダにコピー」というメニューは、
HKEY_CLASSES_ROOT/AllFilesystemObjects/ContextMenuHandlers/Send To
が出ているようですが、これは、スタートの右クリックメニューには
でてきません。
なんとか、実現方法はないですか?
> 例えば、「開く- All users(P)」、「エクスプローラ- All users(X)」等があり、
それはスタートボタンだけの特別扱いでしょう。
つまり、スタートボタンには、
・「開く- All users(P)」、「エクスプローラ- All users(X)」等が出る
これはスタートボタンだけの独自メニュー
・加えて、スタートメニューフォルダのメニューが出る
・ただし「送る」「切り取り」「コピー」等は出ない
ということだと。
標準項目の「切り取り」「コピー」「削除」「名前の変更」等を消すのは難しくないと
思うんだけどね…たぶん。
> 例えば、「フォルダにコピー」というメニューは、
ウチのマシンにはこれがありません。何か拡張機能を導入されているのでは?
> HKEY_CLASSES_ROOT/AllFilesystemObjects/ContextMenuHandlers/Send To
> が出ているようですが、
これは「送る」機能だな。こんなキーあったなんて知らなかった。
> これは、スタートの右クリックメニューにはでてきません。
法則性がわかんないなぁ。どうなってんだろ。
HKEY_CLASSES_ROOT \ Directory \ Shell
HKEY_CLASSES_ROOT \ Folder \ Shell
HKEY_CLASSES_ROOT \ AllFileSystemObjects \ Shell
以上3箇所に適当なメニューを追加してみたが、適当なフォルダ、スタートメニューフ
ォルダ、スタートボタンの全てに適用された。
HKEY_CLASSES_ROOT/AllFilesystemObjects/ContextMenuHandlers/Send To
をいじって、メニューが出ないようにしてみると、通常のファイル/フォルダのメニュ
ーから「送る」が消えてしまった。このキーが「送る」メニューを出していることは確
実なんだが…スタートボタンはどうやってこいつを避けているんだろ。
やはり、シェル拡張内で、「現在フォーカスを持っているのがスタートボタンだったら
出さない」という選択を行っているんだろうか。
ご回答ありがとう御座います。
どうやってスタートボタンだったらと判断しているかはわかりませんでした。
右クリックメニューの「ウイルス検索実行」も同じようにやっているはずなので、
われわれでも、制御可能なはずだと思います。
最初はレジストリをいじれば簡単にできるのかな~と期待していましたが、
そんなにあまくないかも知れません。
初心者に近く、全然わかっていませんが、下記方法で実現できるでしょうか。
①クラスIDを決める
②メニュー拡張用のクラスを作成して、DLLとしてコンパイル
→QueryContextMenuで何らかの判断をさせる?
③レジストリに登録
とりあえず、また来週末に調べてみようと思います。
> 右クリックメニューの「ウイルス検索実行」も同じようにやっているはずなので、
> われわれでも、制御可能なはずだと思います。
ほー。何のソフトを使われてます?
ウチの Notron 2005 はスタートボタン右クリックにもスキャンメニューが出ちゃいま
す。
> ①クラスIDを決める
フォルダに対するメニュー拡張ならば、クラス ID は Folder か Directory でしょう。
> QueryContextMenuで何らかの判断をさせる?
これが肝要ですね。
どうやって、現在のメニューの対象が「スタートボタンではない」ことを判定している
のか。
スタートボタンではメニューは出てはならず、しかし、スタートメニューフォルダでは
出なければならないというのを、どのように区別するか。
IContextMenu::QueryContextMenuに渡されるフラグでは判断するのは強引ですかね?
とりあえずXP、2000環境でスタートボタン右クリックのときは
2(=CMF_VERBSONLY)のみがセットされてくるようですが。
普通のショートカットファイルを右クリックのときは
他のフラグもついてくるようだからもしかしたら判断は可能かも?
>やはり、シェル拡張内で、「現在フォーカスを持っているのがスタートボタンだったら
>出さない」という選択を行っているんだろうか。
この方法を試してみようと思ったのですが
スタートボタンを右クリックしただけではフォーカスが移らないのか、
ボタンが選択状態がある場合でないとうまくいきませんでした。