[AHK] Pop-up Time - 为任务栏居上党提供的一个解决任务栏与标签栏冲突的方案

应用平台
Windows

推荐类型
【开发者自荐】

一句简介
「Pop-Up Time」是一个能够隐藏置顶的任务栏,在右上角显示当前时间。当鼠标位于屏幕的最上方时,还有几个通过点拽鼠标右键触发命令的AutoHotKey脚本。

应用简介

功能1:隐藏任务栏

您是否尝试过把任务栏居于上方?是否觉得这样做用着很顺手,但是与现代的程序标签页代替传统标签栏的设计与「任务栏居上」的这个位置起了冲突?这个脚本就是为了完美解决这个问题而诞生的。这个解决方案很简单,平时把任务栏居上并隐藏。再启动这个脚本。

  • 这样一来,平时无论如何在屏幕上方滑动,都不会触发任务栏。除非鼠标在屏幕顶端按了一次右键,才会呼出任务栏。
    Pop-Up Time456

  • 又或者拖着文件其实不拖也行,按着鼠标左键不动就行 往上顶个一秒钟不动,也能触发任务栏。
    Pop-Up Time功能演示

功能2: 置顶显示,同步系统时间的透明窗口

本脚本自带有一个同步显示系统时间的透明GUI窗口,我给它起的名字就叫Pop-Up Time。你可以通过修改ini文件里的内容来改变Pop-Up Time的字体颜色,显示位置,字体大小等等。您可以右键托盘里的AutoHotKey图标,在菜单里选择:

  • 显示\隐藏 Pop-Up Time
  • 鼠标左键更改Pop-Up Time的显示位置 (默认双击托盘图标会激活这个功能)
  • 鼠标左键选取Pop-Up Time的显示颜色
  • 修改ini配置文件并重启此脚本
  • 重置ini配置文件并重启此脚本

功能3: 五个「只有鼠标处于屏幕的最上方,点击或拖动右键才会触发」的鼠标手势。

网盘里会有两个版本,1个为Windows10 版本,另外一个为Windows 11版本。这两个版本最大的差异就在于Windows 10版本能够显示托盘浮窗,而Windows 11版本不会。这五个鼠标手势为:
1. 右键点击屏幕最左上角,显示桌面 (形同按下Windows + D)
2. 鼠标右键位于屏幕的最上方,并向右拖动一段距离 (配置文件可定义具体像素距离),呼出临时桌面

  • 临时桌面就是:先收缩所有窗口,从而显示桌面,但是如果点击了鼠标左键,数百毫秒后会把所有收缩的窗口重新弹回来。这个功能只适合于想要显示桌面的目只是打开桌面上的一个程序或者文件,或者是选取并拖动桌面上的文件到一个什么程序或者网页窗口。并不适用于更改桌面布局,图标排序,新建文件等操作。
    Pop-up Time临时桌面演示

3. 鼠标右键位于屏幕的最上方,并向下拖动一段距离(配置文件可定义具体像素距离),显示所有程序
1. Windows10 版本形同于按下Alt + Tab,因为我觉得Win10下的Win+Tab显示好像有点慢,没alt+Tab快。
2. Windows 11版本形同于Windows + Tab,感觉微软在Windows 11里改进Windows + Tab的性能。
Pop-Up Time852 (1)
注:此图为1.0版本的老图,想要展示的功能为不同鼠标手势,触发不同的效果。

4. 鼠标右键位于屏幕的最上方,并向左拖动一定距离(配置文件可定义具体像素距离),在两个不同的虚拟桌面下,反复横跳。
Pop-up Time虚拟桌面间的左右横跳

5. 右键点击屏幕最右上角,弹出通知栏
1. Windows10 版本形同于按下Windows + A, 显示通知中心+快捷控制面板。
2. Windows11 版本形同于按下Windows + N 仅显示通知中心。在Windows 11里,微软把通知中心跟快捷控制面板拆开来了,没办法同一时间同时出现。
Pop-Up Time789
:point_down:Windows 11版本的Pop-Up Time,呼出快捷面板的方式
Pop-Up Time123 (1)

6. 鼠标左键点击Pop-up Time

  1. Windows11 版本,呼出快捷控制面板 (上面演示过一次了,上一张图就是)
  2. Windows10 版本,显示或是关闭托盘浮窗
    Pop-up Time托盘浮窗(位于上时)
    当Pop-Up Time显示在屏幕的上半边的时候:point_up_2:
    当Pop-Up Time显示在屏幕的下半边的时候:point_down:
    Pop-up Time托盘浮窗(位于下时)

为什么选择Pop-Up Time?

  1. 简约。该脚本就只有一个属于键盘上的快捷键 : Ctrl + \ 作用是用来显示或者隐藏右上角的当前系统时间。只要你的鼠标不是处于屏幕的最上方,任何属于该脚本的手势都不会生效。也就是说该脚本不会绑架您的鼠标右键,尽量避开了与其他手势软件和右键拖拽事件的冲突。
  2. 开源,有较好的注释,欢迎各位随意修改与使用!最后再安利一句,任务栏位置居上真的比默认好用!

有没有ExE版本的下载地址?

个人比较推荐使用ahk版本,因为使用者便于随时修改我也便于发布,但如果你不想安装AutoHotKey,执意要用一个能够独立exe文件,那么我也有:

  • :point_down:百度云盘仅包含1.0 Pop-Up Time的win11版本的源代码和64位的exe程序
    百度云:提取码: kn2j
  • :point_down:OneDrive包含1.3 Pop-Up Time的win10,win11版本的源代码,32位,64位的exe程序
    Mircosoft OneDrive_微软云盘

