小弟学autoit才一周,最近想控制自己用电脑的时间,就着手编一个开机自启动的计时GUI程序,设置alt+q为Hotkey,每次开机启动后从c:\timer.txt文件读取上次保存的数据,设想的保存数据时间点是关机或者注销,但是我最后发现程序不能保存数据的原因是检测到关机,注销命令后不能执行文件写入命令,是不是windows接受到关机的命令后拒绝外部程序对windows的操作了?有什么办法可以在关机前保存数据并且比较节省资源的?下面我贴上自己的代码:#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include "File.au3"
#Region ### START Koda GUI section ### Form=c:\users\litao\desktop\atuoit3\au3小制作\窗口程序\计时器.kxf
$Form1_1 = GUICreate("timer", 499, 108, 224, 176)
$timer = GUICtrlCreateLabel("", 0, 0, 498, 107)
GUICtrlSetFont(-1, 45, 800, 0, "黑体")
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
Local $file=FileOpen("C:\timer.txt")
If $file=-1 Then
MsgBox(0,"错误","打开文件错误")
Exit
EndIf
Local $line=FileReadLine($file)
Local $second=Mod($line,100)
Local $minute=Int(Mod($line,10000)/100)
Local $hour=Int($line/10000)
Local $turn,$key ;$turn是按alt+q热键后计时5s再隐藏窗口 $key是用来检测窗口是否显示的标志位
FileDelete("C:\timer.txt")
HotKeySet("!q","show") ;设置热键alt+q,显示窗口
OnAutoItExitRegister("autoexit")
While 1
$second+=1
Sleep(1000) ;延时1秒
If $second=60 Then
$second=0
$minute+=1
If $minute=60 Then
$minute=0
$hour+=1
EndIf
EndIf
If $key Then
$turn+=1
If $turn=5 Then
GUISetState(@SW_HIDE)
$turn=0
$key=0
EndIf
EndIf
GUICtrlSetData($timer,$hour&"小时"&$minute&"分钟"&$second&"秒")
WEnd
Func show()
$key=GUISetState(@SW_SHOW)
EndFunc
Func autoexit()
If @exitMethod=3 Or @exitMethod=4 Then ;系统注销或关机
$filecopy=FileOpen("C:\timer.txt",8)
If $filecopy=-1 Then
MsgBox(0,"错误","写入失败")
EndIf
FileWriteLine($filecopy,"123")
EndIf
EndFunc
|