2009-04-24 3 views
3

Я пытаюсь добавить новую запись в контекстное меню контекстного меню Internet Explorer. Я понимаю, что этого можно добиться, создав HTML-файл, содержащий JavaScript, а затем связав его с местоположением в реестре. Я также прочитал, что вы также можете добавить HTML в файл ресурсов и скомпилировать его в DLL (см. Microsoft KB: Adding Entries to the Standard Context Menu). Здесь я начал сталкиваться с проблемами.Добавление элемента в контекстное меню контекстного меню Internet Explorer

Вот немного фона о том, что я сделал до сих пор.

  • У меня есть следующие JavaScript в файле C:\test.htm:
<script type="text/javascript"> 
    alert('Hello, world!'); 
</script> 
  • я добавил новое значение 'c:\test.htm'REG_SZ в реестре по следующему адресу:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt 

Если я сейчас перезагрузите IE, новый пункт меню появится в контекстном меню. Если я выберу свой новый пункт меню, появится сообщение о появлении сообщения, как и ожидалось. Все идет нормально. Тем не менее, я не могу получить доступ к скрипту, если он находится в DLL. Вот шаги, которые я взял:

  1. создал новый визуальный проект библиотеки классов C++ в VS 2005 с именем 'IETest' в c:\IETest
  2. Импортные мой C:\test.htm файл в файл ресурсов по умолчанию app.rc. Я изменил ID быть TEST
  3. составившего DLL в режиме отладки
  4. Измененная запись реестра для чтения
res://C:\IETest\debug\IETest.dll/TEST 

Если я теперь перезапустите IE и повторите попытку, сообщение поле не появляется, когда я нажимаю правой кнопкой мыши и выбираю новую запись в контекстном меню. Я также попробовал сборку DLL без релиза, а также попытался заменить последнюю косую черту запятой и изменить путь однократной обратной косой черты на двойные косые черты.

Я могу только предположить, что я сделал что-то неправильно при создании моей DLL. Может кто-то указать мне верное направление? Есть ли способ проверить сборку DLL для изучения ресурсов и связанных идентификаторов?

Спасибо.

+0

Когда вы говорите, «оповещать» вы на самом деле означает «контекстное меню» запись? – Eddie

+0

Если я использую javascript в своем первом примере, появляется окно сообщения «предупреждение», когда я правильно выбираю новый пункт контекстного меню. Проблема, с которой я сталкиваюсь, - это когда я пытаюсь добавить этот javascript в новую DLL. Я обновляю запись, чтобы сделать отчет немного понятнее. –

ответ

2

Вы пытались иметь идентификатор TEST.html? Я предполагаю, что IE не знает, как обрабатывать файл, потому что в нем нет добавленного расширения, но это полностью предположение, основанное на том, что определенные MS .dlls идентифицируют их (т.е. res: // c: \ windows \ system32 \ shdoclc.dll/navcancl.htm)

Единственное, что я могу придумать, это убедиться, что ваши ресурсы имеют тип 23.

ResourceHacker можно просматривать файлы ресурсов, как вы хотите: http://angusj.com/resourcehacker/

+0

Спасибо BarrettJ. ResourceHacker решил проблему. Ресурс html на самом деле имеет идентификатор 101. Я изменил запись в реестре на следующую и теперь работает как ожидалось ... res: // C: \ IETest \ debug \ IETest.dll/101 As насколько я вижу, похоже, что нет никакого способа просмотра или установки этого значения в VS 2005 или 2008? –