标题:获取桌面图标名称,坐标,并移动。哪位大哥给个思路。
只看楼主
df2884111
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-1-15
结帖率:100%
已结贴  问题点数:20 回复次数:7 
获取桌面图标名称,坐标,并移动。哪位大哥给个思路。
图标名称是不是很难获取的,坐标跟移动基本能实现。就是不能指定图标,桌面就乱了。图标号不精准。
搜索更多相关主题的帖子: 获取 名称 移动 坐标 图标 
2022-02-07 01:07
df2884111
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-1-15
得分:0 
留个QQ103167938方便联系。
2022-02-07 01:55
约定的童话
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:47
帖 子:190
专家分:1061
注 册:2021-8-1
得分:5 
指定图标是给坐标指定还是名称指定?
2022-02-08 07:21
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:5 
有图标名称,就可以指定了。图标名称就是文件名称。

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-02-08 12:39
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
右击桌面,自动排列图标要去除勾选。


基于坐标的图标移动:
程序代码:
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_MOVE = &H1 '移动鼠标
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Private Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键抬起
Private Const MOUSEEVENTF_ABSOLUTE = &H8000 '标示是否采用绝对坐标
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
Form1.Visible = False
SetCursorPos 259, 231 '鼠标移动到图标源位置
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0 '左键按下
Sleep 1000 '实测操作必须停顿,停顿时间必须>=24
SetCursorPos 972, 315 '鼠标移动到目标位置
mouse_event MOUSEEVENTF_ABSOLUTE + MOUSEEVENTF_MOVE, 0, 0, 0, 0
Sleep 1000 '实测操作必须停顿,停顿时间必须>=24
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2022-02-08 13:16
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:5 
图标位置 写在 HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags\1\Desktop 这里,
但数据看不懂,百度了一下,看雪有人做了解析,还是用楼上的模拟吧!

-----------------------------
大牛的提示:
从explorer.exe里调ListView_GetItemPosition可以取设置桌面图标位置,调ListView_SetItemPosition可以设置桌面图标位置。

注册表中的数据结构
offset_00: 16个字节0
offset_10: 4 byte pos_x,4byte pos_y,2byte=struct_Icon1_length,n byte struc_Icon
offset_next:4 byte pos_x,4byte pos_y,2byte=struct_Icon2_length,n byte struc_Icon
(offset_next=offset_previous+2byte_struct_Icon_length+8_x_y各4byte)
以下一直类推。
现在的问题是。具体的struct_Icon的结构是怎样的?


授人于鱼,不如授人于渔
早已停用QQ了
2022-02-08 16:53
df2884111
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-1-15
得分:0 
有图标名称,例:用代码获取桌面:"360浏览器"图标当前坐标值及对应的图标序号,因为有序号我才能控制该图标坐标,获取当前坐标是判断坐标是否位置不对,
               网上找到部分代码测试
    '获得桌面句柄。
    hdesk = FindWindow("progman", vbNullString)
    hdesk = FindWindowEx(hdesk, 0, "shelldll_defview", vbNullString)
    hdesk = FindWindowEx(hdesk, 0, "syslistview32", vbNullString)
    '查找桌面图标数目。
    icount = SendMessageByLong(hdesk, LVM_GETTITEMCOUNT, 0, 0&)
    For i = 0 To icount - 1
        '显示图标。
        Call SendMessageByLong(hdesk, LVM_GETITEMPOSITION, i, pFileMap)
        '返回坐标。
        CopyMemoryTwo Curpos, pFileMap, 8
        IconPosition(i) = Curpos
        IconPosition2(i) = Curpos
        objItem.mask = LVIF_TEXT
        objItem.iSubItem = 0
        objItem.pszText = pFileMap2
        objItem.cchTextMax = 40
         CopyMemoryOne pFileMap, objItem, 40
         lngLength = SendMessageByLong(hdesk, LVM_GETITEMTEXT, i, pFileMap)
         CopyMemoryTwo savebuf, pFileMap2, 40
        '取得图标名称。
        If lngLength > 40 Then lngLength = 40
        strName = Left$(savebuf.x, lngLength)
        IconName(i) = strName
End Sub
经测试获取名称、坐标返回失败,可能我的是WIN10系统,但可控制序号图标坐标。
总结:控制图标可以,难在获取当前桌面图标名称对应的序号及坐标,求控制目标,获取当前桌面图标实时对应数据。
2022-02-11 16:58
df2884111
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-1-15
得分:0 
指定图标是给坐标指定还是名称指定?

指定当前桌面图标 求序号和坐标
2022-02-11 17:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-508288-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.090561 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved