Windowsエクスプローラの右クリックメニューの追加 – プログラミング – Home

Windowsエクスプローラの右クリッ...
 
通知
すべてクリア

Windowsエクスプローラの右クリックメニューの追加


三浦
 三浦
(@三浦)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

エクスプローラのフォルダ選択右クリックメニューから
あるプログラムを実行したく、レジストリに下記キーを追加しました。
HKEY_CLASSES_ROOT\Folder\Shell\Test\command

確かにエクスプローラのフォルダ選択右クリックメニューで
Testというメニューが追加されるのですが、
タスクバーの「スタート」の右クリックメニューにもTestという
メニューが追加されてしましまい、意図にそいません。

タスクバーの「スタート」の右クリックメニューにはTestを出さない
ようにする方法を教えて頂けませんか。


引用解決済
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

難しいと思う。
あのメニューは、スタートメニューフォルダに対して出るものと同じだからね。

コンテキストメニューハンドラを書いて、スターとメニューフォルダだけ個別に除外す
れば、できないこともない。
ただし、その場合、スタートボタンではなく、
 C:\Documents And Settings\<UserName>\スタート メニュー
フォルダにもメニューが出なくなってしまうんじゃないかな。

スタートボタンがクリックされたのか、スタートメニューフォルダがクリックされたの
か判別できる方法があるかなぁ…。マウス座標から判断する?


返信引用
三浦
 三浦
(@三浦)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

ご回答、ありがとうございまうす。

>あのメニューは、スタートメニューフォルダに対して出るものと同じだからね。

スタートの右クリックメニューには、
例えば、「開く- All users(P)」、「エクスプローラ- All users(X)」等があり、
通常のエクスプローラのフォルダ右クリックに対して出るのとは
違うのかな~と思ったので、思考錯誤していました。
ちなみにWINXP HOMEです。

例えば、「フォルダにコピー」というメニューは、
HKEY_CLASSES_ROOT/AllFilesystemObjects/ContextMenuHandlers/Send To
が出ているようですが、これは、スタートの右クリックメニューには
でてきません。

なんとか、実現方法はないですか?


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> 例えば、「開く- 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
をいじって、メニューが出ないようにしてみると、通常のファイル/フォルダのメニュ
ーから「送る」が消えてしまった。このキーが「送る」メニューを出していることは確
実なんだが…スタートボタンはどうやってこいつを避けているんだろ。
やはり、シェル拡張内で、「現在フォーカスを持っているのがスタートボタンだったら
出さない」という選択を行っているんだろうか。


返信引用
三浦
 三浦
(@三浦)
ゲスト
結合: 19年前
投稿: 3
Topic starter  

ご回答ありがとう御座います。
どうやってスタートボタンだったらと判断しているかはわかりませんでした。
右クリックメニューの「ウイルス検索実行」も同じようにやっているはずなので、
われわれでも、制御可能なはずだと思います。

最初はレジストリをいじれば簡単にできるのかな~と期待していましたが、
そんなにあまくないかも知れません。
初心者に近く、全然わかっていませんが、下記方法で実現できるでしょうか。
①クラスIDを決める
②メニュー拡張用のクラスを作成して、DLLとしてコンパイル
 →QueryContextMenuで何らかの判断をさせる?
③レジストリに登録

とりあえず、また来週末に調べてみようと思います。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> 右クリックメニューの「ウイルス検索実行」も同じようにやっているはずなので、
> われわれでも、制御可能なはずだと思います。

ほー。何のソフトを使われてます?
ウチの Notron 2005 はスタートボタン右クリックにもスキャンメニューが出ちゃいま
す。

> ①クラスIDを決める

フォルダに対するメニュー拡張ならば、クラス ID は Folder か Directory でしょう。

> QueryContextMenuで何らかの判断をさせる?

これが肝要ですね。
どうやって、現在のメニューの対象が「スタートボタンではない」ことを判定している
のか。
スタートボタンではメニューは出てはならず、しかし、スタートメニューフォルダでは
出なければならないというのを、どのように区別するか。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

IContextMenu::QueryContextMenuに渡されるフラグでは判断するのは強引ですかね?
とりあえずXP、2000環境でスタートボタン右クリックのときは
2(=CMF_VERBSONLY)のみがセットされてくるようですが。
普通のショートカットファイルを右クリックのときは
他のフラグもついてくるようだからもしかしたら判断は可能かも?

>やはり、シェル拡張内で、「現在フォーカスを持っているのがスタートボタンだったら
>出さない」という選択を行っているんだろうか。
この方法を試してみようと思ったのですが
スタートボタンを右クリックしただけではフォーカスが移らないのか、
ボタンが選択状態がある場合でないとうまくいきませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました