小熊出山 发表于 2012-3-30 12:15:36

【已解决】 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

user3000 发表于 2012-3-30 12:32:01

哪里抄来的代码?
截图函数放个循环起什么作用?
该循环只有个退出条件: Until $PrintScr = 1,你觉得在你CPU烧坏之前, 该变量能达到 1 吗?

shqf 发表于 2012-3-30 12:36:12

注意 $PrintScr的变量类型、初值

veket_linux 发表于 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键“又截一张图”,如此反复。。不按键不截图,按键才截图,

如何实现呢? 我是新手,算不上伸手党

afan 发表于 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

jinefo 发表于 2012-3-30 16:39:31

楼上正解,楼主截图还放循环。高人

xms77 发表于 2012-3-30 21:19:36

回复 1# 小熊出山
楼主下面这一句是什么意思?
_Singleton("TheNameOfMyScript")

zldfsz 发表于 2012-3-30 21:32:31

请修改标题加【已解决】”

小熊出山 发表于 2012-3-30 23:20:54

回复 8# xms77



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

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

xms77 发表于 2012-3-31 06:59:11

回复 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

rdance 发表于 2012-3-31 07:09:53

楼上高人!

afan 发表于 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楼发的那样有彩色。。
;
;

afan 发表于 2012-3-31 14:48:14

回复 14# 小熊出山


    用【au3】代码【/au3】代替你现在的【code】代码【/code】
或者,点击发帖的“高级模式”,企鹅图标上面那个A2图标即可插入
页: [1] 2
查看完整版本: 【已解决】 HotKeySet无限循环问题