Skip to content

Commit

Permalink
fix: update tomato life and fix reload
Browse files Browse the repository at this point in the history
  • Loading branch information
snomiao committed Jul 26, 2021
1 parent 8088ed4 commit cccfcc2
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 25 deletions.
2 changes: 1 addition & 1 deletion Core/CapslockX-Core.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ CapsLockX_Reload(){
ToolTip, CapsLockX 重载中
static times := 0
times += 1
if(times == 1){
if(times == 1 && false){ ;;感觉limited user 不太管用
; 使用 RunAsLimitiedUser 避免重载时出现 Could not close the previous instance of this script. Keep waiting?
RunAsLimitiedUser(A_WorkingDir "\CapsLockX.exe", A_WorkingDir)
; 这里启动新实例后不用急着退出当前实例
Expand Down
72 changes: 48 additions & 24 deletions Modules/插件-定时任务.ahk
Original file line number Diff line number Diff line change
Expand Up @@ -8,63 +8,80 @@
; ========== CapsLockX ==========

global T_ScheduleTasks := CapsLockX_Config("ScheduleTasks", "EnableScheduleTasks", 0, "使用定时任务(默认禁用,改为 1 开启)")
global T_ScheduleTasks_NoticeOnLaunch := CapsLockX_Config("ScheduleTasks", "NoticeOnLaunch", 1, "启动时报告番茄状态")
global T_ScheduleTasks_UseTomatoLife := CapsLockX_Config("ScheduleTasks", "UseTomatoLife", 1, "使用番茄报时(00分和30分播放工作铃声,每小时的25分和55分播放休息铃声)(需要先开启定时任务)")
global T_ScheduleTasks_UseTomatoLifeSwitchVirtualDesktop := CapsLockX_Config("ScheduleTasks", "UseTomatoLifeSwitchVirtualDesktop", 1, "使用番茄报时时,自动切换桌面(休息桌面为1,工作桌面为2)")

if(T_ScheduleTasks){
if (T_ScheduleTasks) {
高精度时间配置()
GoSub CapsLockX定时任务
; [有一个难以复现的 bug・Issue #17・snolab/CapsLockX]( https://github.com/snolab/CapsLockX/issues/17 )
}

Return

高精度时间配置(){
; global T_ScheduleTasks := CapsLockX_Config("ScheduleTasks", "", 0, "使用定时任务")
; MsgBox, 你开启了定时任务,是否现在配置高精度时间?
; IfMsgBox, Cancel
; return

global T_ScheduleTasks_UsingHighPerformanceTime := CapsLockX_Config("ScheduleTasks", "T_UsingHighPerformanceTime", "0", "已经配置过高精度时间的Flag")
if(T_ScheduleTasks_UsingHighPerformanceTime)
if (T_ScheduleTasks_UsingHighPerformanceTime)
return
ToolTip, 定时任务开启,正在为您配置系统高精度时间
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "FrequencyCorrectRate" /t REG_DWORD /d 2 /f,, Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "UpdateInterval" /t REG_DWORD /d 100 /f,, Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "MaxPollInterval" /t REG_DWORD /d 6 /f,, Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "MinPollInterval" /t REG_DWORD /d 6 /f,, Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "MaxAllowedPhaseOffset" /t REG_DWORD /d 0 /f,, Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v "SpecialPollInterval" /t REG_DWORD /d 64 /f,, Hide
RunWait net stop w32time,, Hide
RunWait net start w32time,, Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "FrequencyCorrectRate" /t REG_DWORD /d 2 /f, , Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "UpdateInterval" /t REG_DWORD /d 100 /f, , Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "MaxPollInterval" /t REG_DWORD /d 6 /f, , Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "MinPollInterval" /t REG_DWORD /d 6 /f, , Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v "MaxAllowedPhaseOffset" /t REG_DWORD /d 0 /f, , Hide
RunWait reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v "SpecialPollInterval" /t REG_DWORD /d 64 /f, , Hide
RunWait net stop w32time, , Hide
RunWait net start w32time, , Hide
CapsLockX_ConfigSet("ScheduleTasks", "T_UsingHighPerformanceTime", "1", "")
ToolTip
}
番茄状态计算(){
Return ((Mod((UnixTimeGet() / 60000), 30) < 25) ? "工作时间" : "休息时间")
}

番茄报时(force:=0){
; CapsLockX 暂停时,番茄状态也暂停
if(CapsLockX_Paused)
if (CapsLockX_Paused)
Return
; 检测睡眠标记文件以跳过报时
FileRead SLEEPING_FLAG, %TEMP%/SLEEPING_FLAG
if(SLEEPING_FLAG)
Return
static SLEEPING_FLAG_CLEAN := 0
if(!SLEEPING_FLAG_CLEAN){
; 启动时重置标记文件
FileDelete %TEMP%/SLEEPING_FLAG
SLEEPING_FLAG_CLEAN := 1
}else{
FileRead SLEEPING_FLAG, %TEMP%/SLEEPING_FLAG
if (SLEEPING_FLAG){
Return
}
}
番茄状态 := 番茄状态计算()
; 边沿触发过滤器
static 上次番茄状态 := 番茄状态计算()
if(上次番茄状态 == 番茄状态 && !force)

static 上次番茄状态 := T_ScheduleTasks_NoticeOnLaunch ? "" : 番茄状态计算()
; static 上次番茄状态 := 番茄状态计算()

if (上次番茄状态 == 番茄状态 && !force) {
Return
}
上次番茄状态 := 番茄状态
MsgBox, 番茄:%番茄状态%
TrayTip, 番茄:%番茄状态%, : %番茄状态%
; 状态动作
if("工作时间" == 番茄状态){
if ("工作时间" == 番茄状态) {
SoundPlay % "Data/NoteC_G.mp3" ; 升调
if(T_ScheduleTasks_UseTomatoLifeSwitchVirtualDesktop)
if (T_ScheduleTasks_UseTomatoLifeSwitchVirtualDesktop)
Func("SwitchToDesktop").Call(2) ; 切到工作桌面(桌面2)
}
if("休息时间" == 番茄状态){
if ("休息时间" == 番茄状态) {
SoundPlay % "Data/NoteG_C.mp3" ; 降调
if(T_ScheduleTasks_UseTomatoLifeSwitchVirtualDesktop)
if (T_ScheduleTasks_UseTomatoLifeSwitchVirtualDesktop)
Func("SwitchToDesktop").Call(1) ; 切到休息桌面(桌面1)
}
}
Expand All @@ -73,14 +90,21 @@ UnixTimeGet(){
; ref: https://www.autohotkey.com/boards/viewtopic.php?t=17333
t := A_NowUTC
EnvSub, t, 19700101000000, Seconds
Return t*1000+A_MSec
Return t * 1000 + A_MSec
}

CapsLockX定时任务:
if(T_ScheduleTasks_UseTomatoLife)
if (T_ScheduleTasks_UseTomatoLife)
番茄报时()
间隔 := 60000 ; 间隔为1分钟,精度到毫秒级
延时 := (间隔 - Mod(UnixTimeGet(), 间隔))
; ToolTip, % 延时
SetTimer CapsLockX定时任务, %延时%
Return
Return

; #If
; ^!i::
; 番茄状态 := 番茄状态计算()
; MsgBox, 番茄状态:%番茄状态%
; 番茄报时(1)
; return

0 comments on commit cccfcc2

Please sign in to comment.