[リストへもどる]
一括表示
タイトル右クリックメニューの拡張について
記事No2780
投稿日: 2012/05/17(Thu) 05:54:38
投稿者UiUicy
Ayacyさん、UiUicyです。ご無沙汰しています。

いじくるつくーるの「右クリックメニューの拡張」のコマンドプロンプト関連の質問です。

コマンドプロンプトの場合、対象ファイルをDOS窓にD&Dしてフルパスを得る操作をよく行うと思います。たとえば階層の異なる2つのファイルのバイナリ比較をするときなどは、fc /B と打っておいて1つのファイルをD&D、そして半角スペース挿入しておいて、もう1つのファイルをD&D、みたいなことをするわけです。

ところがいじくるつくーるで項目を作っておいて出したコマンドプロンプトの場合、D&Dを受け付けないんです。(もしかしてログオンしているユーザーの権限とかにもよって変わるのかもしれないのですが。) たしかXPまではD&Dできて、Vista以降できなくなったように記憶しています。

たとえば
[HKEY_CLASSES_ROOT\*\shell\CMD]
@="コマンドプロンプト"

[HKEY_CLASSES_ROOT\*\shell\CMD\command]
@="cmd.exe /K"
みたいに自分でレジストリをいじれば、ファイルの右クリックでカレントフォルダを起点にして、D&Dが可能なコマンドプロンプトが開きます。いじくるつくーるの場合、Ayacyさん謹製のcontext.exeを介して機能を実現していますが、このcontext.exeの振る舞いによってこのような差が生まれるのでしょうか。

もしもD&Dが可能にできるように対応ができるようでしたらご一考ください。

タイトルRe: 右クリックメニューの拡張について
記事No2781
投稿日: 2012/05/17(Thu) 07:47:51
投稿者Ayacy
そういえば、そういう観点で試したことはないですね。
詳しくは帰宅後に試して見たいと思いますが、おそらく、起動時の権限の違い(エクスプローラは通常権限、コマンドプロンプトを管理権限)で立ち上げている場合にOSの仕様として、そういった振る舞いが起きます。

いじくるつくーるの場合、かならずcontext.exeを通しているわけではなかったと思うので、いじくるつくーるでどの機能を利用しているかも影響すると思います。

タイトルRe^2: 右クリックメニューの拡張について
記事No2782
投稿日: 2012/05/17(Thu) 08:16:58
投稿者Ayacy
少し補足しますと、まず、ユーザーアカウント制御の機能として、一般権限プログラムから管理権限プログラムへのメッセージ送信の一部(ドラッグ&ドロップ等)が禁止されます。これを解除するには管理権限プログラム内での明示的な「手続き」が必要ということになっています。

XPではできていたことがVista以降でできなくなったというのは、この部分のことかと思います。これはOSの仕様です。

次に、いじくるつくーるがcontext.exe経由でプログラムを起動している場合ですが、これは、なにか、そのような設定をユーザー側で行っていた場合だったかと思います。
詳しくは帰宅してから調べたいと思いますが、たしか「コマンドプロンプトを管理権限で起動する」「ひとつ上のフォルダ」のような特殊処理を必要とする機能があって、それを利用している場合にのみ、context.exe経由としていたんじゃないかと思います。
(通常時は、cmd.exeを直接呼んでいたような気がするので)


というわけで、いじくるつくーるのどの機能を利用して、この現象が起きたか、そこをお調べください。

タイトルRe^3: 右クリックメニューの拡張について
記事No2783
投稿日: 2012/05/17(Thu) 18:50:58
投稿者UiUicy
私が設定したのは、「任意のファイル[ローカルのみ]の1つ上のフォルダでコマンドプロンプトを開く」です。OSはWin7です。

Explorer上で任意のファイルを右クリックしてこのメニューを選ぶと、管理者昇格確認ダイアログが出てから、管理者権限でコマンドプロンプトが開きます。

たとえば C:\hoge1\hoge2\hoge.txtの右クリックからならばc:\hoge1\hoge2をカレントにしてプロンプトが開きます。

