; 简单的桌面便签 By FeiYue ; ; 用法: ; 1、按【F1】热键可以打开所有自动保存的便签 ; 2、新建可以打开新便签,便签中的内容会自动保存到文件 ; 3、关闭便签时会保存内容,内容为空会删除保存文件 F1:: Note("All") Note(cmd="", id:="", args*) { static init, dir, arr, oldx, oldy, oldt, myrun, timer ListLines, % (cmd="Timer") ? "Off" : A_ListLines if (!VarSetCapacity(init) && init:="1") { dir:=A_Temp "\ahk_box\" , arr:=[], oldx:=oldy:=oldt:="" , myrun:=Func(A_ThisFunc).Bind("Run") , timer:=Func(A_ThisFunc).Bind("Timer") } Switch cmd { Case "Timer": clear:=[], Sec:=A_Sec//5 For id,v in arr { ; 如果窗口被关闭,先保存一次再销毁窗口 DetectHiddenWindows, Off if !WinExist("ahk_id " id) { Note("Save", id) Gui, %id%: Destroy clear[id]:=1 } else { ; 每隔5秒自动保存一次 if (oldt!=Sec) Note("Save", id) WinGetPos,,, w1, h1 ControlGetPos, x, y, w, h, Edit1 w2:=w1-x-x, h2:=h1-y-x if (w!=w2 || h!=h2) ControlMove, Edit1,,, w2, h2 } } oldt:=Sec ; 清理全局数组,如果全部清空就停止定时器 For id,v in clear arr.Delete(id) if arr.Count()<1 SetTimer,, Off return Case "Save": DetectHiddenWindows, On if !WinExist("ahk_id " id) return WinGetTitle, f if !InStr(f, ".txt") return GuiControlGet, s, %id%:, Edit1 ; 编辑框内容为空且窗口关闭,就删除磁盘文件 DetectHiddenWindows, Off if (s="") && !WinExist("ahk_id " id) { FileDelete, % dir . f arr[id][1]:=s return } ; 编辑框内容改变才写入磁盘文件 if (s!=arr[id][1]) { arr[id][1]:=s if !FileExist(dir) FileCreateDir, % dir file:=FileOpen(dir . f,"w"), file.Write(s), file.Close() } return Case "Run": k:=Trim(A_GuiControl) if (k="新建") Note() else if (k="清空") { GuiControl, Focus, Edit1 ControlSend, Edit1, {Ctrl Down}a{Ctrl Up}{Del} } else if (k="撤销") { GuiControl, Focus, Edit1 ControlSend, Edit1, {Ctrl Down}z{Ctrl Up} } else if (k="删除") { GuiControl,, Edit1 Gui, Hide } return Case "All": i:=0 Loop Files, % dir "*.txt" Note(RegExReplace(A_LoopFilePath, ".*\\")), i++ if (i=0) Note() return } ; 确定自动保存的文件名 f:=cmd if !InStr(f, ".txt") { Loop f:=Format("{:03d}.txt", A_Index) Until !FileExist(dir . f) if !FileExist(dir) FileCreateDir, % dir FileAppend,, % dir . f } DetectHiddenWindows, Off if WinExist(f . " ahk_class AutoHotkeyGUI", "清空") return ; 备份默认GUI用于恢复 Gui, +Hwndold_id ; 创建新Gui Gui, New, +AlwaysOnTop +LastFound +Hwndid +Resize +Owner -DPIScale Gui, Margin, 0, 0 Gui, Font, s12 For k,v in StrSplit("新建|清空|撤销|删除", "|") { j:=(k=1) ? "":"x+0" Gui, Add, Button, %j% h30 Hwndctrl_id, %v% GuiControl, +g, %ctrl_id%, %myrun% } Gui, Add, Edit, xm w300 h150 -Wrap HScroll FileRead, s, % dir . f GuiControl,, Edit1, % s Gui, Show, Hide, % f WinGetPos, x, y, w, h if (oldx="" || oldy="") oldx:=x, oldy:=y else { x:=Round(oldx)+30, y:=Round(oldy)+30 , (x>A_ScreenWidth-w || y>A_ScreenHeight-h) && (x:=0, y:=0), oldx:=x, oldy:=y } Gui, Show, % "x" x " y" y GuiControl, Focus, Edit1 ; 在全局数组中保留各个窗口的编辑框内容 GuiControlGet, s,, Edit1 arr[id]:=[s] ; 利用绑定函数来启动定时器 SetTimer, % timer, 100 ; 恢复默认GUI Gui, %old_id%: Default }
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)