【已解决】 HotKeySet无限循环问题
本帖最后由 小熊出山 于 2012-3-31 14:59 编辑我想要的效果:
每当我按下PrintScreen键时截图并保存到E:\Print ,然后程序一直待命,当我再次按键时又截图,不按键不截图,除非我结束进程才结束。
我写的代码会无限截图,根本不听使唤。。懂的帮看看,多谢了
!{:face (394):}
#include <ScreenCapture.au3>
#include <Misc.au3>
Global $PrintScr
$LP = "E:\Print" & "\" & @YEAR & "-" & @MON & "-" & @MDAY
HotKeySet("{PRINTSCREEN}", "PS")
While 1
Sleep(100)
WEnd
If Not FileExists($LP) Then
Sleep(1000)
DirCreate($LP)
EndIf
Sleep(2000)
Func PS()
$PrintScr = NOT $PrintScr
Do
$hBmp = _ScreenCapture_Capture ("")
_ScreenCapture_SaveImage($LP &"\" & @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & @MIN & @SEC & ".jpg", $hBmp) ;
Until $PrintScr = 1
EndFunc
多谢各位的帮助,问题已经解决了!
代码如下:
#NoTrayIcon
#include <ScreenCapture.au3>
#include <Misc.au3>
Opt("TrayIconHide",1)
_Singleton("TheNameOfMyScript")
$sDir= "E:\Print" & "\" & @YEAR & "-" & @MON & "-" & @MDAY
If Not FileExists($sDir) Then DirCreate($sDir)
HotKeySet('{PRINTSCREEN}', '_Capture')
HotKeySet('{ESC}', '_Quit')
While 1
Sleep(100)
WEnd
Func _Capture()
If FileExists($sDir) Then
_ScreenCapture_Capture($sDir & '\' & @HOUR & @MIN & @SEC & '.jpg')
Else
DirCreate($sDir)
Sleep(100)
_ScreenCapture_Capture($sDir & '\' & @HOUR & @MIN & @SEC & '.jpg')
EndIf
EndFunc
Func _Quit()
Exit
EndFunc
哪里抄来的代码?
截图函数放个循环起什么作用?
该循环只有个退出条件: Until $PrintScr = 1,你觉得在你CPU烧坏之前, 该变量能达到 1 吗? 注意 $PrintScr的变量类型、初值 #include <ScreenCapture.au3>
#include <Misc.au3>
Global $PrintScr = False
$LP = @ScriptDir & "\" & @YEAR & "-" & @MON & "-" & @MDAY
HotKeySet("{PRINTSCREEN}", "PS")
HotKeySet("^q", "Stop")
HotKeySet("{ESC}", "Quit")
While 1
Sleep(100)
If $PrintScr Then PS()
WEnd
Func PS()
$PrintScr = True
If Not FileExists($LP) Then
Sleep(1000)
DirCreate($LP)
EndIf
Sleep(100)
$list = WinList()
$hBmp = _ScreenCapture_Capture ("")
_ScreenCapture_SetJPGQuality(100)
_ScreenCapture_SaveImage($LP &"\" & @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & @MIN & @SEC & ".jpg", $hBmp) ;用时间去命名
EndFunc
Func Stop()
$PrintScr = False
EndFunc
Func Quit()
Exit
EndFunc 回复 4# veket_linux
首先感谢veket_linux !
我测试了一下你的代码,效果是按下PrintScreen键就开始每隔100毫秒截一张图,
我想实现按下PrintScreen键“就截一张图”,下次再按PrintScreen键“又截一张图”,如此反复。。不按键不截图,按键才截图,
如何实现呢? 我是新手,算不上伸手党 #include <ScreenCapture.au3>
$sDir = @ScriptDir & '\' & @YEAR & '-' & @MON & '-' & @MDAY
If Not FileExists($sDir) Then DirCreate($sDir)
HotKeySet('{PRINTSCREEN}', '_Capture')
HotKeySet('{ESC}', '_Quit')
While 1
Sleep(100)
WEnd
Func _Capture()
_ScreenCapture_Capture($sDir & '\' & @HOUR & @MIN & @SEC & '.jpg')
EndFunc ;==>_Capture
Func _Quit()
Exit
EndFunc ;==>_Quit 楼上正解,楼主截图还放循环。高人 回复 1# 小熊出山
楼主下面这一句是什么意思?
_Singleton("TheNameOfMyScript") 请修改标题加【已解决】” 回复 8# xms77
让脚本只运行一个进程
#include <Misc.au3>
_Singleton("TheNameOfMyScript")
这样如果脚本检测到自己已经启动就会立即退出 回复 10# 小熊出山
学习了,谢谢!我都是一直用下面的代码来防止软件重复运行的$1 = ProcessExists("xxx.exe")
$list = ProcessList("xxx.exe")
For $i = 1 To $list
If $list[$i] <> $1 Then
MsgBox(0,"请注意","xxx已经运行了,不要重复运行.")
Exit
EndIf
Next 楼上高人! 居然又被改回了
$print = _ScreenCapture_Capture ("")
_ScreenCapture_SaveImage($sDir &"\" & @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & @MIN & @SEC & ".jpg", $print)
这样多此一举还要释放$print,图个啥? 本帖最后由 小熊出山 于 2012-3-31 14:43 编辑
回复 13# afan
新手,习惯问题,已经改正了,呵呵,见怪莫怪!
顺便问一下如何让发布的代码变成彩色?
;
;如何让这里的代码变成像4楼发的那样有彩色。。
;
;
回复 14# 小熊出山
用【au3】代码【/au3】代替你现在的【code】代码【/code】
或者,点击发帖的“高级模式”,企鹅图标上面那个A2图标即可插入
页:
[1]
2