有这个需求 搜索引擎 各种找 找好几天 最后还得是帮助文档 问 ai(百度--就有这个) 的体验俩字 难受
不罗嗦了上代码 (v1版本帮助文档搜索dllcall()的第十三个例子就是)
#13: 使用 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 3000DllCall(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)}
不罗嗦了上代码 (v1版本帮助文档搜索dllcall()的第十三个例子就是)
#13: 使用 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 3000DllCall(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)}