ここでは、インターネット エクスプローラ(以下 IE)の右クリックメニュー(コンテキストメニュー)に、 自分の好きな項目を追加する方法を解説します。 まあ私が書くまでもなく MSDN ライブラリにも載っていますが、 MSDN ライブラリは C 言語しちゃってて VB オンリーのユーザーにはわかりにくい点もあったので、 VB 初心者の方にもわかりやすく書き換えてみた・・・つもりです(^^;
![]() |
とりあえずどんな処理を行いたいか決めましょう。
う〜ん、じゃあとりあえずサンプルとして「選択した文字列を Google で検索する」という処理でも作ってみることにします(^^;
実行する処理は、HTML ファイルに VBScript や JavaScript などで記述します。
ここはいちおう「VB コーナー」なので VBScript で書いてみます。
|
これを Google.htm というファイル名で保存します。名前は何でもかまいませんが、
拡張子は HTML ファイルの .htm または .html にします。
オブジェクトや Google の検索キーなどについてはここでは詳しく説明しません。
オブジェクトについては MSDN ライブラリまたは、とほほさんのとほほのWWW入門の JavaScript リファレンスなどを参考にして下さい。
しかしこれだけでは URL エンコードなどがされていないため、
正しい検索結果が得られないこともあります。
実際に Google 検索機能を IE につけたいという方は、
次にレジストリにキーを追加します。IE のコンテキストメニューの項目は
HKEY_CURRENT_USER Software Microsoft Internet Explorer MenuExtとなります。MSDN ライブラリをお持ちの方は、 「[InetSDK] ブラウザの標準コンテキストメニューに項目を追加する」に詳しい情報が記述されていますので、 そちらも併せてご覧下さい。てゆうか、MSDN ライブラリがあれば私のページなんて参考にしなくてもよいです(^^;
HKEY_CURRENT_USER Software Microsoft Internet Explorer MenuExt &Google で検索
#define CONTEXT_MENU_DEFAULT 0 #define CONTEXT_MENU_IMAGE 1 #define CONTEXT_MENU_CONTROL 2 #define CONTEXT_MENU_TABLE 3 #define CONTEXT_MENU_TEXTSELECT 4 #define CONTEXT_MENU_ANCHOR 5 #define CONTEXT_MENU_UNKNOWN 6C/C++ なら以下のようにビットシフト演算子を用いて値を求めることができます。
dwContextValue = 0x1 << CONTEXT_MENU_TEXTSELECT;VB にはビットシフト演算子はないので、このように計算するしかありません。
lngContextValue = &H1 * (2 ^ CONTEXT_MENU_TEXTSELECT)しかしいちいち毎回計算する意味はなさそうなので、CONTEXT_MENU 定数を計算された値に置き換えてしまいます。 本当はあまりよくないと思いますが・・・(^^;
Public Const CONTEXT_MENU_DEFAULT = &H1 '通常右クリックした時 Public Const CONTEXT_MENU_IMAGE = &H2 'イメージを右クリックした時 Public Const CONTEXT_MENU_CONTROL = &H4 'コントロールを右クリックした時 Public Const CONTEXT_MENU_TABLE = &H8 'テーブルを右クリックした時 Public Const CONTEXT_MENU_TEXTSELECT = &H10 'テキストを選択して右クリックした時 Public Const CONTEXT_MENU_ANCHOR = &H20 'アンカー(リンク)を右クリックした時 Public Const CONTEXT_MENU_UNKNOWN = &H40 'よくわかんね(^^;
CONTEXT_MENU_DEFAULT Or CONTEXT_MENU_TEXTSELECT結果は &H11(10 進数で 17) となります。
![]() |
とりあえずレジストリに登録する手順を関数化してみました。 サンプルアーカイブ内には、メニュー項目の削除や存在確認ができる関数も含まれています。
'----- RegIEContextMenu ----- 'IE の標準コンテキストメニューに項目を追加します。 ' '引数 strItemName ' 新たに作成する項目の名前を指定します。lngContextValue で指定した ' 条件で IE を右クリックした場合、ここで指定した文字列がメニューに ' 表示されます。アルファベットの前に "&"(アンパサンド) を ' 記述すると、そのアルファベットはショートカットキーになります。 ' ' 例 : "&Google で検索" ' "選択URLを開く(&D)" ' '引数 strScriptFile ' strItemName のメニューアイテムが選択されたときに実行する、 ' スクリプトファイルをフルパスで指定します。 ' '引数 lngContextValue ' strItemName のメニューアイテムが表示される条件を指定します。 ' 設定する値の詳細は CONTEXT_MENU 定数をご覧下さい。 ' 複数の条件で表示したい場合は、各々の値の論理和(Or)を指定します。 ' ' 例 : デフォルト動作とテキスト選択の時にメニュー項目を表示 ' CONTEXT_MENU_DEFAULT Or CONTEXT_MENU_TEXTSELECT ' '戻り値 ' 成功した場合は True が返ります。失敗した場合は False が返ります。 ' Public Function RegIEContextMenu _ (ByRef strItemName As String, _ ByRef strScriptFile As String, _ ByVal lngContextValue As Long, _ Optional ByVal lngFlags As Long) As Boolean Dim lngOpenExtKey As Long 'MenuExt キーのハンドルを格納 Dim lngOpenItemKey As Long '作成されたキーのハンドルを格納 Dim lngRet As Long Dim saBuffer As SECURITY_ATTRIBUTES 'キー名が指定されていない、スクリプトファイルが存在しない場合、関数を抜ける If Len(strItemName) = 0 Then Exit Function If Len(Dir$(strScriptFile)) = 0 Then Exit Function 'MenuExt キーをオープン。存在しない場合は作成される If RegCreateKeyEx(HKEY_CURRENT_USER, _ IE_KEY_MENUEXT, _ 0, _ 0, _ REG_OPTION_NON_VOLATILE, _ KEY_ALL_ACCESS, _ saBuffer, _ lngOpenExtKey, _ lngRet) <> ERROR_SUCCESS Then Exit Function 'strItemName で指定された名前のキーを作成 If RegCreateKeyEx(lngOpenExtKey, _ strItemName, _ 0, _ 0, _ REG_OPTION_NON_VOLATILE, _ KEY_ALL_ACCESS, _ saBuffer, _ lngOpenItemKey, _ lngRet) <> ERROR_SUCCESS Then GoTo CloseExtKey End If '作成したキーの "(標準)" の値に strScriptFile を設定 If RegSetValueEx(lngOpenItemKey, _ vbNullString, _ 0, _ REG_SZ, _ ByVal strScriptFile, _ LenB(StrConv(strScriptFile, vbFromUnicode)) + 1) <> ERROR_SUCCESS Then GoTo CloseItemKey End If '作成したキーの "contexts" の値に lngContextValue を設定 If RegSetValueEx(lngOpenItemKey, _ "contexts", _ 0, _ REG_DWORD, _ lngContextValue, _ LenB(lngContextValue)) <> ERROR_SUCCESS Then GoTo CloseItemKey End If 'lngFlags オプションが設定されている場合 If lngFlags Then '作成したキーの "Flags" の値に lngFlags を設定 If RegSetValueEx(lngOpenItemKey, _ "Flags", _ 0, _ REG_DWORD, _ lngFlags, _ LenB(lngFlags)) <> ERROR_SUCCESS Then GoTo CloseItemKey End If End If RegIEContextMenu = True CloseItemKey: Call RegCloseKey(lngOpenItemKey) '作成したキーを閉じる CloseExtKey: Call RegCloseKey(lngOpenExtKey) 'MenuExt キーを閉じる End Function |
IE コンテキストメニュー登録モジュール Ver 1.01 :
dgs101.lzh (14.1KB)