.版本 2
.支持库 iext
.支持库 EThread
.支持库 spec
.程序集 窗口程序集_启动窗口
.程序集变量 hImageList, 整数型
.程序集变量 hMenu, 整数型
.程序集变量 LnkName, 文本型
.程序集变量 许可证, 整数型
.程序集变量 vShell, 对象
.程序集变量 vFolder, 对象
.程序集变量 items, 快捷方式列表, , "0"
.程序集变量 hThreadArray, , , "0"
.子程序 _按钮1_被单击
' 1、调用SHGetDesktopFolder函数获得桌面文件夹的IShellFolder接口
' 2、调用所获得的IShellFolder接口的EnumObjects成员函数列举所有桌面文件与快捷方式。
' 3、调用IShellFolder的BindToObject成员函数获得子文件夹的IShellFolder接口。
' 4、调用IID_IShellLink接口获取快捷方式指向文件路径。
' 5、调用FolderItem获取桌面图标右键菜单列表。
.子程序 _超级列表框1_鼠标右键被按下, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.局部变量 title, 文本型
.局部变量 i, 整数型
.局部变量 MenuName, 文本型
.局部变量 pt, POINTAPI
.局部变量 MenuId
title = 超级列表框1.取标题 (超级列表框1.现行选中项, )
.如果真 (title = “”)
返回 ()
.如果真结束
' 枚举快捷方式菜单 (title)
hMenu = CreatePopupMenu ()
GetCursorPos (pt)
.计次循环首 (取数组成员数 (items), i)
.如果真 (items [i].快捷方式名 = title)
MenuName = items [i].菜单名
AppendMenuA (hMenu, #MF_STRING, i, MenuName)
.如果真结束
' 本源码来自易语言资源网(www.5A5X.com)
.计次循环尾 ()
MenuId = TrackPopupMenuEx (hMenu, 位或 (#TPM_LEFTALIGN, #TPM_RETURNCMD, #TPM_RIGHTBUTTON), pt.x, pt.y, 取窗口句柄 (), 0)
.如果真 (MenuId > 0)
items [MenuId].项目对象.数值方法 (“DoIt”, )
.如果真结束
' 调试输出 (MenuId, items [MenuId].快捷方式名, items [MenuId].菜单名)
.子程序 枚举快捷方式菜单
.参数 lnk名称, 文本型
.局部变量 vFolderItem, 对象
.局部变量 vItemVerbs, 对象
.局部变量 nCount
.局部变量 index, 整数型
.局部变量 Item, 对象
.局部变量 name, 文本型
.局部变量 list, 快捷方式列表
CoInitialize (0)
vFolderItem = vFolder.对象型方法 (“ParseName”, lnk名称)
.如果真 (vFolderItem.是否为空 () = 假)
' vFolderItem.查看 ()
vItemVerbs = vFolderItem.对象型方法 (“Verbs”, )
' vItemVerbs.查看 ()
nCount = vItemVerbs.读数值属性 (“Count”, )
进入许可区 (许可证)
标签1.标题 = “读取桌面图标菜单中....”
.变量循环首 (0, nCount - 1, 1, index)
Item = vItemVerbs.对象型方法 (“Item”, index)
' Item.查看 ()
name = Item.读文本属性 (“Name”, )
list.快捷方式名 = lnk名称
list.菜单名 = name
list.项目对象 = Item
加入成员 (items, list)
' 调试输出 (name)
.' 如果真 (name = “属性(&R)”)
' Item.数值方法 (“DoIt”, )
.如果真结束
.变量循环尾 ()
进度条1.位置 = 进度条1.位置 + 1
CoUninitialize ()
.如果真结束
退出许可区 (许可证)
.子程序 __启动窗口_首次激活
.局部变量 count
.局部变量 name, 文本型, , "0"
.局部变量 index
.局部变量 i
.局部变量 path, 文本型
.局部变量 文件信息, SHFILEINFO
.局部变量 hThread
.局部变量 nCount, 整数型
.局部变量 hresult, 整数型
许可证 = 创建进入许可证 ()
CoInitialize (0)
vShell.创建 (“Shell.Application”, )
vFolder = vShell.对象型方法 (“NameSpace”, 系统_取桌面路径 ())
ImageList_Destroy (hImageList) ' 创建图标句柄
hImageList = ImageList_Create (32, 32, 24, 0, 0) ' 定义每张图片大小为16*16的图片组,色彩为24位真彩色
超级列表框1.发送信息 (4099, 1, hImageList) ' 为超级列表框设置图片组
ImageList_SetBkColor (hImageList, 超级列表框1.背景颜色) ' 图标颜色
count = 系统_枚举桌面快捷方式 (name)
进度条1.最大位置 = count
.计次循环首 (count, i)
path = 系统_取快捷方式指向 (name [i])
path = 选择 (取文本长度 (path) = 0, 系统_取桌面路径 () + “\” + name [i], path)
' 本源码来自易语言资源网(www.5A5X.com)
SHGetFileInfo (path, 128, 文件信息, 348, 258) ' SHGFI_ICON + SHGFI_SMALLICON=257(表示小图标)
index = 超级列表框1.插入表项 (, , ImageList_AddIcon (hImageList, 文件信息.hIcon), , , )
DestroyIcon (文件信息.hIcon)
超级列表框1.置标题 (index, 0, name [i])
LnkName = name [i]
启动线程 (&枚举快捷方式菜单, 取变量数据地址 (LnkName), hThread)
加入成员 (hThreadArray, hThread)
.计次循环尾 ()
.子程序 __启动窗口_将被销毁
删除进入许可证 (许可证)
.子程序 __启动窗口_创建完毕
.局部变量 nCount, 整数型
.局部变量 hresult, 整数型
nCount = 取数组成员数 (hThreadArray)
调试输出 (nCount, hThreadArray)
.判断循环首 (nCount > 0)
hresult = WaitForMultipleObjects (nCount, hThreadArray, 假, #INFINITE)
.判断开始 (hresult = #WAIT_TIMEOUT)
.判断 (hresult = #WAIT_OBJECT_0)
跳出循环 ()
.默认
.判断结束
.判断循环尾 ()
进度条1.位置 = nCount