啊?你问我明明是同一脚本,为什么不放在同一个云盘里面?哦~因为我现在连能不能进去都是个问题啊!我还想给在云盘上正在共享着的脚本改个名字,百度云都不让啊!现在发现国内网盘对海外用户是真的不友好。好些年前,无论是百度云还是坚果云,蓝奏云还是个什么云,送的容量大不说,进入云盘的速度还贼快。不知道是从特朗普搞贸易战开始还是什么时候,这些互联网企业统统都玩起了收缩战略,一个两个的都在限制海外用户的体验……我现在连注册个云盘都要个86开头的手机号码!!!我没有啊!我还能怎么办。没办法,国内国外都还能访问的云盘大概就只剩下Microsoft OneDrive了吧。只能把这个当作新的发布渠道了。

脚本更新日志

1.0 :已拥有上述的3个功能。由于没有ini配置文件的功能,Pop-up Time (时间窗口) 不可修改。可能也是最节省系统内存资源的一代。
1.1 :引入ini配置文件的方案,Pop-up Time的时间的时间位置,字体格式和时间格式 (选择24/12小时制,是否显示秒数等等)。
1.2 :新增「从屏幕中选取颜色,并更新为Pop-Up Time的字体颜色」与「长按屏幕顶端也可以呼出任务栏」的功能,完善与修正脚本的部分功能。
→ 1.3 :Ahk版本新增图标 (图标文件需要下载并与脚本放在同一目录),5个鼠标手势功能进行统合调整。ini配置文件新增调整鼠标手势灵敏度的配置选项。

5 Likes

AutoHotKey源代码:

CoordMode, Mouse, Screen
Left := A_screenWidth*0.05
Right := A_screenWidth-1
; ---初始化参数---

Showup:
FormatTime, Timestr,, Time
Gui, Color, EEAA99
Gui, Font, s18 w700 c176AD7, Ink Free ; pop-up Time 字体相关
Gui, Add, Text,vTi w120 gWinkey, %Timestr%
Gui +ToolWindow +AlwaysOnTop +LastFound
WinSet, TransColor, EEAA99
Gui -Caption
Gui, Show,% "x" A_screenWidth*0.89 "y4", PopUp_ShowTime ; Pop-up Time 位置相关
SetTimer, Update, 700
SetTimer, WatchActiveWindow, 1000
Return
Update:
FormatTime, Timestr,, Time
GuiControl,,Ti,%Timestr%
Gui +ToolWindow +AlwaysOnTop
Return
Winkey:
	send, #a
return
; ----以上为Pop Up Time 时间显示的核心代码----

; ----快捷键隐藏Pop up TIme ----
^\::
hidewindow:
show := !show
If (WinExist("PopUp_ShowTime")) {
	Gui,Destroy
}else{
	Gosub showup
}
Return

; ----鼠标位置不位于屏幕上方时,自动隐藏任务栏----
WatchActiveWindow:
MouseGetPos, , ypos0, 
WinGetClass, class, ahk_id %win%
If (ypos0>= 70) {
	WinHide, ahk_class Shell_TrayWnd
	WinHide, Start ahk_class Button
}
Return

; ----以下为鼠标右键相关的代码-----
~*RButton::
mousegetpos ,xpos1,ypos1
if (ypos1 <= 1) {
	if (xpos1 = Right) { ; 当鼠标在屏幕最右边时按下右键
		send, #n
		return
	}
	if (xpos1 = 0) { ; 当鼠标在屏幕最左边时按下右键
		send #d
		Return
	}
	Winshow, ahk_class Shell_TrayWnd
	Winshow, Start ahk_class Button
	WinActivate, ahk_class Shell_TrayWnd
}
return
#if ypos1 <= 1
Rbutton up:: ; 鼠标手势
mousegetpos ,xpos2,ypos2
yValue:= ypos1-ypos2
xValue := xpos1-xpos2
if (xValue >= 180)  { ; 右键向左滑动时
	Send !+{tab}
} else if (xValue <= -100)  { ; 右键向右滑动时
	Sleep 200
	Send {Lwin}
} else if (yValue <= -150) { ; 右键向下滑动时
	Send #{tab}
}
mousegetpos ,xpos1,ypos1
return
#If GetKeyState("RButton", "P") = 1 ; 按住鼠标右键时,滚轮调整音量
WheelUp:: Send {volume_up}
WheelDown:: Send {volume_down}
return
1 Like

心路历程
不知道这里有没有喜欢把任务栏置顶的人……在很久很久以前,浏览器的标签页都在地址栏下面(至少那个时候的世界之窗浏览器便是如此),从那个时候开始,我就很喜欢把任务栏放在上面,原因无它,就是我使用电脑的90%时间里,鼠标都是放在屏幕的上半边。任务栏放在上面,鼠标就不用上下游走,用起来非常地快捷。后来Chrome卷起了标签栏放在窗口的最上方的风潮。但这样的设计就搞得很容易让我误触了,毕竟任务栏和标签栏只有1px的差别,手一抖就从换标签变成换程序去了……后来采用同样设计的浏览器越来越多,我才不得不转变为一个任务栏左侧党……

