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

问题描述 投票:0回答:3

几年前,我天真地尝试编写一个小应用程序来保存我战术性放置的桌面图标,因为当某些事件重置它们时,我厌倦了将它们拖回原来的位置。在花费了太多时间未能找到查询(更不用说保存和重置)我的图标的桌面位置的方法后,我放弃了。

有人知道 Windows 在哪里保留此信息以及是否有 API 来设置它们?

谢谢, 理查德

c# windows winapi icons utility
3个回答
18
投票

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

我在 google 上搜索了一些 C# 代码,但找不到示例,但我确实找到了以下文章。 Torry:……获取/设置桌面图标的位置?。这是 delphi 代码,但我发现它非常可读,并且通过一些 P/Invokes,您将能够将其转换为 c#。


2
投票

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

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

我使用的解决方案是将 DLL 注入到 Explorer 进程中并从那里发送消息。然后您只需要找到一种方法将位置信息返回到您的流程即可。


0
投票

我知道有人已经得到了答案,但我也发现这可能会有所帮助。我不太用 C# 编写代码,所以我不太擅长判断这是否有帮助,但我很确定这可能更有帮助: https://www.codeproject.com/Articles/639486/Save-and-Restore-Icon-Positions-on-Desktop

© www.soinside.com 2019 - 2024. All rights reserved.