找回密码
 加入
搜索
查看: 7670|回复: 22

[AU3基础] 【已解决】 HotKeySet无限循环问题

 火.. [复制链接]
发表于 2012-3-30 12:15:36 | 显示全部楼层 |阅读模式
本帖最后由 小熊出山 于 2012-3-31 14:59 编辑

我想要的效果:
每当我按下PrintScreen键时截图并保存到E:\Print ,然后程序一直待命,当我再次按键时又截图,不按键不截图,除非我结束进程才结束。

我写的代码会无限截图,根本不听使唤。。懂的帮看看,多谢了





#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

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2012-3-30 12:32:01 | 显示全部楼层
哪里抄来的代码?
截图函数放个循环起什么作用?
该循环只有个退出条件: Until $PrintScr = 1,  你觉得在你CPU烧坏之前, 该变量能达到 1 吗?

评分

参与人数 1金钱 +10 收起 理由
afan + 10

查看全部评分

发表于 2012-3-30 12:36:12 | 显示全部楼层
注意 $PrintScr的变量类型、初值
发表于 2012-3-30 12:44:14 | 显示全部楼层
#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
 楼主| 发表于 2012-3-30 15:06:38 | 显示全部楼层
回复 4# veket_linux


首先感谢veket_linux !

我测试了一下你的代码,效果是按下PrintScreen键就开始每隔100毫秒截一张图,

我想实现按下PrintScreen键“就截一张图”,下次再按PrintScreen键“又截一张图”,如此反复。。不按键不截图,按键才截图,

如何实现呢? 我是新手,算不上伸手党
发表于 2012-3-30 15:49:52 | 显示全部楼层
#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
发表于 2012-3-30 16:39:31 | 显示全部楼层
楼上正解,楼主截图还放循环。高人
发表于 2012-3-30 21:19:36 | 显示全部楼层
回复 1# 小熊出山
楼主下面这一句是什么意思?
_Singleton("TheNameOfMyScript")
发表于 2012-3-30 21:32:31 | 显示全部楼层
请修改标题加【已解决】”
 楼主| 发表于 2012-3-30 23:20:54 | 显示全部楼层
回复 8# xms77



让脚本只运行一个进程
#include <Misc.au3>

_Singleton("TheNameOfMyScript")
这样如果脚本检测到自己已经启动就会立即退出

评分

参与人数 1金钱 +30 贡献 +1 收起 理由
xms77 + 30 + 1 感谢解惑

查看全部评分

发表于 2012-3-31 06:59:11 | 显示全部楼层
回复 10# 小熊出山
学习了,谢谢!我都是一直用下面的代码来防止软件重复运行的
$1 = ProcessExists("xxx.exe")
$list = ProcessList("xxx.exe")
For $i = 1 To $list[0][0]
        If $list[$i][1] <> $1 Then
                        MsgBox(0,"请注意","xxx已经运行了,不要重复运行.")                        
                        Exit
                EndIf
Next
发表于 2012-3-31 07:09:53 | 显示全部楼层
楼上高人!
发表于 2012-3-31 13:48:27 | 显示全部楼层
居然又被改回了
$print = _ScreenCapture_Capture ("")
_ScreenCapture_SaveImage($sDir &"\" & @YEAR & "-" & @MON & "-" & @MDAY & "_" & @HOUR & @MIN & @SEC & ".jpg", $print)
这样多此一举还要释放$print,图个啥?
 楼主| 发表于 2012-3-31 14:37:55 | 显示全部楼层
本帖最后由 小熊出山 于 2012-3-31 14:43 编辑

回复 13# afan


新手,习惯问题,已经改正了,呵呵,见怪莫怪!

顺便问一下如何让发布的代码变成彩色?
;
;如何让这里的代码变成像4楼发的那样有彩色。。
;
;
发表于 2012-3-31 14:48:14 | 显示全部楼层
回复 14# 小熊出山


    用【au3】代码【/au3】代替你现在的【code】代码【/code】
或者,点击发帖的“高级模式”,企鹅图标上面那个A2图标即可插入

评分

参与人数 1金钱 +30 收起 理由
xms77 + 30

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-19 09:39 , Processed in 0.278088 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表