2016-05-18 3 views
0

В настоящее время я пытаюсь реализовать значки Overlay для Windows Explorer с Visual C++. Для этого я прочитал Информацию о Microsoft MSDN (говоря, что мне нужно реализовать IShellIconOverlayIdentifier), а также некоторые другие ресурсы в Интернете.Иконки оверлей проводника Windows - как начать?

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

Сначала я попытался создать службу Windows, но, похоже, я не могу реализовать интерфейс. Теперь я перешел на DLL, и ошибок компилятора больше нет, но когда я пытаюсь зарегистрироваться, он говорит, что модуль загружен, но точка входа DllRegisterServer не найдена. Проблема в том, что у меня нет COM-сервера, но мне он действительно нужен?

Я также нашел руководство по CodeProject.com, которое также не имеет ошибок компилятора, но просто не отображает значки без каких-либо ошибок.

Итак, кто-нибудь может вкратце суммировать, как начать внедрять иконки Overlay с Visual Studio и C++ (Service/DLL/..., любые параметры компилятора, которые должны быть установлены, каков минимальный код, который мне нужен для отображения простых значков)?

+2

Вы бы намного лучше выбрали одно из трех своих решений выше, предоставив для этого некоторый код для этого вопроса и объяснив, с какими трудностями вы столкнулись, и с чем вам нужно помочь. – Tas

+1

Возможно, это связано с этой проблемой. [Значки TortoiseSVN не отображаются в Windows 7] (http://stackoverflow.com/questions/1057734/tortoisesvn-icons-not-showing-up-under-windows-7) –

ответ

0

«Значки», на которые вы ссылаетесь, являются значками, отображаемыми в процессе проводника. Это означает, что вы гость в другом процессе, и вы должны вести себя в соответствии с их правилами.

Если вы это понимаете, ясно, почему ваш код не будет работать в службе. Служба не является проводником.

Если вы это понимаете, ясно, почему вы должны предоставить DllRegisterServer(). Проводник вызывает это.

Компилятор C++ не знает о конкретных правилах Explorer.EXE. Однако вы можете сообщить компилятору о IShellIconOverlayIdentifier, включив файл заголовка, где он определен. Это скажет компилятору, что это на самом деле COM-интерфейс.

Возможно, вам следует начать с простых примеров COM, прежде чем пытаться что-то сложное, как предоставление значков другому процессу вне вашего контроля. Вы не можете скомпилировать Explorer.EXE в режиме отладки, поэтому вы видите только половину проблемы.

Смежные вопросы