我本以为从此任务栏居上的好日子只能一去不复返……直到在几年前,我得知AutoHotKey竟然可以通过WinHide\WinShow, ahk_class Shell_TrayWnd这条命令来隐藏\显示任务栏!于是我就开始着手研究这个脚本该怎么写了……

  • 当然我也不是写了几年,毕竟这只是连同注释也都不超过100行,与任务栏相关的核心代码也就10行左右的脚本,只是总感觉用得不够自然,于是修修补补,改改停停。我试了很多很多方法,例如只有按下Win键,任务栏才会显示啦;当鼠标指针处于最左边或者右边时,任务栏才会显示啦。按住鼠标中键从屏幕顶端往下滑才允许任务栏显示几秒等等。

  • 况且虽然这个脚本的本质只是增加显示任务栏的门槛,但并不代表去掉任务栏后就万事大吉了。例如说,我有时不时看一眼当前时间的习惯,当任务栏能够轻易显示时,瞄一眼当前时间其实费不了多大功夫。但当我给显示任务栏加门槛以后,瞄一眼时间却变成了一件必须移动鼠标的事情。于是我写出显示与隐藏任务栏的代码后的第一时间就是想办法编一个显示当前系统时间的窗口,每秒都刷新。将来通过AutoHotKey隐藏任务栏的功能可能会被微软ban掉,但右上角的时间永远不会。这就是为什么这个脚本就叫Pop-up Time而不是什么Hide the Taskbar.

  • 当然不只有监视时间的需求。还有监视沟通类软件(例如说qq,微信)的图标是否会闪烁的需求。于是我就写过一个模块:在右上角的时间下方显示平时被隐藏起来的托盘浮窗。不过随着沟通逐渐过渡到手机上,今年我又买了个新电脑,再加上腾讯的种种黑历史。我现在这台电脑已经不装腾讯类软件了,因此这个需求就被我抹去了。如果有需求的话,可以把这一段代码换进去:

If (WinExist("ahk_class NotifyIconOverflowWindow")) {
	Winhide, ahk_class NotifyIconOverflowWindow
}else{
	Winshow, ahk_class NotifyIconOverflowWindow
	WinMove, ahk_class NotifyIconOverflowWindow, ,A_screenWidth*0.85, 75
}
return

Q: “这个脚本还会更新嘛?”
A: 大概不会,我自认为我已经把这个脚本的注释和结构写得很清楚了,普通用户只要稍微了解一下AutoHotkey入门,看看send是什么意思,run是怎么写,就能改出适合自己的修改版本。现在才把这个脚本发出来,主要是近期我看到了"微软将来不打算提供调整任务栏位置"的相关新闻,我在想,可能在将来,任务栏置顶党真的要掩埋在历史的尘埃里了,但至少现在,要是有跟我一样喜欢把任务栏置顶的人的话,我还是可以提供一个方案,让我们再置顶几年。要不是多亏了"StartAllBack"这个软件,或者微软让AutoHotKey不再能影响任务栏,那这个脚本就真的只剩下Pop-up Time了……唉,Windows真是越来越不好玩了。

2 Likes

点赞并吐槽道
你这不叫任务栏置顶,应该就任务栏居上

2 Likes

其实我也是任务栏居上党,
现在的方案是在窗口三大键的左侧另造了一个mini版的微缩任务栏
动画

image

总算把win10任务栏给干掉了! - 闲聊讨论 - 小众软件官方论坛 (appinn.net)

确实,我也看过你的帖子。我的第一印象是很酷,第二印象是这个方案其实依然没有解决系统的任务栏和浏览器的标签栏之间的冲突。你回顾一下的GIF图,想象一下如果把浏览器最大化,而这个浏览器里面有20个标签,那要是想点到第17个标签,会不会很容易误触?

确实如此,所以我在搭配一个浏览器插件用
有没有这种浏览器或者浏览器插件? - 问题求助 - 小众软件官方论坛 (appinn.net)

鼠标侧键一键触发,所有网页平铺,中键关闭,单击切换

大佬可以弄一个在下面用的吗,个人还是习惯右下角看时间,还有你的那个有图标闪烁希望可以加进去,最后吐槽下时间样式也太old school了 :joy:

如果默认任务栏的话,右下方不就能看时间了嘛……算了。你先复制源码,然后再利用笔记本的寻找替换功能把这部分代码替换掉。

  1. 右下角的时间窗口:
    选择第14行一整行,也就是
    Gui, Show,% "x" A_screenWidth*0.89 "y4", PopUp_ShowTime ; Pop-up Time 位置相关
    这一行,替换为:
    Gui, Show,% "x" A_screenWidth*0.89 "y" A_ScreenHeight*0.90, PopUp_ShowTime ; Pop-up Time 位置相关
    这一整行的意思就是把时间窗口移动到展现于显示屏幕从左往右数(A_screenWidth),第89%的像素点,从上往下数(A_ScreenHeight)第90%个像素点来。
    个人感觉第90%个像素点应该足够了,再低一点的话就会遮住Google chrome 下载栏的“全部显示”按钮了。不过你要是觉得不够好,想要再调整位置,你自己调整A_screenWidth和A_ScreenHeight的乘数,也就是0.89和0.9这两个数字就好。

