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

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

谢谢, 理查德

有帮助吗?

解决方案

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

我搜索了一些c#代码并找不到示例,但我确实找到了以下文章。 Torry:...获取/设置桌面图标的位置?。它是delphi代码,但我发现它非常易读,并且有一些P / Invokes你可以将它翻译成c#。

其他提示

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

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

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

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

使用进程间内存通信随机播放桌面图标

这可能是我代码的基础。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top