[dllcall][com]使用 COM 从任务栏暂时地移除活动窗口

使用 COM 从任务栏暂时地移除活动窗口
/*
  例子: 使用 COM 从任务栏暂时地移除活动窗口.

  ITaskbarList 的 VTable 中的方法:
    IUnknown:
      0 QueryInterface  -- 使用 ComObjQuery 代替
      1 AddRef          -- 使用 ObjAddRef 代替
      2 Release         -- 使用 ObjRelease 代替
    ITaskbarList:
      3 HrInit
      4 AddTab
      5 DeleteTab
      6 ActivateTab
      7 SetActiveAlt
*/
IID_ITaskbarList  := "{56FDF342-FD6D-11d0-958A-006097C9A090}"
CLSID_TaskbarList := "{56FDF344-FD6D-11d0-958A-006097C9A090}"

; 创建 TaskbarList 对象并把它的地址保存到 tbl.
tbl := ComObjCreate(CLSID_TaskbarList, IID_ITaskbarList)

activeHwnd := WinExist("A")

DllCall(vtable(tbl,3), "ptr", tbl)                     ; tbl.HrInit()
DllCall(vtable(tbl,5), "ptr", tbl, "ptr", activeHwnd)  ; tbl.DeleteTab(activeHwnd)
Sleep 3000
DllCall(vtable(tbl,4), "ptr", tbl, "ptr", activeHwnd)  ; tbl.AddTab(activeHwnd)

; 非 dispatch 对象总是需要手动释放.
ObjRelease(tbl)

vtable(ptr, n) {
    ; NumGet(ptr+0) 返回对象的虚函数表
    ; (简称为 vtable) 的地址. 表达式的其余部分从
    ; vtable 中获取第 n 个函数的地址.
    return NumGet(NumGet(ptr+0), n*A_PtrSize)
}

 

给TA捐赠
共{{data.count}}人
人已捐赠
其他

[dllcall][系统时间]改变系统的时钟为指定的日期和时间

2018-1-1 15:54:39

其他

[RegisterCallback]显示了所有顶层窗口的摘要

2018-1-1 16:21:03

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索