Программируемое размещение значков на рабочем столе

Я ищу способ программно получить / установить положение значков на рабочем столе. Очевидно, что где-то хранится некое "состояние". Кто-нибудь знает здесь?

Я пытаюсь получить подтверждение концепции на ЛЮБОЙ платформе, поэтому, если вы знаете, как это сделать на 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++, которая делает именно то, что я хочу в контексте моего приложения.

Другие вопросы по тегам