Win shell, drag-and-drop, контекстное меню -- дебильные вопросы

dimi61

Хочу сделать такую штуку: чтобы в виндовом эксплорере при перетаскивании файла правой мышкой в контекстном меню "Move here, copy here, shortcut here" появился пункт "hard link here".
С драг-н-дропом никогда не сталкивался.
Вопрос: что делать? Посмотрел MSDN, самое релевантное, что нашел: статьи "Handling Shell Data Transfer Scenarios" и "Creating Context Menu Handlers". Не сумел оттуда понять:
* как должно выглядеть мое приложение (создающее хардлинк чтобы успешно вызываться после регистрации в реестре
* как заставить его понять, какой файл идет из источника и каков должен быть приемник
Спасибо

Serab

Кстати, можно глянуть исходники Tortoise SVN.
Правда коллега, который их смотрел, говорит, что там полный капут. Но он планку высоко ставит, так что, я думаю, разобраться будет несложно. Там есть именно эта функциональность: drag'n'drop файлов. Правда если ты не работал с самой программой, тогда может быть будет сложновато найти.

Ivan8209

> Правда коллега, который их смотрел, говорит, что там полный капут.
Копец, как известно, историческое лицо.
---
"Утверждаю, что с научной точки зрения, главное в профессии вора,
как и в профессии святого, конечно, это вовремя скрыться."

Serab

* как должно выглядеть мое приложение (создающее хардлинк чтобы успешно вызываться после регистрации в реестре
просмотрел сейчас эти статьи в msdn'e. В общих словах, выглядеть твое приложение должно как COM-компонент. Например, как dll. Где почитать так, чтобы не очень много — не знаю, может кто еще посоветует, сам осваивал по Дейлу Роджерсону (Inside COM).
* как заставить его понять, какой файл идет из источника и каков должен быть приемник
тут что-то я не понял вопрос.
Как минимум стоит начать с создания этого компонента, реализации необходимых интерфейсов. Об этом надо читать там же, в MSDN, но начать стоит не сразу с тех статей, на которые ты сослался, а с общей информации о программировании shell: какие там важные интерфейсы, для чего нужны и т.д.

dimi61

Спасибо.
> В общих словах, выглядеть твое приложение должно как COM-компонент. Например, как dll. Где почитать так, чтобы не очень много — не знаю, может кто еще посоветует, сам осваивал по Дейлу Роджерсону (Inside COM).
Я ботал когда-то эту книжку, но вопрос был такой: функция, обрабатывающая событие, по идее ведь должна быть вполне определенной. Так вот какой именно ей следует быть?
> Об этом надо читать там же, в MSDN, но начать стоит не сразу с тех статей, на которые ты сослался, а с общей информации о программировании shell: какие там важные интерфейсы, для чего нужны и т.д.
Ок, попробую еще порыться.
Кстати, если кому нужно: готовую программку я нашел (Link shell extension вполне неплохая. Но мне хотелось бы самому написать.

Serab

Я ботал когда-то эту книжку, но вопрос был такой: функция, обрабатывающая событие, по идее ведь должна быть вполне определенной. Так вот какой именно ей следует быть?
Это должна быть реализация какой-то функции из какого-то специально интерфейса, упоминаемого в MSDN на страничках про shell как-раз.
Если писать на C++, то выглядит это примерно так (все имена вымышлены):

class MyComponent : public IFileCopyingInterface {
virtual HRESULT MyCopyFunc(const char* srcFilePath, const char* dstFilePath)
{
...
return S_OK; // Hopefully =)
}

// Тут еще всякие AddRef, Release, QueryInterface, о реализации которых как раз надо почитать в любом курсе молодого бойца. Ну либо можно юзать ATL. Либо писать на чем-нибудь типа .NET =)
};

Это очень схематично, там должно быть сложнее, конечно, но общая схема такова =)
Кстати, если кому нужно: готовую программку я нашел (Link shell extension вполне неплохая. Но мне хотелось бы самому написать.
Хм, можно OLE-COM Object Viewer'ом пробить (устанавливается вместе с Windows SDK что там за компонент, какие интерфейсы имплементит, это будет хорошим хинтом ;)

dimi61

> Хм, можно OLE-COM Object Viewer'ом пробить
спасибо :)

Andbar

Либо писать на чем-нибудь типа .NET =)
не надо писать расширения проводника на дотнете.

Serab

не надо писать расширения проводника на дотнете.
а что надо на нем писать?

Andbar

а что надо на нем писать?
мне пофиг, пишите что хотите, кроме полезных небольших программ, которые могут мне понадобиться и расширений проводника. К последнему есть объективная причина, которая уже упоминалась в этом разделе.
Оставить комментарий
Имя или ник:
Комментарий: