【问题标题】:Programatic desktop icon placement程序化桌面图标放置
【发布时间】:2010-11-04 22:49:27
【问题描述】:

我正在寻找一种以编程方式获取/设置桌面上图标位置的方法。 显然,某处存储了一些“状态”。 有人知道这里吗?

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

【问题讨论】:

  • 我认为您应该在 Windows 中执行此操作。当然,这并不意味着您不能,但它可能很困难、没有记录或很容易破解(请参阅我的回答)。

标签: winapi macos gnome kde


【解决方案1】:

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

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

但是,没有访问或修改该数据的公共接口。当然你也可以自己解析文件并修改,但是修改要等到下次重启 Nautilus 后才会生效。

【讨论】:

    【解决方案2】:

    这里的很多答案都说在 Windows 中做这种事情非常困难。我怀疑这不是偶然的。如果你从未读过 Raymond Chen 的博客The Old New Thing 我建议你读。 Chen 先生经常讨论以编程方式访问图标放置等内容时出现的缺陷和滥用情况。

    编辑:以下是一些关于允许在 Windows 中进行编程访问的评论。

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

    【讨论】:

      【解决方案3】:

      对于遵循 freedesktop.org 规范的桌面(无论它们可能有多么缺陷),相关文档似乎是 here;不过,它并没有说明职位。

      【讨论】:

        【解决方案4】:

        普通文件和文件夹的位置存储在隐藏的.DS_Store文件中,任何目录都存在 Mac OS X 上音量图标的位置似乎存储在 Finders .plist (~/Library/Preferences/com.apple.finder) 中。

        【讨论】:

          【解决方案5】:

          在过去的几年里,我曾尝试过几次调查, 这似乎是一件微不足道的事情(它是为 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 这正是我在我的应用程序上下文中想要的。

          【讨论】:

            【解决方案6】:

            从这里开始:http://msdn.microsoft.com/en-us/library/bb773177(VS.85).aspx

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

            【讨论】:

              猜你喜欢
              • 2011-08-16
              • 1970-01-01
              • 2023-01-02
              • 1970-01-01
              • 2013-08-17
              • 1970-01-01
              • 2012-12-19
              • 2013-08-12
              • 2019-01-02
              相关资源
              最近更新 更多