ちなみに私の最初の投稿のレジストリ設定でも同じ階層で開きますが、こちらは昇格しないで同一ユーザー権限のようです。

よろしくお願いします。

タイトルRe^4: 右クリックメニューの拡張について
記事No2784
投稿日: 2012/05/17(Thu) 19:55:07
投稿者Ayacy
回答ありがとうございました。
「ひとつ上の」系なので、どうやら、規定通りの動作をしたということのようです。

ここで、Context.exeを非管理者用に改造・公開すれば、この問題自体は簡単に解決するのですが、それをやってしまうと、Context.exeを使っている他の多くの機能が動作不良を起こすことになりますから、この方法は取れません。

また、1つのプログラム内で管理者・非管理者用の動きを同居させられないというルールもあるので、単純にプログラムを改修すればよいものでもありません。

良い方法を模索したいと思いますので、気長にお待ちください。

タイトルRe^5: 右クリックメニューの拡張について
記事No2785
投稿日: 2012/05/17(Thu) 20:53:05
投稿者UiUicy
素人考えですが「任意のファイル[ローカルのみ]の1つ上のフォルダでコマンドプロンプトを開く」と「管理者として任意のファイル[ローカルのみ]の1つ上のフォルダでコマンドプロンプトを開く」を分けたらどうでしょう。

前者は
ArrayAdd(lk$[], @"*\Shell\RnsfCmdPrompt*")
ArrayAdd(id$[], lk$[sizeof(lk$[])-1] + 10)
ArrayAdd(it$[], "任意のファイル[ローカルのみ]の1つ上のフォルダでコマンドプロンプトを開く")
ArrayAdd(mn$[], "1階層上でコマンドプロンプト(&P)")
ArrayAdd(cm$[], '"' + GetSystemDirectory$() + 'CMD.EXE" /K CD "%1"')
ArrayAdd(hl$[], "省略")

後者は
ArrayAdd(lk$[], @"*\Shell\RnsfCmdPrompt**")
ArrayAdd(id$[], lk$[sizeof(lk$[])-1] + 10)
ArrayAdd(it$[], "管理者として任意のファイル[ローカルのみ]の1つ上のフォルダでコマンドプロンプトを開く")
ArrayAdd(mn$[], "管理者として1階層上でコマンドプロンプト")
ArrayAdd(cm$[], '"' + GetCurrentDirectory$() + 'context.exe" /MC%1')
ArrayAdd(hl$[], "省略")

みたいな感じでしょうか。いじくるつくーるでは「管理者として…開く」はフォルダのコンテキストメニューとして選択肢が用意されていますが、ファイルのコンテキストメニューとしては用意されていないので。

タイトルRe^6: 右クリックメニューの拡張について
記事No2787
投稿日: 2012/05/17(Thu) 20:56:46
投稿者Ayacy
回答が行き違いになっちゃったみたいですね。

> ArrayAdd(cm$[], '"' + GetSystemDirectory$() + 'CMD.EXE" /K CD "%1"')

CD "%1" となっていますが、"%1" にはファイル名が入ることになりますから、うまくいかないと思います。
また、No.2786にも書いた2つのパターンでうまくいかないかと思います。

タイトルRe^7: 右クリックメニューの拡張について
記事No2788
投稿日: 2012/05/17(Thu) 21:05:40
投稿者UiUicy
> CD "%1" となっていますが、"%1" にはファイル名が入ることになりますから、うまくいかないと思います。
> また、No.2786にも書いた2つのパターンでうまくいかないかと思います。

そうですね。%1はこの場合ファイルですもんね。%~dp1とかだとどうだろうとか思いましたがダメなようですね。

どうもありがとうございました。

タイトルRe^8: 右クリックメニューの拡張について
記事No2789
投稿日: 2012/05/17(Thu) 21:13:54
投稿者Ayacy
> そうですね。%1はこの場合ファイルですもんね。%~dp1とかだとどうだろうとか思いましたがダメなようですね。

