контекст & Что я сделал
Я пытаюсь научиться писать расширения оболочки для Windows, однако этот процесс не очень хорошо документирован и информации для начинающих очень мало. Из того, что я прочитал, этот Руководство опубликовано повсеместно как один из лучших учебников для начинающих по расширениям оболочки Windows. Я до конца следовал этому уроку, но мне пришлось внести некоторые коррективы, чтобы избежать некоторых конфликтов:
win32
в x64
, но может быть больше шагов, о которых я не знаю.guidgen.exe
, который поставляется с Visual Studio 2012, чтобы сгенерировать GUID для меня.Мой проект успешно компилируется, и я могу запустить его, завершив explorer.exe
(Ctrl + Shift + правый клик в меню Пуск, выберите Exit Explorer
) и компиляция / запуск моего проекта в режиме выпуска (который затем запускает другой экземпляр explorer.exe
).
проблема
Проблема в том, что значение CLSID не записывается в regedit.exe
при выполнении программы (хотя txtfile
местоположение реестра обновляется). Кроме того, ни одна из программных ловушек не работает, что и следовало ожидать, если CLSID не регистрируется. Я бы хотел немного сузить проблему, а не просто сказать: «Помогите, это не работает!» но я, честно говоря, понятия не имею, что я могу сделать, чтобы еще более точно определить проблему. Я почти уверен, что что-то не так с моим SimpleShlExt.rgs
файла, однако в руководстве не содержится большой информации об этом важном этапе, касающемся *.rgs
файл (кроме какого-то не по теме шутка)
SimpleShlExt.rgs
файл?!?!?Код
Для дополнительной информации я разместил соответствующий код ниже. это около идентичен руководству, указанному выше (но имеет другой GUID). Я могу опубликовать свой SimpleShlExt.cpp
а также SimpleShlExt.h
однако по запросу оно в значительной степени идентично руководству, и я не уверен, что оно добавляет какую-либо полезную информацию.
SimpleShlExt.rgs (CLSID был создан с guidgen.exe
)
HKCR
{
NoRemove CLSID
{
ForceRemove {E2D6660C-E3E5-43CE-BF24-44D4269EEC1C} = s 'SimpleShlExt Class'
{
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Apartment'
}
}
}
}
HKCR
{
NoRemove txtfile
{
NoRemove ShellEx
{
NoRemove ContextMenuHandlers
{
ForceRemove SimpleShlExt = s '{E2D6660C-E3E5-43CE-BF24-44D4269EEC1C}'
}
}
}
}
Это было очень давно, но я только что понял, что оставил это повешение. Я вернулся к использованию CLSID примера, и он работал просто отлично. Я нашел несколько других файлов, которые определяют CLSID, которые затем не совпадали с теми, которые я генерировал с guidgen.exe
, Например, учебник на самом деле не упоминает SimpleExt.h
который также имеет информацию CLSID, зарегистрированную в нем. Чтобы изменить CLSID, вам нужно найти все точки, в которых он отображается.
Других решений пока нет …