2.“你的那个有图标闪烁希望可以加进去”,托盘区与任务栏紧密相连,我没办法让任务栏只显示托盘区而不显示任务区。

  • 一般情况来说,如果qq或者微信有消息来,先是显示通知,然后弹出任务栏,最后图标会闪烁。由于我现在给显示任务栏这个功能增加了一点门槛,让任务栏只有在“鼠标在屏幕的最顶端进行右击的情形下才会显示,否则一概不显示。”,于是你就会发现流程变成了这样:
  • 你收到来自QQ的通知 → 但是任务栏不会自动弹出来,换句话说就是任务栏没有任何反应 → 你在屏幕的最顶端右键,任务栏随之弹出(如果你的任务栏也是居上的话) → 你看到托盘区的QQ在闪烁。
  • 也就是说,QQ类的软件该闪烁的时候还是会闪烁的。只是通常来说任务栏会弹出来,让你看到托盘区的QQ,但我在做的就是不让任务栏轻易地弹出来,妨碍我点浏览器里的标签栏啊。怎么办呢?很简单,让QQ不处于任务栏之中,在别的地方显示,不就行了嘛。
  • 于是我就写了一个功能模块,显示平时被隐藏起来的托盘浮窗(也就是你平时在托盘区,左边不就是有个小三角,按下去的话,会有个悬浮窗弹出来,上面保存着着平时用不太上的后台图标;这个浮窗是可以被单独调用的,而且调用后不会随着鼠标的点击而消失),把QQ从托盘区那儿隐藏起来,然后再通过这个功能模块调用这个平时很少看的托盘悬浮窗。在任务栏被隐藏的情景下不能随时随地监视QQ是否闪烁的这个需求就搞定了。

至于代码怎么换进去……那就把左击时间会弹出控制中心这个功能换了把。
把源代码里的第23~26行,也就是这一段:

Winkey:
	send, #a
return

替换成这一段:

Winkey:
If (WinExist("ahk_class NotifyIconOverflowWindow")) {
	Winhide, ahk_class NotifyIconOverflowWindow
}else{
	Winshow, ahk_class NotifyIconOverflowWindow
	WinMove, ahk_class NotifyIconOverflowWindow, ,A_screenWidth*0.90, A_ScreenHeight*0.70
}
return

当然,在这段代码中,你还是看到A_screenWidth和A_ScreenHeight,所以如果你想调整位置的话……不用我多说了吧。
如果你按照我的方案取调整,你大概会得到这样的结果:
Pop-Up Time741


Q:1 哇,那我其实是任务栏左侧党\默认党,但我就只是想要你这个时间显示,不想在任务栏是否显示与隐藏上加门槛,我该怎么做啊?
A1: 很简单,只需要在源代码里搜索并删除WinHide,WinShow,WinMove开头的相关语句即可。如果怕误杀,那你有看到我有一段注释写着:鼠标位置不位于屏幕上方时,自动隐藏任务栏吗?从那开始往下删除,删到下一个注释为止(也就是 ;----以下为鼠标右键相关的代码—)。任务栏的显示与隐藏就不会再收到任何阻碍了。

Q2:你这时间样式也太old school了吧!
A2: 你要是不爽,可以自己尝试修改源代码的第三行来影响该字体的样式,尺寸与字体颜色。登入AutoHotKey官网自己搜索一下,读一下就能知道这一句代码是什么意思了。

1 Like

更新一下1.1版本,新增ini配置文件的功能,拜ini配置读写功能所赐,现在Pop-up Time除了支持通过双击托盘图标更改时间的显示位置以外,还支持用户通过修改ini配置文件的方法改字体大小和时间显示格式!
当然了,时间显示格式还是得照着FormatTime命令的格式来布置……废话少说了,还是来公开源代码吧!

CoordMode, Mouse, Screen
Menu, Tray, Add, 更改时间显示位置, Change_Time_Position
Menu, Tray, Add, 修改配置文件, Open_InI_File
Menu, Tray, Add, 重置配置文件, NewUser
Menu, Tray, Default, 更改时间显示位置
; ---初始化参数---
Initialize:
IniRead, xx, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
if xx is not number 
	Goto, NewUser
IniRead, yy, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
IniRead, Time_Fonts_size, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Fonts_size
IniRead, Time_Width_Box, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Width_Box
IniRead, Time_Format_To_Show, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Format_To_Show

Showup:
FormatTime, Timestr, Time, %Time_Format_To_Show%
Gui, Timar: Color, EEAA99
Gui, Timar: Font, s%Time_Fonts_size% w1000 c176AD7, Ink Free
Gui, Timar: Add, Text,vTi w%Time_Width_Box% gWinkey, %Timestr%
Gui Timar: -Caption +ToolWindow +AlwaysOnTop +LastFound
WinSet, TransColor, EEAA99
Gui, Timar: Show, x%xx% y%yy%, PopUp_ShowTime
SetTimer, Update, 700
SetTimer, WatchActiveWindow, 1000 ; 如果不想隐藏任务栏,删除下面的功能代码之余,还请删除这条代码
Return

Update:
FormatTime, Timestr, Time, %Time_Format_To_Show%
GuiControl, Timar: Text, Ti,%Timestr%
Gui Timar: +AlwaysOnTop
Return

Winkey:
	send, #a
return
; ----以上为Pop Up Time 核心代码----

; ----以下为:“鼠标位置不位于屏幕上方时,就自动隐藏任务栏”的功能代码----
WatchActiveWindow:
MouseGetPos, , ypos0, 
WinGetClass, class, ahk_id %win%
If (ypos0>= 70) {
	WinHide, ahk_class Shell_TrayWnd
	WinHide, Start ahk_class Button
}
Return

