右クリックに追加

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
刈谷 真
記事: 18
登録日時: 2005年7月04日(月) 19:29
お住まい: 愛知県

右クリックに追加

#1 投稿記事 by 刈谷 真 »

ABのプログラム講座で、テキストエディターを作りました。

そこで、ファイルやフォルダを右クリックしたときのメニューに"ABtxtで開く"
を追加して、テキストエディターで開く風にしたいのですが、
レジストリの何所に書き込むか困ってます。

また右クリックで開けたとして、ファイルパスをどのように取得すれば良いのですか?
教えてください。
Tomorrow
記事: 72
登録日時: 2005年6月04日(土) 10:09

Re: 右クリックに追加

#2 投稿記事 by Tomorrow »

ある特定の拡張子のファイル(.txtとか独自形式とか)に対してであれば、

HKEY_CLASSES_ROOT\[その拡張子]→(規定)のデータにある文字列をメモ→HKEY_CLASSES_ROOT\[その文字列]\shell

とたどって、既に登録してある拡張子のshell\Open\Commandとかを真似して、Openの代わりにshell\[追加したいメニューの文字列]\Commandという感じにキーを作成してやればOKです。
ファイルパスはコマンドラインから拾えます。

任意の拡張子やフォルダに対してコンテキストメニューを追加したいのであれば「シェルエクステンション」と呼ばれる技術を使わなきゃならないぽいです。
刈谷 真
記事: 18
登録日時: 2005年7月04日(月) 19:29
お住まい: 愛知県

シェルエクステンション

#3 投稿記事 by 刈谷 真 »

Tomorrowさん、ありがとうございます。
おかげさまで、ある特定の拡張子(.txt)を開くのに成功しました。

シェルエクステンションについて色々調べまして、HKEY_CLASSES_ROOT\CLSID
 をいじるという事は分ったのですが、どのようにするのですか。
教えてください。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#4 投稿記事 by イグトランス »

HKEY_CLASSES_ROOT\[その拡張子]→(規定)のデータにある文字列をメモ→HKEY_CLASSES_ROOT\[その文字列]\shell
ここで,[その文字列]を*にすれば,全てのファイルを対象にできます。また,Directoryにすれば,ファイルシステム上の全てのフォルダを対象にできます。
shell\[追加したいメニューの文字列]\Command
レジストリパス上で英数字(ASCIIにある文字?)以外を使うのは推奨されていなかったはずです。日本語を使いたければ,[追加したいメニューの文字列]には仮に英数字のみの名前とし,その中の(規定)のデータで改めて日本語文字を使った名前を使うという風にします。

例えばHKEY_CLASSES_ROOT\mp3file\shell\play\の(規定)は,"再生(&P)"となっており,mp3ファイルの右クリックメニューには,playではなく,再生(P)と表示されます。&はウィンドウ上のメニューと同じでショートカットキーの指定です。
刈谷 真
記事: 18
登録日時: 2005年7月04日(月) 19:29
お住まい: 愛知県

#5 投稿記事 by 刈谷 真 »

イグトランスさん、アドバイスありがとうございます。

全てうまくできました。これは他にも応用できそうですね!
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#6 投稿記事 by イグトランス »

忘れていましたが,HKEY_CLASSES_ROOT (HKEY_LOCAL_MACHINE\Software\Classes)の書き込みは,要注意です。
NT系では標準だとAdministartorsやPower Usersなどそれなりの権限を持ったユーザでないと書き込みできません(ABの関連付けもUsersでは失敗する)。Vista以降はUACも関わり,HKEY_CLASSES_ROOTへ書き込むには,昇格をお願いしなければならなくなっているはずです。

HKEY_CLASSES_ROOTの代わりにHKEY_CURRENT_USER\Software\Classesとすればよい(ただし,ここはユーザ別の設定)のですが,95/98/Meでは使えません。
9xまで対応するなら,必要に応じてHKEY_CLASSES_ROOTかHKEY_CURRENT_USER\Software\Classesを使うかを切り替えなければならないのです。

たまにインストーラで,プログラムを自分自身だけが使うか,コンピュータ上の全てのユーザが使うか選択を求められることがありますが,その理由の1つがこれです。
刈谷 真
記事: 18
登録日時: 2005年7月04日(月) 19:29
お住まい: 愛知県

#7 投稿記事 by 刈谷 真 »

返信遅れました。
イグトランスさん、分かりましたありがとうございます。
返信する