2013-04-24 16 views
6

AutoHotKey'i kullanarak, bir anahtarın inmesiyle kırılabileceğim oldukça basit bir döngü komut dosyasına sahibim. Web sitelerinden birkaç farklı kod denedim ama işe yaramıyor.AutoHotKey tuşa kesme döngüsü

#g:: 
Loop 20 
{ 
    MouseClick, left, 142, 542 
    Sleep, 1000 
    MouseClick, left, 138, 567 
    Sleep, 1500 
    MouseClick, left, 97, 538 
    Sleep, 1000 
} 

cevap

1

sizin döngü tamamlamak için biraz zaman alıyor çünkü dava için en kolay çözüm olabilir global bir değişken ekleme:

İşte kod. etkisi anında ortaya çıkacaktır yukarıdaki gibi kullanma

global break_g = 0 

#b:: 
    break_g = 1 
return 


#g:: 
break_g = 0 
Loop 20 
{ 
    MouseClick, left, 142, 542 
    Sleep, 1000 
    MouseClick, left, 138, 567 
    Sleep, 1500 
    MouseClick, left, 97, 538 
    Sleep, 1000 
    if(break_g = 1) 
    { 
     return 
    } 
} 
return ; also you were missing this return 
+0

bu işe yarıyor. teşekkür ederim. Anında durma en iyisi olurdu ama bundan memnunum. – Dave

+0

@Dave Her bir MouseClick'ten önce bir if ifadesi koymanız yeterlidir. –

+0

anlamlıdır, bunu deneyeceğim. tekrar teşekkürler – Dave

0
#g:: 
Loop 20 
{ 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    MouseClick, left, 142, 542 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    Sleep, 1000 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    MouseClick, left, 138, 567 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    Sleep, 1500 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    MouseClick, left, 97, 538 
    KeyWait,Ctrl,D T0 
     if Errorlevel = 0 
      break 
    Sleep, 1000 
} 

return 

yararlı olabilir. Daha sık olmamakla birlikte, bir aralık için Ctrl tuşunu basılı tuttuğunuzda, döngüsünüzü durduracaksınız.

+0

Kodunuzda kusurlarınız var. Uyku yürütülürken tutmaya başlarsanız, ctrl'i uyku süresinin tamamı boyunca tutmalısınız. Yani etki aniden uzaktır. Aynı komutu altı kez de kopyaladınız, kendiniz tekrarlamamalısınız (eğer OP kısayol tuşunu değiştirmek isterse, 6 ya da daha fazla kez iyi şanslarsa). Ve bütün döngü, kesintiye uğramaması gereken tek bir komut olup olmadığını bilmiyorsunuz; Benim yöntemimi kullanarak istediğiniz zaman bir if deyimi (isterseniz, kullanıcı için bu kadar) koyabilirsiniz ve döngü bir sonlandırma elde edebilirsiniz. –

+0

@armin, Uyku gerçeğini biliyorum. (Bu yüzden "daha sık kullandım" ifadesini kullandım) Ayrıca, cevabım genelde soruya özgü ve genel durum için değil. (Dave'in betiği küçük olduğu için, tekrarlamayı 6 kez alabilirim). ve buna "break_g **" bir "global" olmak gerekmiyor. Görüyorum ki bu noktayı kodumdan düzenlediniz. – Avi

+0

Bir yorum olması gerektiği için bunu düzenledim. –

0

Genel değişkenin değiştirilmesi yoldur. Senaryonun başına bildirmelisin.

global

global keep_working = 1; komut dosyasının başlangıcında kapalı olarak ayarlamak için

b ::; sonu ayarlama keep_working = 0 dönüş

g ::; Çalışmayı ayarlayın ve döngüyü başlatın keep_working = 1
Döngü; b basıldığında döngü kadar kalan sol { MouseClick, sol, 142, 542 Uyku 1000 MouseClick, 138, 567 Uyku 1500 MouseClick, 97, 538 Uyku (orijinal kodu döngü, 20 idi) , 1000 if (keep_working = 0) { dönüş; yürütmeyi durdurmak için gerekli } } dönüş; Bu sınırlayıcı, hotkey prosedürünün sonunda gereklidir.

2

Genel bir değişken kullanın (keepCycling) ve döngüyü kesmek için değiştirin. Genel değişkenler bir komut dosyasının başlangıcında bildirilmelidir.