; ----快捷键隐藏Pop up TIme ----
^\::
hidewindow:
show := !show
If (WinExist("PopUp_ShowTime")) {
	Gui, Timar: Destroy
}else{
	Gosub showup
}
Return

; ----以下为鼠标右键相关的代码-----
~*RButton::
mousegetpos ,xpos1,ypos1
if (ypos1 <= 1) {
	if (xpos1 = A_screenWidth-1) { ; 当鼠标在屏幕最右边时按下右键
		send, #n
		return
	}
	if (xpos1 = 0) { ; 当鼠标在屏幕最左边时按下右键
		send #w
		Return
	}
	Winshow, ahk_class Shell_TrayWnd
	Winshow, Start ahk_class Button
	WinActivate, ahk_class Shell_TrayWnd
}
return

#if ypos1 <= 1
Rbutton up:: ; 鼠标手势
mousegetpos ,xpos2,ypos2
yValue:= ypos1-ypos2
xValue := xpos1-xpos2
if (xValue >= 180)  { ; 右键向左滑动时
	send {Lwin}
	Return
} else if (xValue <= -100)  { ; 右键向右滑动时
	whichdesk := !whichdesk
	if Whichdesk = 1	
	{
		send #^{Left}
	} else {
		send #^{Right}
	}
	Return
} else if (yValue <= -150) { ; 右键向下滑动时
	Send #{tab}
}
mousegetpos ,xpos1,ypos1
return

#If GetKeyState("RButton", "P") = 1 ; 按住鼠标右键时,滚轮调整音量
WheelUp:: Send {volume_up}
WheelDown:: Send {volume_down}
return

; ----以下为ini配置文件读写相关的代码-----
Change_Time_Position:
	Msgbox , 0, One more step! Click it!, 接下来,请点击鼠标左键,确定新的时间显示位置。, 2
	KeyWait, LButton, D
	mousegetpos ,xpos3,ypos3
	Sleep 500
	IniWrite,% xpos3, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
	IniWrite,% ypos3, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
Gui, Timar: Destroy
Goto, Initialize

NewUser:
	IniWrite,% A_screenWidth*0.87, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
	IniWrite,4, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
	IniWrite,18, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Fonts_size
	IniWrite,200, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Width_Box
	IniWrite,hh:mm_ss tt, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Format_To_Show
Gui, Timar: Destroy
Goto, Initialize

Open_InI_File:
RunWait, %A_ScriptDir%\Pop-Up_Time.ini
sleep, 500
Gui, Timar: Destroy
Goto, Initialize

Q: 配置文件的各个参数的意思是……?
A:
[Position]
xx= Pop-up Time的x轴显示位置
yy= Pop-up Time的y轴显示位置
[Pop-Up_Time_Setting]
Time_Fonts_size= Pop-up Time的字体尺寸
Time_Width_Box=如果pop-up Time分成两行,要么字太多,要么字太大。如果出现数字显示不整齐的问题或者不想分成两行显示,可以把这个数字改大一点
Time_Format_To_Show= 就是时间显示的格式,大写的H代表24小时制,小写的h代表12小时制,tt代表上午还是下午……详情请参考官方的FormatTime文档了啦!

Q:也就是说,运行这个脚本,我需要下载两份文件咯?一份ahk一份ini……是吗?
A: 没有的事!该脚本自带检测功能,当发现Pop-up Time的x轴变量不是数字时,会立即启动“重置配置文件”功能!也就是说,你只要安装好Autohotkey,保存本楼1.1版本的代码,然后再双击运行,配置文件就会自动创立!

再来更新个1.2版本, 更新日志如下:

修正
  1. 修复了1.1版本下,鼠标在屏幕的右顶端右键,却无法激活手势的BUG
  2. 更多的代码注释,便于理解与修改
  3. 我在使用1.1版本的时候,发现“点击鼠标左键来修改Pop-up Time的位置”这个功能好像总是不太准确。原因大概未知,本人为了实现更精准的定位,我就自顾自把点到鼠标横竖坐系都降低30 pixel.
删除
  • 删除“无论鼠标身在何处,只要按住鼠标右键并滑动滚轮,就能调节音量”的功能代码。还原了只要鼠标不在最顶端,就不会与系统用户产生任何交互的愿景。

新增

  1. INI配置文件新增颜色参数,现在可以通过修改配置文件里的INI的Time_Color_To_Show数值来更改Pop-Up Time的显示颜色了。
  2. 功能模块扩张,原本只能通过鼠标左键的点击选定Pop-up Time显示的位置,现在还可以通过鼠标左键的点击选择鼠标指针下的颜色。
    • 这个新功能在托盘图标的右键菜单里。
    • 鼠标点击修改Pop-up Time这个事件,一次只能改动位置或者颜色,不可能同时修改位置与颜色。
    • 默认双击托盘图标所展现的功能还是会和1.1版本一样,为更改时间显示位置。要是觉得平时改时间颜色的次数比改位置要多的,或者觉得默认双击托盘图标显示或者隐藏 Pop-up Time比较好的,请自行修改 Menu, tray, Default, 更改时间显示位置 这行代码,这里我就不做过多叙述了。
  3. 托盘图标新增“显示\隐藏 Pop-up Time"的选项,原本只能通过快捷键(Ctrl + ) 激活该功能,现在也能在托盘图标的右键菜单里找到了。
  4. 听说Windows 11迟点会加回自Windows 7 就有的”文件拖放到任务栏图标来打开“的功能,我在任务栏的隐藏机制里加了一段”检测鼠标左键是否长时间按住并位于屏幕顶端"的代码。于是现在显示任务栏的方式多了一种:
    • 鼠标位于屏幕顶端时,右键,任务栏立即响应。
    • 鼠标长按左键(或者拖拽着任何文件), 并移动到屏幕的顶端后等待数秒,任务栏才开始响应。

