有没有好的办法阻止windows关机或者注销命令的?
小弟学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 自启动代码还没有写进去 回复 1# long_road
我记得P版写过这个的. 回复 3# lixiaolong
好心人能给个链接么? $WM_QUERYENDSESSION = 0x0011
GUIRegisterMsg($WM_QUERYENDSESSION, "Cancel")
GUICreate("")
GUISetSTate(@SW_HIDE)
Global $Esc = 0
While 1
If $Esc = 1 then
MsgBox (0, "", "你不能关机!")
$Esc = 0
EndIf
sleep(10)
WEnd
Func Cancel($hWndGUI, $MsgID, $WParam, $LParam)
$Esc = 1
Return False
EndFunc
看看这个吧!!!!! 回复 4# long_road
我以前看的好像是这个.
http://www.autoitx.com/forum.php?mod=viewthread&tid=23297&highlight=%D7%E8%D6%B9 回复 3# lixiaolong
我另外编写一段专门写入timer.txt的程序,发现_FilewritetoLine()这个函数不能写入timer.txt,是不是WIN7下要用别的函数? 还有fileopen这个函数参数一旦设定成非0,就会导致文件打不开,这是怎么回事??? 回复 5# nis
这个代码是不是在WIN7下没作用?我照写但没效果。。。。。 回复 9# long_road
我的是XP 系统,测试成功! win7 没有试!不好意思!! 回复 10# nis
估计AU3程序的权限拿这个问题没办法了 本帖最后由 lixiaolong 于 2011-12-1 23:41 编辑
回复 7# long_road #include <File.au3>
;示例: 将替换 c:\test.txt 的第三行
_FileWriteToLine("c:\test.txt", 1, "替换原文第三行文本", 1)
MsgBox(0, "", @error)
;示例: 将在 c:\test.txt 的第三行插入一行文本
_FileWriteToLine("c:\test.txt", 2, "文本插入", 0)
MsgBox(0, "", @error)我用win7,试试这个,看@error还回什么. 我现在升级 回复 12# lixiaolong
知道原因了,_FileWriteToLine()这个函数$sText参数不能直接写变量,要以字符串形式写入。
RE: 有没有好的办法阻止windows关机或者注销命令的?
回复 12# lixiaolong知道原因了,_FileWriteToLine()这个函数$sText参数不能直接写变量,要以字符串形式写入。谢谢你的帮助
页:
[1]
2