Leeo
1
先前的帖子大家有在讨论如何使窗口置底,但最后没有比较好的讨论结果。
最近翻出了一个古老脚本,稍微改了一下,可以将某个窗口变为桌面的子窗口,即按下Win+D
,该窗口不会最小化,且永远不会覆盖其他窗口,尤其适合待办事项、笔记窗口等需要强提醒的窗口。
使用方法:将以下代码保存为.ahk
文件,Ctrl+D
窗口置底,Ctrl+B
恢复原状。
;Ctrl+d 将当前窗口设置为桌面的子窗口(置底)
^d::
WinSet:=AlwaysAtBottom(WinExist("A"))
return
;http://www.autohotkey.com/board/topic/80573-how-to-set-a-gui-to-be-always-at-bottom/
AlwaysAtBottom(Child_ID)
{
WinGet, Desktop_ID, ID, ahk_class WorkerW
Return DllCall("SetParent", "uint", Child_ID, "uint", Desktop_ID)
}
;Ctrl+b 恢复原状
^b::
WinSet:=undoAlwaysAtBottom(WinExist("A"))
return
undoAlwaysAtBottom(Child_ID)
{
Return DllCall("User32\SetParent", "Ptr",Child_ID, "Ptr",0)
}
GuiClose:
GuiEscape:
ExitApp
Return
- 有点不完美的是,置底后窗口会变为Win7样式,带有一圈边框,暂时不知如何去除。
- 一点设想:配合DockIt或许可以将任意窗口的任意部位钉在桌面上,或许你可以将网页中的天气、股票、视频窗以桌面小部件的方式显示,打造一个桌面版的动态磁帖。不过由于dockit是将窗口置顶的,需要进一步修改。
- 目前发现与酷呆桌面冲突,如果你正在使用桌面图标整理软件,可能会有bug。
@dog @deanme @Fox
4 个赞
dog
3
试试这个指令:
WinSet, Style, -0xC00000, ahk_id %underarrow%
我之前也研究过怎么搞网页局部放桌面:
发现如果firefox要是有类似 Separate Window - Chrome 应用商店 (google.com)这个插件就好办了。
可惜没有,我试了十个chrome系的浏览器,他们的分离窗口全都好死不死有个边框不能通过WinSet, Style, -0xC00000, ahk_id %underarrow%
去掉。
只有Firefox的分离窗口,可以通过这个指令去掉边框(但是没有Separate Window这个插件这种选择层级的功能)。
效果如下:
可以把b站跳舞网页放到桌面图标下面(播完会自动切换下一个视频)。
用这个指令就可以只显示局部窗口了:
WinSet, Region , W151 H61 0-31, A
尝试用 AutoHotkey v2 写了一下代码~
!F1:: func_WinAlwaysBottom(WinExist("A"), 1) ; Alt + F1:启用窗口置底(嵌入桌面)
!F2:: func_WinAlwaysBottom(WinExist("A"), 0) ; Alt + F2:禁用窗口置底(嵌入桌面)
func_WinAlwaysBottom(Child_ID, DoOrUndo) {
If DoOrUndo = 1 { ; 启用窗口置底(嵌入桌面)
Desktop_ID := WinGetID("ahk_exe explorer.exe ahk_class WorkerW")
Return DllCall("SetParent", "uint", Child_ID, "uint", Desktop_ID)
} Else If DoOrUndo = 0 { ; 禁用窗口置底(嵌入桌面)
Return DllCall("User32\SetParent", "Ptr", Child_ID, "Ptr", 0)
}
}
lqzh
7
Windows11 22621.1555
按下 Ctrl+D 以后窗口就不见了…… 也不在桌面
但是按 Ctrl+B 能显示回来~
求解~
Leeo
8
这个脚本的原理是将当前窗口绑定到桌面窗口,所以你可能将窗口绑定到其他程序了,例如任务栏。
右键在任务栏脚本图标点下“Window Spy”,再点下桌面,获取系统桌面窗口的标识。
确保脚本里的设定的窗口名称和这里显示的一致