Winapi 程序桌面图标放置

Winapi 程序桌面图标放置,winapi,macos,gnome,kde,Winapi,Macos,Gnome,Kde,我正在寻找一种方法,以编程方式获取/设置桌面上的图标位置。 很明显,在某个地方有一些“状态”存储在一个文件中。 有人知道这里吗 我正在尝试在任何平台上进行概念验证,因此,如果您知道如何在gnome、KDE或Mac OS的XP上进行验证,我很想听听您的想法。从这里开始: 不幸的是,这是一个相当令人讨厌的API,因为外壳中的每个对象都由一个称为PIDL的东西来标识,它是由撒旦自己创建的,目的是混淆任何试图避免访问冲突和内存泄漏的人。在过去几年中,我已经多次尝试研究过这个问题, 这似乎是一件小事(它是

我正在寻找一种方法,以编程方式获取/设置桌面上的图标位置。 很明显,在某个地方有一些“状态”存储在一个文件中。 有人知道这里吗

我正在尝试在任何平台上进行概念验证,因此,如果您知道如何在gnome、KDE或Mac OS的XP上进行验证,我很想听听您的想法。

从这里开始:


不幸的是,这是一个相当令人讨厌的API,因为外壳中的每个对象都由一个称为PIDL的东西来标识,它是由撒旦自己创建的,目的是混淆任何试图避免访问冲突和内存泄漏的人。

在过去几年中,我已经多次尝试研究过这个问题, 这似乎是一件小事(它是为AmigaDos工作台设计的), 但是Windows外壳的编程是丑陋的; 实际上,在WindowsAPI中编程任何东西都是丑陋的。真是一团糟。 为一束头发拉扯和心痛做好准备

这并不是要让你气馁,但微软认为它最清楚什么时候会这样 要在文件夹视图中放置图标,我几乎找不到 实施“永久”图标放置(即图标视图远离永久)。 MSDN文档在这方面提供的帮助很少(至少没有示例)。 我最后研究的是编写一个shell扩展来记录和恢复 图标位置(我不会将这些记录在注册表中,我只是将位置存储在文件夹的desktop.ini文件中,但最好在用户的私有设置文件夹中创建一个文件)

CodeProject有许多关于shell编程和扩展的文章

我终于在纯干净的C++中写下了自己的小外壳。
这正是我在应用程序上下文中想要的。普通文件和文件夹的位置存储在任何目录下的隐藏文件中
Mac OS X上音量图标的位置似乎存储在Finders.plist(~/Library/Preferences/com.apple.finder)中。

这里的很多答案都说,在Windows中做这种事情非常困难。我怀疑这不是偶然的。如果你从未读过陈雷蒙的博客,我建议你读。陈先生经常讨论编程访问图标等内容时出现的陷阱和滥用

编辑:下面是一些关于在Windows中允许编程访问的注释


虽然你可能不打算这么做(至少在Windows上),但这并不意味着你不能这么做。我只是要求你本着善良而不是邪恶的精神来做这件事。

对于遵循freedesktop.org规范的台式机(无论它们有多么缺陷),相关文档似乎是;不过,它没有说明任何位置。

在GNOME中,Nautilus将图标和其他内容的位置存储在~/.Nautilus/metafile中

其中的文件具有难看的文件名,因为它们实际上是转义URI。例如,我的桌面图标元数据位于~/.nautilus/metafiles/文件:%2F%2F%2Fhome%2Ffederico%2FDesktop.xml中

但是,没有访问或修改该数据的公共接口。当然,您可以自己解析文件并对其进行修改,但这些更改在下次重新启动Nautilus之前不会生效。

我认为您不应该在Windows中执行此操作。当然,这并不意味着你不能,但它可能很难,没有文件记录,或者很容易被破坏(见我的答案)。