5月292016
Au3获取桌面图标名称与坐标
#include <GuiListView.au3> 
Global $hWndManager = WinGetHandle("Program Manager") ;获取桌面句柄
Global $hWndDesktop = ControlGetHandle("Program Manager", "", 1) ;获取桌面列表控件句柄
$iCount = ControlListView($hWndManager, "", $hWndDesktop, "GetItemCount") ;获取桌面列表中的数量(也就是图标的数量)
;测试输出
ConsoleWrite("序号 = " & "图标名称|X坐标|y坐标" & @CRLF)
For $iIndex = 0 To $iCount - 1
    $sName = ControlListView($hWndManager, "", $hWndDesktop, "GetText", $iIndex) ;根据图标排列的ID获取图标的名称
    $xy = _GUICtrlListView_GetItemPosition($hWndDesktop, $iIndex) ;根据图标排列的ID,获取图标在控件中的座标 返回数组 [0]=x座标 [1]=y座标
        ;以下的 $sName   $xy[0]   $xy[1] 三个值就是你要的
    ConsoleWrite($iIndex & " = " & $sName & "|" & $xy[0] & "|" & $xy[1] & @CRLF)
Next
ConsoleWrite("---------------结束---------------------" & @CRLF)
-------------------------------------------------------
    
    
    
;应该网友要求,出一成品  2022-03-09 
;图标保存路径
Dim $ini = @ScriptDir & "\IcoXY.ini"
Global $hWndManager = WinGetHandle("Program Manager") ;获取桌面句柄
Global $hWndDesktop = ControlGetHandle("Program Manager", "", 1) ;获取桌面列表控件句柄
Global $iCount = ControlListView($hWndManager, "", $hWndDesktop, "GetItemCount") ;获取桌面列表中的数量(也就是图标的数量)
IniReadSection($ini, "图标")
if  @error <> 0  then 
;当前如果没有配置文件
    _SaVe() ;保存当前桌面图标
    exit MsgBox(0,"提示","当前为第一次运行,已保存桌面图标的位置!")
EndIf
  ;对图标排序 ,恢复图标
 _SetPOS()
;对图标排序
Func _SetPOS() 
;by: 绿色风  https://www.jianyiit.com/post-232.html
    ConsoleWrite("序号 = " & "图标名称|X坐标|y坐标" & @CRLF)
    For $iIndex = 0 To $iCount - 1
        $sName = ControlListView($hWndManager, "", $hWndDesktop, "GetText", $iIndex) ;根据图标排列的ID获取图标的名称
        Local $arr = StringSplit(IniRead($ini, "图标", $sName, 0), "|")
        If $arr[0] = 2 Then
            _GUICtrlListView_SetItemPosition($hWndDesktop, $iIndex, $arr[1], $arr[2])
        Else
        ;如果没有记录就放到右边
            _GUICtrlListView_SetItemPosition($hWndDesktop, $iIndex, @DesktopWidth, 0)
        EndIf
    Next
EndFunc   ;==>_SetPOS
;保存当前图标位置
Func _SaVe()
;by: 绿色风  https://www.jianyiit.com/post-232.html
    ConsoleWrite("序号 = " & "图标名称|X坐标|y坐标" & @CRLF)
    For $iIndex = 0 To $iCount - 1
        $sName = ControlListView($hWndManager, "", $hWndDesktop, "GetText", $iIndex) ;根据图标排列的ID获取图标的名称
        $xy = _GUICtrlListView_GetItemPosition($hWndDesktop, $iIndex) ;根据图标排列的ID,获取图标在控件中的座标 返回数组 [0]=x座标 [1]=y座标
        ;以下的 $sName   $xy[0]   $xy[1] 三个值就是你要的
        ConsoleWrite($iIndex & " = " & $sName & "|" & $xy[0] & "|" & $xy[1] & @CRLF)
        IniWrite($ini, "图标", $sName, $xy[0] & "|" & $xy[1])
    Next
    ConsoleWrite("---------------结束---------------------" & @CRLF)
EndFunc   ;==>_SaVe
    
    
扫描二维码,在手机上阅读
