如何找到所有桌面快捷方式的屏幕位置?

时间:2015-11-18 22:39:14

标签: delphi desktop-shortcut

我们在客户桌面上放置了许多快捷方式,并希望将它们放在一起以方便使用,并远离其他可用于其他程序的快捷方式。如果他们更改了屏幕分辨率,监视或对显示进行了其他更改,则快捷方式变为“#34;”#34;

我找到了一些代码示例来查找快捷方式的其他属性,例如。目标,但我没有看到任何指示快捷方式在屏幕上物理位置的属性。

我正在考虑创建一个简单的程序来读取我们的快捷方式的位置,并在它们位于正确的位置时将其保存到文件中。按下一个简单的按钮就可以将它们恢复到正确的位置。

我在Delphi编程,我们在各种客户机器上使用W7-10。

2 个答案:

答案 0 :(得分:3)

shell API为此提供了功能。关键界面为IFolderView,特别是方法IFolderView::GetItemPositionIFolderView::SelectAndPositionItems

使用shell API有点牵扯。与往常一样,在调用这些方法之前需要相当数量的脚手架。我向你推荐Raymond Chen的文章Manipulating the positions of desktop icons,它提供了实例代码。

答案 1 :(得分:1)

桌面在图标模式下实现为标准的Win32 ListView控件。桌面上的项目是ListView项目。您可以使用GetDesktopWindow()函数获取桌面ListView的HWND,然后根据需要使用标准ListView消息进行操作。

没有API可以检索代表特定文件/快捷方式的Desktop ListView项目,因此您必须手动查找它们。通过:

  1. 使用LVM_GETITEMCOUNTLVM_GETITEMTEXT循环浏览项目,将每个项目的文本与您的快捷方式名称进行比较。

  2. 使用LVM_FINDITEM搜索与给定快捷方式名称具有相同文本的项目。

  3. 找到目标商品后,您可以使用LVM_GETITEMPOSITIONLVM_SETITEMPOSITION / LVM_SETITEMPOSITION32根据需要获取/设置商品位置。