2016-08-18 15 views
0

ここまでは私が書いたスクリプトです。それは部分的にしか機能しません。 アラームが再生された後でなければ、PCのスクリーンショットを撮る必要があります。スクリプトを実行すると、すぐにスクリーンショットが撮られ、適切なファイル名と場所に保存され、mspaintが閉じます。その後、20秒ごとにループし、別のループを実行します。私の間に何かが間違っているだけではわかりません。 Elapsedが20秒未満になるまでwhileループに留まる構文をどのように読んでいますか?その後、ファイルにアクセスするとwhileループを終了し、無限ループを続行します。AutoHotkey FileGetTime Access ScreenShot

Loop { 

    FileGetTime, LastTime, alarm.wav, A 
    Elapsed := A_Now - LastTime 

    while (Elapsed > 20000){ 
     FileGetTime, LastTime, alarm.wav, A 
     Elapsed := A_Now - LastTime 
    } 

    send {PrintScreen} 
    Run, MSPaint 
    WinWaitActive, Untitled - Paint 
    Send ^v 
    Sleep, 50 
    Send ^s 
    Sleep, 50 
    Send c:\Screenshots\ 
    Send %A_Now% 
    Sleep, 100 
    Send {Enter} 
    Sleep, 2000 
    WinClose, ahk_exe MSPaint.exe 


    Sleep, 20000 

} 
+0

ファイルの取得時間は、** A ** ccessと数えられます。 'A 'を削除してみてください – wOxxOm

+0

いいえ、" A "はファイルの" A "アクセス時刻を取得するようにアプリケーションに指示します。 –

+0

申し訳ありませんが、そのように外れることを意味しませんでした。 :) "A"を削除すると、デフォルトで "M"になり、ファイルの変更時刻が取得されます。ファイルを再生しても変更されないため、修正時間を使用することはできません。また、私は最後のアクセス時間に影響しないスクリプトを実行してチェックしました。私がスクリプトを閉じた直後のアクセス時間に4分前に示されました。 –

答えて

2

私は、whileループ内

MsgBox %Elapsed% 

を置くことによってそれを考え出しました。ミリ秒ではなく秒を計算します。 20000から20までの方程式を落として、今は動作します。

#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. 
; #Warn ; Enable warnings to assist with detecting common errors. 
SendMode Input ; Recommended for new scripts due to its superior speed and reliability. 
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. 

LastTime = 0 

Loop 
{ 

    Elapsed = 30 

    while (Elapsed > 20) 
    { 
     FileGetTime, LastTime, alarm.wav, A 
     Elapsed := A_Now - LastTime 
    } 

    send {PrintScreen} 
    Run, MSPaint 
    WinWaitActive, Untitled - Paint 
    Send ^v 
    Sleep, 50 
    Send ^s 
    Sleep, 200 
    Send c:\Screenshots\%A_Now% 
    Sleep, 100 
    Send {Enter} 
    Sleep, 200 
    WinClose, ahk_exe MSPaint.exe 


    Sleep, 20000 

}