Программируемое размещение значков на рабочем столе
Я ищу способ программно получить / установить положение значков на рабочем столе. Очевидно, что где-то хранится некое "состояние". Кто-нибудь знает здесь?
Я пытаюсь получить подтверждение концепции на ЛЮБОЙ платформе, поэтому, если вы знаете, как это сделать на XP в gnome, KDE или Mac OS, я бы очень хотел услышать об этом.
6 ответов
Начните здесь: http://msdn.microsoft.com/en-us/library/bb773177(VS.85).aspx
К сожалению, это довольно неприятный API, потому что каждый объект в оболочке идентифицируется с помощью вещи, называемой PIDL, которая была создана самим сатаной, чтобы сбить с толку любого, кто пытается избежать нарушений доступа и утечек памяти.
Положение обычных файлов и папок хранится в скрытом файле .DS_Store, который существует для любого каталога. Положение значков томов в Mac OS X, похоже, хранится в.plist Finders (~/Library/Preferences/com.apple.finder).).
Для настольных компьютеров, соответствующих спецификациям freedesktop.org (какими бы ошибочными они ни были), соответствующий документ, кажется, здесь; хотя ничего не говорится о позициях.
Многие ответы здесь говорят, что делать подобные вещи довольно сложно в Windows. Я подозреваю, что это не случайно. Если вы никогда не читали блог Раймонда Чена " Старое новое", я советую вам это сделать. Г-н Чен часто обсуждает ловушки и злоупотребления, возникающие при программном доступе к таким вещам, как размещение значков.
Изменить: Вот некоторые комментарии о разрешении программного доступа в Windows.
- Почему отсутствует программный доступ к списку выводов меню "Пуск"?
- Изобретательность раздражающих людей
Хотя вы, вероятно, не должны этого делать (по крайней мере, в Windows), это не значит, что это невозможно сделать. Я просто прошу вас делать это в духе добра, а не зла.
В GNOME Nautilus хранит положение значков и прочего в ~/.nautilus/metafiles.
Файлы там имеют ужасные имена файлов, так как они действительно экранированы URI. Например, мои метаданные для иконок на рабочем столе находятся в ~/.nautilus/metafiles/file:%2F%2F%2Fhome%2Ffederico%2FDesktop.xml
Однако нет общедоступного интерфейса для доступа или изменения этих данных. Конечно, вы можете проанализировать файл самостоятельно и изменить его, но изменения не вступят в силу до следующей перезагрузки Nautilus.
Я пытался разобраться в этом пару раз за последние пару лет, кажется, что это тривиально (это было для рабочей среды AmigaDos), но программирование для оболочки Windows ужасно; на самом деле программирование чего-либо в Windows API - это ужасно. Это ужасный беспорядок. Будьте готовы к пучку волос и боли в сердце.
Не отчаиваю вас, но MicroSoft считает, что знает лучше всего, когда дело доходит до размещения значков в представлениях папок, и я нашел немного способов реализовать "постоянное" размещение значков (т.е. представление значков далеко не постоянно). Документы MSDN предлагают небольшую помощь в этом отношении (по крайней мере, без примеров). Последнее, на что я обращал внимание, - это написание расширения оболочки для записи и восстановления положения значков (я бы не записывал их в реестр, я просто собирался сохранять положения в файле desktop.ini папки, но, вероятно, было бы лучше создайте файл в личной папке настроек пользователя).
Code Project имеет ряд статей по программированию оболочки и расширений.
http://www.codeproject.com/KB/shell/ http://www.codeproject.com/KB/shell/shlext.aspx
В итоге я написал свою собственную маленькую оболочку на чистом чистом C++, которая делает именно то, что я хочу в контексте моего приложения.