源代码:

CoordMode, Mouse, Screen
Menu, Tray, Add, 显示\隐藏 Pop-up Time, hidewindow
Menu, Tray, Add, 更改时间显示位置, Change_Time_Position
Menu, Tray, Add, 更改时间显示颜色, Change_Time_Color
Menu, Tray, Add, 修改配置文件, Open_InI_File
Menu, Tray, Add, 重置配置文件, NewUser
Menu, tray, Default, 更改时间显示位置
; ---初始化参数---
Initialize:
Color_Changing := 0
IniRead, xx, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
if xx is not number 
	Goto, NewUser
IniRead, yy, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
IniRead, Time_Fonts_size, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Fonts_size
IniRead, Time_Width_Box, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Width_Box
IniRead, Time_Format_To_Show, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Format_To_Show
IniRead, Time_Color_To_Show, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Color_To_Show

Showup:
FormatTime, Timestr, Time, %Time_Format_To_Show%
Gui, Timar: Color, EEAA99
Gui, Timar: Font, s%Time_Fonts_size% w1000 c%Time_Color_To_Show%, Ink Free
Gui, Timar: Add, Text,vTi w%Time_Width_Box% gWinkey, %Timestr%
Gui Timar: -Caption +ToolWindow +AlwaysOnTop +LastFound
WinSet, TransColor, EEAA99
Gui, Timar: Show, x%xx% y%yy%, PopUp_ShowTime
SetTimer, Update, 700
SetTimer, WatchActiveWindow, 1000 ; 如果不想隐藏任务栏,删除下面的功能代码之余,还请删除这条代码
Return

Update:
FormatTime, Timestr, Time, %Time_Format_To_Show%
GuiControl, Timar: Text, Ti,%Timestr%
Gui Timar: +AlwaysOnTop
Return

Winkey: ; 左键点击Pop-up Time时就会运行的功能代码
	send, #a
return
; ----以上为Pop-Up Time 核心代码----
WatchActiveWindow:
MouseGetPos, xpos0, ypos0, 
WinGetClass, class, ahk_id %win%
If (ypos0 >= 70) {
	WinHide, ahk_class Shell_TrayWnd
	WinHide, Start ahk_class Button
}
If (ypos0 <= 1 and GetKeyState("LButton","P") = 1) { ;在屏幕最顶端长按不动时,显示任务栏
	sleep 300
	MouseGetPos, Detect_xpos,,
	If (ypos0 <= 1 and Detect_xpos == xpos0 and GetKeyState("LButton","P") = 1) {
		WinShow, ahk_class Shell_TrayWnd
		WinShow, Start ahk_class Button
	}
}
Return
; ----以上为:“鼠标位置不位于屏幕上方时,就会自动隐藏任务栏”的功能代码----
; ----快捷键隐藏Pop-up TIme ----
^\::
hidewindow:
show := !show
If (WinExist("PopUp_ShowTime")) {
	Gui, Timar: Destroy
}else{
	Gosub showup
}
Return
; ----以下为鼠标右键相关的代码-----
~*RButton::
mousegetpos ,xpos1,ypos1
if (ypos1 <= 1) {
	if (xpos1 = A_screenWidth-1) { ; 当鼠标在屏幕最右边时按下右键
		send, #n
		return
	}
	if (xpos1 = 0) { ; 当鼠标在屏幕最左边时按下右键
		send #w
		Return
	}
	Winshow, ahk_class Shell_TrayWnd
	Winshow, Start ahk_class Button
	WinActivate, ahk_class Shell_TrayWnd
}
return

#if ypos1 <= 1
Rbutton up:: ; 鼠标手势
mousegetpos ,xpos2,ypos2
yValue:= ypos1-ypos2
xValue := xpos1-xpos2
if (xValue >= 180)  { ; 右键向左滑动时
	send {Lwin}
	Return
} else if (xValue <= -100)  { ; 右键向右滑动时
	whichdesk := !whichdesk
	if Whichdesk = 1	
	{
		send #^{Left}
	} else {
		send #^{Right}
	}
	Return
} else if (yValue <= -150) { ; 右键向下滑动时
	Send #{tab}
}
mousegetpos ,xpos1,ypos1
return

; ----以下为ini配置文件读写相关的代码-----
Change_Time_Color:
Color_Changing := 1
Change_Time_Position:
Msgbox , 0, One more step! Click it!, 接下来,在该窗口消失后,请点击鼠标左键,选择新的时间显示位置或者Pop-up Time的显示颜色。, 2
KeyWait, LButton, D
mousegetpos ,xpos3,ypos3
Sleep 500
If (Color_Changing == 0) {
	IniWrite,% xpos3 - 30, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
	IniWrite,% ypos3 - 30, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
} else {
	PixelGetColor, Time_Color_To_Show, xpos3, ypos3, RGB
	Msgbox , 0, 颜色已确定, RGB 代码为:%Time_Color_To_Show%。, 1
	IniWrite,%Time_Color_To_Show%, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Color_To_Show
}
Goto, Refresh_UI

