// IE拡張メニューを設定するレジストリアクセス関数 // (C)2003 Yutaka Wada, AirparkLab // [注意] // 相対パスで読み込めるように便宜上ヘッダファイルにしている。 // インクルードするのは唯一のソースファイルのみとし、他はextern宣言して使用すること。 /* 使用例 BOOL bRet; // IE拡張メニューの登録 bRet = RegIeMenuExtSet( "画像を処理...", "c:\hoge\script.htm", CONTEXT_MENU_IMAGE, NULL ); // IE拡張メニューの削除 bRet = RegIeMenuExtClear( "画像を処理..." ); */ #ifndef __IE_MENUEXT_H__ #define __IE_MENUEXT_H__ #include // メニュー項目の表示方法定義(ORにより複数指定可能) #define CONTEXT_MENU_DEFAULT 0x01 // 通常右クリックした時に項目を表示 #define CONTEXT_MENU_IMAGE 0x02 // 画像を右クリックした時に項目を表示 #define CONTEXT_MENU_CONTROL 0x04 // コントロールを右クリックした時に項目を表示 #define CONTEXT_MENU_TABLE 0x08 // テーブルを右クリックした時に項目を表示 #define CONTEXT_MENU_TEXTSELECT 0x10 // 選択文字列を右クリックした時に項目を表示 #define CONTEXT_MENU_ANCHOR 0x20 // リンクを右クリックした時に項目を表示 #define CONTEXT_MENU_UNKNOWN 0x40 // その他 // スクリプトの表示方法定義 #define MENUEXT_SHOWDIALOG 0x01 // ShowModalDialog でスクリプトを呼び出す // プロトタイプ宣言 BOOL RegIeMenuExtSet( LPCTSTR lpKey, LPCTSTR lpScript, DWORD Contexts, DWORD Flags ); BOOL RegIeMenuExtClear( LPCTSTR lpKey ); // IE拡張メニューの登録 // lpKey メニュー項目文字列へのアドレス // lpScript スクリプトのフルパスファイル名へのアドレス // Contexts 項目の表示方法 // Flags スクリプトの呼び出し方法 // 登録成功であれば TRUE を、失敗であれば FALSE を戻す。 BOOL RegIeMenuExtSet( LPCTSTR lpKey, LPCTSTR lpScript, DWORD Contexts, DWORD Flags ) { LONG ret; HKEY hTopKey, hKey; DWORD dwDisposition; BYTE szScript[MAX_PATH]; DWORD dwSize; // IE拡張メニューキーを開く(無ければ作成する) ret = RegCreateKeyEx( HKEY_CURRENT_USER, "Software\\Microsoft\\Internet Explorer\\MenuExt", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hTopKey, &dwDisposition ); if( ret != ERROR_SUCCESS ) return( FALSE ); // メニュー項目キーを開く(無ければ作成する) ret = RegCreateKeyEx( hTopKey, lpKey, 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition ); if( ret != ERROR_SUCCESS ){ RegCloseKey( hTopKey ); return( FALSE ); } // スクリプトパスの設定 sprintf( (char *)szScript, "file://%s", lpScript ); dwSize = strlen( (const char *)szScript ) + 1; ret = RegSetValueEx( hKey, NULL, 0, REG_SZ, szScript, dwSize ); if( ret != ERROR_SUCCESS ){ RegCloseKey( hKey ); RegCloseKey( hTopKey ); return( FALSE ); } // 項目の表示方法の設定 ret = RegSetValueEx( hKey, "Contexts", 0, REG_DWORD, (CONST BYTE * )&Contexts, sizeof( DWORD ) ); if( ret != ERROR_SUCCESS ){ RegCloseKey( hKey ); RegCloseKey( hTopKey ); return( FALSE ); } // スクリプトの呼び出し方法の設定 ret = RegSetValueEx( hKey, "Flags", 0, REG_DWORD, (CONST BYTE * )&Flags, sizeof( DWORD ) ); if( ret != ERROR_SUCCESS ){ RegCloseKey( hKey ); RegCloseKey( hTopKey ); return( FALSE ); } // レジストリキーを閉じる RegCloseKey( hKey ); RegCloseKey( hTopKey ); return( TRUE ); } // IE拡張メニューの削除 // lpKey メニュー項目文字列へのアドレス // 削除成功であれば TRUE を、失敗であれば FALSE を戻す。 BOOL RegIeMenuExtClear( LPCTSTR lpKey ) { LONG ret; HKEY hKey; // IE拡張メニュー項目キーを開く ret = RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\Microsoft\\Internet Explorer\\MenuExt", 0, KEY_ALL_ACCESS, &hKey ); if( ret == ERROR_SUCCESS ){ RegDeleteKey( hKey, lpKey ); RegCloseKey( hKey ); return( TRUE ); } // 既に無いので削除は完了とする return( TRUE ); } /* [参考資料] HKEY_CURRENT_USER +----Software +----Microsoft +----Internet Explorer +----MenuExt +----画像を処理... (標準) "file://c:\hoge\script.htm" contexts 0x00000002 Flags 0x00000000 */ #endif