From cccfcc27defcd64415f227443e18bb87469cbfd2 Mon Sep 17 00:00:00 2001 From: snomiao Date: Tue, 27 Jul 2021 04:34:18 +0800 Subject: [PATCH] fix: update tomato life and fix reload --- Core/CapslockX-Core.ahk | 2 +- ...2\346\227\266\344\273\273\345\212\241.ahk" | 72 ++++++++++++------- 2 files changed, 49 insertions(+), 25 deletions(-) diff --git a/Core/CapslockX-Core.ahk b/Core/CapslockX-Core.ahk index 85fa2ed5..d05d6998 100644 --- a/Core/CapslockX-Core.ahk +++ b/Core/CapslockX-Core.ahk @@ -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) ; 这里启动新实例后不用急着退出当前实例 diff --git "a/Modules/\346\217\222\344\273\266-\345\256\232\346\227\266\344\273\273\345\212\241.ahk" "b/Modules/\346\217\222\344\273\266-\345\256\232\346\227\266\344\273\273\345\212\241.ahk" index df87a33a..0123021c 100644 --- "a/Modules/\346\217\222\344\273\266-\345\256\232\346\227\266\344\273\273\345\212\241.ahk" +++ "b/Modules/\346\217\222\344\273\266-\345\256\232\346\227\266\344\273\273\345\212\241.ahk" @@ -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) } } @@ -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 \ No newline at end of file +Return + +; #If +; ^!i:: +; 番茄状态 := 番茄状态计算() +; MsgBox, 番茄状态:%番茄状态% +; 番茄报时(1) +; return \ No newline at end of file