NewUser:
	IniWrite,% A_screenWidth*0.87, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
	IniWrite,6, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
	IniWrite,18, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Fonts_size
	IniWrite,200, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Width_Box
	IniWrite,h:mm_ss tt, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Format_To_Show
	IniWrite,176AD7, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Color_To_Show
Goto, Refresh_UI

Open_InI_File:
RunWait, %A_ScriptDir%\Pop-Up_Time.ini
sleep, 500
Refresh_UI:
Gui, Timar: Destroy
Goto, Initialize

如果1.0版本能够正确地显示时间,但是1.2版本无法显示时间,只需要把上面这段代码覆盖并保存,然后在托盘图标的右键菜单里选择“重置配置文件”就好了。

我就是. 不过我不喜欢隐藏任务栏.

啊,那就对了 :joy:
这个脚本就是为了处理“当任务栏居上并隐藏时,鼠标在屏幕顶端来回活动容易呼出任务栏”的困惑。

如果任务栏使用的是大大图标,并且居上但不隐藏,会有种压着屏幕视线的不舒适感。不隐藏任务栏的话,任务栏与浏览器的标签栏只有一像素之隔,非常容易点错。

如果不隐藏任务栏,我觉得大概也用不上我这个脚本。

选择的是小图标, 而且使用 trays 居中任务栏图标, 所以基本上很少误触. 而且很好看.

我用Windows 7的时候就是这么做的,不过我居中的方法不是靠软件,而是假居中,具体实现方法是:建立一个新的工具栏,新工具栏所投射的目录为无文件目录。

这样的布局确实很好看,而且标签页或者程序开得比较少的情况下,误触也大概率没什么事,但还是不能让我无脑换标签页这点还是让我有一点点的不爽,因为每次换标签页的时候还是要故意往下移10个左右的像素。

况且,当浏览器的标签页一多起来,那就又回到了1像素之隔的问题了。也就是如果试图切换到比较靠中间的标签页时,还是有比较大的可能稍微移上了几个像素。然后就会因为悬停任务栏图标而触发展现悬停缩略图事件,然后我就得移开鼠标又小心翼翼地重新选一遍……

有这个办法的网盘么?我看前面那个百度盘里还是4月份的内容。

哇,版主终于回复了 :smiley:
我看这个贴都没什么人回复,好像大家都不是很感兴趣的样子。我就把这个贴子本身当作脚本的发布的平台,懒得更新网盘里的内容了。

行吧,那我迟些时候取更新下一楼和标题,再去更新网盘内容。

我应该是落掉了 :see_no_evil:

其实也没什么大更新,混个1.3版本。 更新日志如下:

修正
  1. 修复了「第一次点的明明是修改位置,却成了选颜色去了」的BUG

新增

  1. 托盘图标
  • 图标的获取方式有很多。你既可以从网络上搜索一个你觉得适合的,也可以从顶楼的链接——Mircosoft OneDrive_微软云盘里下载。
  • 图标能够正常显示的前提是图标的名字为Pop-Up_Time.ico并与脚本放置于同一目录
  • 当然如果不想要图标,觉得图标文件碍事,那么删除脚本第二行即可
  1. ini配置新增加鼠标手势的灵敏度调整。现在如果觉得某个灵敏度太低,那相对应的数值拉高,反之依然。
    !注意!由于这个版本把鼠标手势的灵敏度的设置都纳入了配置文件之中,无论之前用的是什么版本,进行升级后都需要重置一次配置文件。否则鼠标手势会失灵。

源代码(Windows 11版本):

CoordMode, Mouse, Screen
Menu, Tray, Icon, %A_ScriptDir%\Pop-Up_Time.ico ;如果不需要托盘图标,请删除此行
Menu, Tray, Add, 显示\隐藏 时间窗口, hidewindow
Menu, Tray, Add, 更改时间窗口的显示位置, Change_Time_Position
Menu, Tray, Add, 选取时间窗口的显示颜色, Change_Time_Color
Menu, Tray, Add, 修改配置文件, Open_InI_File
Menu, Tray, Add, 重置配置文件, NewUser
Menu, tray, Default, 更改时间窗口的显示位置
; ---初始化参数---
Initialize:
Color_Changing := 0
Middle_Of_Screen := A_ScreenHeight /2
IniRead, xx, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
if xx is not number 
	Goto, NewUser
IniRead, yy, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
IniRead, Time_Fonts_size, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Fonts_size
IniRead, Time_Width_Box, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Width_Box
IniRead, Time_Format_To_Show, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Format_To_Show
IniRead, Time_Color_To_Show, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Color_To_Show
IniRead, Sensitive_Of_Right_Move_Pixel, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Sensitive_Of_Right_Move_Pixel
IniRead, Sensitive_Of_Left_Move_Pixel, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Sensitive_Of_Left_Move_Pixel
IniRead, Sensitive_Of_Down_Move_Pixel, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Sensitive_Of_Down_Move_Pixel
If (yy <= Middle_Of_Screen) { 
	UorL := A_ScreenHeight*0.08 ;当Pop-up Time 的显示位置处于屏幕上方时,图标托盘的显示高度。
} else {
	UorL := A_ScreenHeight*0.70 ;当Pop-up Time 的显示位置处于屏幕下方时,图标托盘的显示高度。
}
Showup:
FormatTime, Timestr, Time, %Time_Format_To_Show%
Gui, Timar: Color, EEAA99
Gui, Timar: Font, s%Time_Fonts_size% w1000 c%Time_Color_To_Show%, Ink Free
Gui, Timar: Add, Text,vTi w%Time_Width_Box% gWinkey, %Timestr%
Gui Timar: -Caption +ToolWindow +AlwaysOnTop +LastFound
WinSet, TransColor, EEAA99
Gui, Timar: Show, x%xx% y%yy%, PopUp_ShowTime
SetTimer, Update, 700
SetTimer, WatchActiveWindow, 1000 ; 如果不想隐藏任务栏,删除下面的功能代码之余,还请删除这条代码
Return

