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

时间:2008-09-25 06:11:12

标签: c# windows winapi icons utility

几年前,我无辜地尝试编写一个小应用程序来保存我的战术桌面图标,因为我厌倦了在某些事件重置时将它们拖回到他们的位置。我没有找到一种方法来查询太多时间后放弃了,更不用说保存和重置,我的图标的桌面位置。

任何人都知道Windows保留此信息的位置以及是否有用于设置它们的API?

谢谢, 理查德

5 个答案:

答案 0 :(得分:11)

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

我搜索了一些c#代码并找不到示例,但我确实找到了以下文章。 Torry: ...get/set the positions of desktop icons?。它是delphi代码,但我发现它非常易读,并且有一些P / Invokes你可以将它翻译成c#。

答案 1 :(得分:2)

桌面只是一个ListView控件,您可以使用LVM_SETITEMPOSITION获取其处理并向其发送消息以移动图标。

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

我使用的解决方案是将DLL注入Explorer进程并从那里发送消息。然后你必须有办法将位置信息反馈给你的过程。

答案 2 :(得分:1)

我仍然在研究这个问题,并且在我最终得到一些工作后会发布结果。我发布这个是因为,间接地感谢Davy的帖子,我还发现了一个经典的VB实现:

Shuffle Desktop Icons Using Interprocess Memory Communication

这可能是我代码的基础。

答案 3 :(得分:0)

我不知道API,但我知道Ultramon(http://www.realtimesoft.com/ultramon/)有一个功能,用于保留图标位置(虽然我从来没有用它来保留图标位置,但它对于多个显示器的使用是必不可少的)。最新的测试版与Vista完美配合(除了有时在最初通过RDP登录我的机器时有一两个小故障),当然,XP没有任何问题。我已经用了四年多了。

我是否提到它是多显示器使用的最佳实用程序?

答案 4 :(得分:0)

可能想要这个吗?我在《 WindowsCoreProgramming 5th》 https://github.com/wang1902568721/WindowsCoreProgramming

中找到了它。
相关问题