当前位置: 主页 > 百科 > 计算机编程 > 易语言源码 >
-12 Comments

易语言Shell 外壳编程,执行桌面图标右键菜单

发布于:2016-07-03  |   作者:http://www.zxjsq.net  |   已聚集:人围观

.版本 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


标签:                   喜欢:收藏