学习了 |
wu_yang007 发表于 2025-5-13 13:43 谢谢 |
如果不行就用 v1可以吗 要不ai 转一下 之前我没怎么使用没注意 V1版本 有点问题 运行后三秒恢复显示了 刚才改了改V1的 你似下我运行没问题可以切换了 ;使用 COM 从任务栏暂时地移除活动窗口. /* ITaskbarList ¬ 的 VTable 中的方法: IUnknown: 0 QueryInterface -- 使用 ComObjQuery() 代替 1 AddRef -- 使用 ObjAddRef() 代替 2 Release -- 使用 ObjRelease() 代替 ITaskbarList: 3 HrInit 4 AddTab 5 DeleteTab 6 ActivateTab 7 SetActiveAlt */ ^F2:: toogle1 := !toogle1 If(toogle1) { 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) } else { IID_ITaskbarList := "{56FDF342-FD6D-11d0-958A-006097C9A090}" CLSID_TaskbarList := "{56FDF344-FD6D-11d0-958A-006097C9A090}" ; 创建 TaskbarList 对象并把它的地址保存到 tbl. tbl := ComObjCreate(CLSID_TaskbarList, IID_ITaskbarList) DllCall(vtable(tbl,4), "ptr", tbl, "ptr", activeHwnd) ; tbl.AddTab(activeHwnd) } return ; 非 dispatch 对象总是需要手动释放. ObjRelease(tbl) vtable(ptr, n) { ; NumGet(ptr+0) 返回对象的虚函数表 ; (简称为 vtable) 的地址. 表达式的其余部分从 ; vtable 中获取第 n 个函数的地址. return NumGet(NumGet(ptr+0), n*A_PtrSize) } return |
参与人数 1 | 无忧币 +5 | 收起 理由 |
---|---|---|
| + 5 |
wu_yang007 发表于 2025-5-13 12:40 谢谢 |
yyz2191958 发表于 2025-5-13 06:48 toggle := 1 ; Methods in ITaskbarList's VTable: ; IUnknown: ; 0 QueryInterface -- use ComObjQuery() instead ; 1 AddRef -- use ObjAddRef() instead ; 2 Release -- use ObjRelease() instead ; ITaskbarList: ; 3 HrInit ; 4 AddTab ; 5 DeleteTab ; 6 ActivateTab ; 7 SetActiveAlt F1:: { global IID_ITaskbarList := "{56FDF342-FD6D-11d0-958A-006097C9A090}" CLSID_TaskbarList := "{56FDF344-FD6D-11d0-958A-006097C9A090}" ; Create the TaskbarList object and store its address in tbl. tbl := ComObject(CLSID_TaskbarList, IID_ITaskbarList) toggle := !toggle if (!toggle) { activeHwnd := WinExist("A") DllCall(vtable(tbl,3), "ptr", tbl) ; tbl.HrInit() DllCall(vtable(tbl,5), "ptr", tbl, "ptr", activeHwnd) ; tbl.DeleteTab(activeHwnd) } else { DllCall(vtable(tbl,4), "ptr", tbl, "ptr", activeHwnd) ; tbl.AddTab(activeHwnd) } ; Non-dispatch objects must always be manually freed. ObjRelease(tbl) } vtable(ptr, n) { global ; NumGet(ptr+0) returns the address of the object's virtual function ; table (vtable for short). The remainder of the expression retrieves ; the address of the nth function's address from the vtable. return NumGet(NumGet(ptr+0, "UPtr"), n*A_PtrSize, "UPtr") } return 上面 v2 的 没似过 我用的 v1 的 需要手动 也可自己修改 如果不会改问 AI ;使用 COM 从任务栏暂时地移除活动窗口. /* ITaskbarList ¬ 的 VTable 中的方法: IUnknown: 0 QueryInterface -- 使用 ComObjQuery() 代替 1 AddRef -- 使用 ObjAddRef() 代替 2 Release -- 使用 ObjRelease() 代替 ITaskbarList: 3 HrInit 4 AddTab 5 DeleteTab 6 ActivateTab 7 SetActiveAlt */ F1:: 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) } return 使用方法 鼠标点击选中 然后按快捷键 恢复 也是 这个快捷键 |
参与人数 1 | 无忧币 +5 | 收起 理由 |
---|---|---|
| + 5 |
wu_yang007 发表于 2025-5-13 01:59 麻烦将ahk代码贴出来,谢谢 |
wu_yang007 发表于 2025-5-13 01:59 谢谢 |
本帖最后由 wu_yang007 于 2025-5-13 02:09 编辑 aHR0cHM6Ly93d3cuYXV0b2hvdGtleS5jb20vYm9hcmRzL3ZpZXd0b3BpYy5waHA/dD0xMTgxMzcNCg== ahk可以吗等级不够发不了连接 自己decode |
参与人数 1 | 无忧币 +5 | 收起 理由 |
---|---|---|
| + 5 |
我只会让它在最小化时不显示在任务栏 |
wxinchun92 发表于 2025-5-12 19:15 放在哪里?谢谢 |
不太懂 |
guong 发表于 2025-5-12 13:49 谢谢 |
应该可以吧 只是不会弄 |
谢谢分享 |
afang158 发表于 2025-5-12 09:28 谢谢 弄到托盘也行 谢谢 |
不太懂 进来看看 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.