そうですね。~dp みたいなのは試してみたのですが、よくよく考えたら、これって for コマンド用の構文だから、使えないんですよね。

タイトルRe^8: 右クリックメニューの拡張について
記事No2791
投稿日: 2012/05/19(Sat) 18:17:19
投稿者Ayacy
とりあえず、本日、「いじくるつくーる ver.7.73.08β」を公開しました。
http://www.yoshibaworks.com/ayacy/inasoft/

context.exeについて、非昇格版であるcontext_noadm.exeを別に作成しまして、そちらにも細かい処理を行わせられるようにしています。

これにより、機能項目「右クリックメニューの拡張」について、管理者権限・一般権限用の項目を明確に分けました。

タイトルRe^9: 右クリックメニューの拡張について
記事No2792
投稿日: 2012/05/20(Sun) 07:25:44
投稿者UiUicy
インストールして使わせていただきました。当方の期待していた通りの挙動になりました。ありがとうございました。

タイトルRe^10: 右クリックメニューの拡張について
記事No2793
投稿日: 2012/05/20(Sun) 08:33:56
投稿者Ayacy
ご確認ありがとうございます。
また何かありましたら、どうぞ。

タイトルRe^11: 右クリックメニューの拡張について
記事No2798
投稿日: 2012/05/26(Sat) 10:38:38
投稿者Ayacy
本日、正式版公開となりました。
http://www.yoshibaworks.com/ayacy/inasoft/

タイトルRe^12: 右クリックメニューの拡張について
記事No2799
投稿日: 2012/05/29(Tue) 22:43:04
投稿者Ayacy
いじくるつくーるの最新版につきまして、ダウンロードしようとすると、一部のURLにてウイルスバスターが「オンライン詐欺に関係していることを確認した」という、誤った警告メッセージを出力することを確認しました。

今月上旬の「すっきり!! デフラグ」の件のときもそうでしたが、明らかな誤警告ですので、問題ありません。

トレンドマイクロへは問合せを行っていますが「わからない」という回答のみが返ってきておりまして、もう少し強く追求してみたいと考えています。

タイトルRe^13: 右クリックメニューの拡張について
記事No2800
投稿日: 2012/06/04(Mon) 11:25:10
投稿者Ayacy
ご報告が遅れましたが、現時点でウイルスバスター誤警告は表示されなくなっています。

詳細はこちら。
http://www.yoshibaworks.com/ayacy/inasoft/talk/h201205c.html

トレンドマイクロからは、誤検知であった旨の報告と謝罪がありましたが、今回が初めてのことではないことやサポート期間中も誤警告が増え続けていたことから、徹底した再発防止策を要求しています。

タイトルRe^4: 右クリックメニューの拡張について
記事No2786
投稿日: 2012/05/17(Thu) 20:53:11
投稿者Ayacy
> ちなみに私の最初の投稿のレジストリ設定でも同じ階層で開きますが、

こちらについても補足しておきますと、この設定方法の場合、全体を通して一貫した動きを提供できないという問題があります。

具体的には、ただ cmd.exe /K (/Kは不要?と思われる)とした場合、そのときのエクスプローラのカレントディレクトリを引き継いで、cmd.exeを実行することになります。

そのため、この場合は2つの問題があり、

・ファイルの置かれている場所とカレントディレクトリが異なるとうまくいかない。
 →単純な実験として、エクスプローラの「検索」で見つかったファイルに対しては適用できない。
・ファイルの置かれている場所がUNCパスの場合、うまくいかない。
 →いじくるつくーるの場合、pushdコマンドを経由することにより、UNCパスをZ:\などの空きドライブに割り当てる処理を行っています。

となり、必ずしもファイルの置かれているフォルダで、コマンドプロンプトが開かないことになります。

タイトルRe^5: 右クリックメニューの拡張について
記事No2790
投稿日: 2012/05/17(Thu) 21:19:23
投稿者Ayacy
もう一つ、ショートカットファイルに対して適用した場合の挙動が異なるというのもありました。
まぁこれは蛇足みたいなもんですが。