我如何以编程方式操纵Windows桌面图标位置?

几年前,我天真地试图写一个小应用程序来保存我的战术桌面图标,因为当有些事件重置时,我厌倦了将他们拖回到他们的位置。 我放弃之后,放弃了太多的时间没有find一种方法来查询,更没有保存和重置,我的图标的桌面位置。

任何人都知道Windows持续这个信息,如果有一个API来设置它们?

谢谢,理查德

如果我没有弄错桌面只是一个ListView,你必须发送LVM_SETITEMPOSITION消息到桌面的句柄。

我GOOGLE了一些C#代码,找不到一个例子,但我发现了下面的文章。 托里:…获取/设置桌面图标的位置? 这是德尔福的代码,但我觉得它非常可读,有些P / Invokes你可以把它翻译成C#。

桌面只是一个ListView控件,你可以得到它的句柄并发送消息给它使用LVM_SETITEMPOSITION移动图标。

不过,使用LVMGETITEMPOS获取图标位置有点复杂。 您必须将指针传递给POINT结构作为您的LPARAM。 如果你试图做到这一点,你可能会崩溃的资源管理器。 问题是你在地址空间中传递了一个指针,控制器将其解释为资源管理器地址空间中的一个指针。 哎哟!

我使用的解决方案是将一个DLL注入资源管理器进程,并从那里发送消息。 那么你只需要有办法将位置信息返回到你的过程。

我仍然在研究这个问题,一旦我终于找到工作,就会发布结果。 我张贴这个,因为,间接感谢Davy的职位,我也发现了一个经典的VB实现:

使用进程间内存通信来混洗桌面图标

这可能会成为我的代码的基础。

我不知道API,但我知道Ultramon( http://www.realtimesoft.com/ultramon/ )有一个功能,包括保存图标的位置(虽然我从来没有用它来保存图标的位置,这是必不可少的为多个显示器使用)。 最新的测试版与Vista完全兼容(除了在通过RDP初次登录到我的机器时,有时会出现一两个小故障),当然,XP也没有任何问题。 我已经用了四年多了。

我有没有提到它是多监视器使用最好的工具?