Update:
FormatTime, Timestr, Time, %Time_Format_To_Show%
GuiControl, Timar: Text, Ti,%Timestr%
Gui Timar: +AlwaysOnTop
Return

Winkey: ; 左键点击Pop-up Time时就会运行的功能代码
	send, #a
return
; ----以上为Pop-Up Time 核心代码----
WatchActiveWindow:
MouseGetPos, xpos0, ypos0, 
WinGetClass, class, ahk_id %win%
If (ypos0 >= 70) {
	WinHide, ahk_class Shell_TrayWnd
	WinHide, Start ahk_class Button
}
If (ypos0 <= 1 and GetKeyState("LButton","P") = 1) { ;在屏幕最顶端长按不动时,显示任务栏
	sleep 300
	MouseGetPos, Detect_xpos,,
	If (ypos0 <= 1 and Detect_xpos == xpos0 and GetKeyState("LButton","P") = 1) {
		WinShow, ahk_class Shell_TrayWnd
		WinShow, Start ahk_class Button
	}
}
Return
; ----以上为:“鼠标位置不位于屏幕上方时,就自动隐藏任务栏”的功能代码----
; ----快捷键隐藏Pop-up TIme ----
^\::
hidewindow:
show := !show
If (WinExist("PopUp_ShowTime")) {
	Gui, Timar: Destroy
}else{
	Gosub showup
}
Return
; ----以下为鼠标右键相关的代码-----
~*RButton::
mousegetpos ,xpos1,ypos1
if (ypos1 <= 1) {
	if (xpos1 = A_screenWidth-1) { ; 当鼠标在屏幕最右边时按下右键
		send, #n
		Return
	}
	if (xpos1 = 0) { ; 当鼠标在屏幕最左边时按下右键
		Send #d
		Return
	}
	Winshow, ahk_class Shell_TrayWnd
	Winshow, Start ahk_class Button
	WinActivate, ahk_class Shell_TrayWnd
}
return

#if ypos1 <= 1
Rbutton up:: ; 鼠标手势
mousegetpos ,xpos2,ypos2
yValue:= ypos1-ypos2
xValue := xpos1-xpos2
if (xValue <= -Sensitive_Of_Right_Move_Pixel)  { ; 按住右键向右滑动时
	WinMinimizeAll
	sleep 150
	send {Escape}
	KeyWait, LButton, D
	sleep 500
	WinMinimizeAllUndo
	return
} else if (xValue >= Sensitive_Of_Left_Move_Pixel)  { ; 按住右键向左滑动时
	whichdesk := !whichdesk
	if Whichdesk = 1	
	{
		send, #^{Left}
	} else {
		send, #^{Right}
	}
	Return
} else if (yValue <= -Sensitive_Of_Down_Move_Pixel) { ; 按住右键向下滑动时
	sleep 150
	send {Escape}
	send #{tab}
	Return
}
mousegetpos ,xpos1,ypos1
return

; ----以下为ini配置文件读写相关的代码-----
Change_Time_Color:
Color_Changing := 1
Change_Time_Position:
Msgbox , 0, One more step! Click it!, 接下来,在该窗口消失后,请点击鼠标左键,选择新的时间显示位置或者Pop-up Time的显示颜色。, 1.5
KeyWait, LButton, D
mousegetpos ,xpos3,ypos3
Sleep 500
If (Color_Changing == 0) {
	IniWrite,% xpos3 - 30, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
	IniWrite,% ypos3 - 30, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
} else {
	PixelGetColor, Time_Color_To_Show, xpos3, ypos3, RGB
	Msgbox , 0, 颜色已确定, RGB 代码为:%Time_Color_To_Show%。, 1
	IniWrite,%Time_Color_To_Show%, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Color_To_Show
}
Color_Changing := 0
Goto, Refresh_UI

NewUser:
	IniWrite,% A_screenWidth*0.87, %A_ScriptDir%\Pop-Up_Time.ini, Position, xx
	IniWrite,6, %A_ScriptDir%\Pop-Up_Time.ini, Position, yy
	IniWrite,18, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Fonts_size
	IniWrite,200, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Width_Box
	IniWrite,h:mm_ss tt, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Format_To_Show
	IniWrite,176AD7, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Time_Color_To_Show
	IniWrite,80, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Sensitive_Of_Right_Move_Pixel
	IniWrite,180, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Sensitive_Of_Left_Move_Pixel
	IniWrite,100, %A_ScriptDir%\Pop-Up_Time.ini, Pop-Up_Time_Setting, Sensitive_Of_Down_Move_Pixel
Goto, Refresh_UI

Open_InI_File:
RunWait, %A_ScriptDir%\Pop-Up_Time.ini
sleep, 500
Refresh_UI:
Gui, Timar: Destroy
Goto, Initialize