; 将当前窗口的底部任务栏隐藏3秒后,再恢复的示例
/*
  AHK帮助文档的示例搜:使用 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)
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。