у меня есть следующий запрос:
По сути, я пытаюсь изменить значки наложения в соответствии с моей конкретной логикой для определенного элемента оболочки. всякий раз, когда элементу оболочки требуется обновление значка, я звоню
SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_IDLIST | SHCNF_FLUSH, [Item], NULL)
потому что, к сожалению, я не могу отправить какие-либо пользовательские данные (чтобы сообщить элементу, что именно изменилось), мне придется выполнять свою логику внутри метода:
IShellFolder.ParseDisplayName
https://msdn.microsoft.com/en-us/library/windows/desktop/bb775090(v=vs.85).aspx
Этот метод вызывается для того конкретного элемента, который требует обновления, и я заметил следующее:
- hwnd всегда равен нулю
- pszDisplayName — это имя обновленного элемента.
дело в том, что я должен вернуть в ppidl обновленный элемент (который я должен создать его снова и снова сериализовать).
у меня есть несколько проблем:
- у меня есть только отображаемое имя элемента - этого недостаточно, так как для моего элемента оболочки есть больше сериализованных атрибутов, и я теряю его, когда снова создаю элемент (для обновления) - возможно ли получить текущие дочерние элементы родительской папки и найти старый элемент оболочки? (создание нового из старого)
- Есть ли способ передать пользовательские данные, которые я смогу получить в ParseDisplayName? таким образом я могу точно сказать элементу, какой значок ему нужен, вместо того, чтобы пытаться понять его из состояния на сервере.
- Я передаю сериализованный pidl элемента в SHhangeNotify, и я увидел, что вызывается родительская папка ParseDisplayName, знает ли она, что нужно вызывать только мою конкретную папку, потому что я сериализую родителя, как я думаю?
- я подумал об использовании отображаемого имени для моих пользовательских данных, например, если у меня есть элемент с именем «VirtualFile», я могу вызвать SCHhangeNotify и дать элементу новое имя «VirtualFile--CustomData--ChangeIconToBlue», что-то вроде этого - это не рекомендуется, я правильно понимаю?
любая лучшая практика для обработки этого события?
огромное спасибо!