我正在寻找一种以编程方式获取/设置桌面上图标位置的方法。显然,某处存储了一些“状态”。有人知道这里吗?
我正在尝试在任何平台上进行概念验证,所以如果您知道如何在 gnome、KDE 或 Mac OS 的 XP 上执行此操作,我真的很想听听。
从这里开始:http: //msdn.microsoft.com/en-us/library/bb773177 (VS.85).aspx
不幸的是,这是一个非常讨厌的 API,因为 shell 中的每个对象都由一个称为 PIDL 的东西标识,它是由撒旦自己创建的,目的是混淆任何试图避免访问冲突和内存泄漏的人。
普通文件和文件夹的位置存储在隐藏的.DS_Store文件中,该文件存在于任何目录中 Mac OS X 上的音量图标位置似乎存储在 Finders .plist (~/Library/Preferences/com.apple.finder )。
这里的很多答案都说在 Windows 中做这种事情非常困难。我怀疑这不是偶然的。如果您从未阅读过 Raymond Chen 的博客The Old New Thing,我建议您阅读。陈先生经常讨论以编程方式访问诸如放置图标之类的东西时会出现的陷阱和滥用。
编辑:这里有一些关于允许在 Windows 中进行编程访问的评论。
尽管您可能不打算这样做(至少在 Windows 上),但这并不意味着它不能完成。我只是要求你本着善良而不是邪恶的精神来做这件事。
对于遵循 freedesktop.org 规范的桌面(无论它们可能有多么缺陷),相关文档似乎在此处;但是,它并没有说明职位。
在过去的几年里,我已经尝试过几次,这似乎是一件微不足道的事情(它是为 AmigaDos 工作台设计的),但是为 Windows shell 编程是丑陋的;实际上,在 Windows API 中编程任何东西都是丑陋的。这是一个可怕的混乱。为一堆头发拉扯和心痛做好准备。
不要气馁,但微软认为它最了解文件夹视图中的图标放置,而且我几乎没有找到实现“永久”图标放置的方法(即图标视图远非永久)。MSDN 文档在这方面提供的帮助很少(至少没有示例)。我研究的最后一件事是编写一个 shell 扩展来记录和恢复图标位置(我不会在注册表中记录这些,我只是要将位置存储在文件夹的 desktop.ini 文件中,但最好是在用户的私人设置文件夹中创建一个文件)。
Code Project 有许多关于 shell 编程和扩展的文章。
http://www.codeproject.com/KB/shell/ http://www.codeproject.com/KB/shell/shlext.aspx
我最终用干净的纯 C++ 编写了我自己的小 shell,它在我的应用程序上下文中完全符合我的要求。
在 GNOME 中,Nautilus 将图标和其他内容的位置存储在 ~/.nautilus/metafiles 中。
那里的文件有难看的文件名,因为它们实际上是转义的 URI。例如,我的桌面图标元数据位于 ~/.nautilus/metafiles/file:%2F%2F%2Fhome%2Ffederico%2FDesktop.xml
但是,没有访问或修改该数据的公共接口。你当然可以自己解析文件并修改它,但是修改要等到下次重启 Nautilus 时才会生效。