2013-04-24 86 views
6

Sử dụng AutoHotKey, tôi có một tập lệnh vòng lặp khá đơn giản mà tôi muốn có thể ngắt bằng đột quỵ của một phím. Tôi đã thử một vài mã khác nhau từ các trang web nhưng nó dường như không hoạt động.Phím tắt ngắt phím AutoHotKey

Dưới đây là các mã:

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

Trả lời

1

Thêm một biến toàn cục có thể là giải pháp dễ nhất cho trường hợp của bạn kể từ khi vòng lặp của bạn mất một thời gian để hoàn thành.

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

tính năng này không hoạt động. cảm ơn bạn. Một tạm dừng ngay lập tức sẽ là tốt nhất nhưng tôi hài lòng với điều này. – Dave

+0

@Dave Chỉ cần đặt một câu lệnh if trước mỗi MouseClick. –

+0

có ý nghĩa, tôi sẽ thử. cảm ơn bạn lần nữa – 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 

Sử dụng trên có thể hữu ích là hiệu ứng sẽ là tức thời. Thường xuyên hơn không, bạn sẽ có vòng lặp của bạn dừng lại khi bạn giữ Ctrl trong một khoảng thời gian.

+0

Bạn có lỗi trong mã của mình. Bạn phải giữ ctrl cho toàn bộ thời gian ngủ nếu bạn bắt đầu giữ nó khi ngủ được thực thi. Vì vậy, hiệu quả là xa ngay lập tức. Bạn cũng sao chép cùng một lệnh sáu lần, bạn không nên lặp lại chính mình (nếu OP muốn thay đổi phím nóng, chúc may mắn làm điều đó hơn 6 lần). Và bạn không biết nếu toàn bộ vòng lặp là một lệnh duy nhất không nên bị gián đoạn; bằng cách sử dụng phương thức của tôi, bạn vẫn có thể đặt câu lệnh if (nếu bạn muốn, điều đó tùy thuộc vào người dùng) bất cứ khi nào bạn muốn và đạt được kết thúc vòng lặp. –

+0

@armin, tôi biết rằng thực tế ngủ. (Vì vậy, tôi đã sử dụng "thường xuyên hơn không") Ngoài ra câu trả lời của tôi chủ yếu là câu hỏi cụ thể và không cho tình hình chung. (Như kịch bản của dave là nhỏ, tôi có thể đủ khả năng lặp lại 6 lần). và không cần cho rằng ** break_g ** là "toàn cầu". Tôi thấy bạn đã chỉnh sửa điểm đó từ mã của tôi. – Avi

+0

Tôi đã chỉnh sửa nội dung đó vì đó phải là nhận xét. –

0

Biến toàn cầu đang chạy là cách để đi. Bạn cần khai báo nó ở đầu tập lệnh.

global keep_working = 1; đặt ngắt ở đầu tập lệnh

b ::; đặt nghỉ trên keep_working = 0 trả lại

g ::; đặt làm việc để bật và bắt đầu vòng lặp keep_working = 1
Vòng lặp; vòng lặp cho đến khi b được nhấn (là vòng lặp, 20 trong mã gốc) { mouseclick, trái, 142, 542 Ngủ, 1000 mouseclick, trái, 138, 567 Ngủ, 1500 mouseclick, trái, 97, 538 Ngủ , 1000 nếu (keep_working = 0) { trả lại; bắt buộc phải ngừng thực hiện } } trả lại; dấu phân tách này được yêu cầu ở cuối thủ tục phím nóng.

2

Sử dụng biến toàn cầu (keepCycling) và chuyển đổi để phá vỡ vòng lặp. Các biến toàn cục phải được khai báo ở đầu tập lệnh.