एएचके में "किसी भी" कुंजी दबाकर मैं लूप को कैसे बाधित कर सकता हूं?

मेरे पास वर्तमान में एक स्क्रिप्ट है जो स्क्रिप्ट बाधित होने तक बाएं माउस बटन को बार-बार दबाती है। स्क्रिप्ट को शुरू करने और रोकने के लिए ALT + 2 दबाया जाता है। मैं इसे ALT + 2 से कैसे शुरू कर सकता हूं लेकिन किसी भी कुंजी दबाकर रोक सकता हूं?

#MaxThreadsPerHotkey 3
!2::  ; ALT+2 hotkey 
#MaxThreadsPerHotkey 1
if KeepWinZRunning  
{
    KeepWinZRunning := false  ; 
    return  ; 
}

; Otherwise:
KeepWinZRunning := true
Loop
{
    ToolTip, Press ALT+2 again to stop.
    Sleep 100
    Send, {VK01 down}{VK01 up}
    Sleep 100
    if not KeepWinZRunning  

        break  ; Break out of this loop.

}
KeepWinZRunning := false  ; Reset in preparation for the next press of this hotkey.
ToolTip
return

ExitApp
F12::ExitApp
3
एमसीएल सही है। एक टाइमर आपको एक थ्रेड को एक साथ चलाने या टाइमर थ्रेड से बाहर तोड़ने का विकल्प भी देता है। एमसीएल ने मुझे पहले उसमें मदद की।
जोड़ा लेखक bgmCoder, स्रोत
1) अंतहीन loops के बजाय टाइमर का उपयोग करें, वे (छद्म-) multithreading के लिए बेहतर समर्थन प्रदान करते हैं। 2) इनपुट कमांड वह है जिसे आप ढूंढ रहे हैं। हालांकि विकल्पों पर एक अच्छा नज़र डालें।
जोड़ा लेखक MCL, स्रोत

2 उत्तर

मेरी टिप्पणी के अनुसार, यहां टाइमर और इनपुट का उपयोग करके एक उदाहरण दिया गया है:

endKeys={enter}{tab}{LControl}{RControl}{LAlt}{LWin}{RWin}{AppsKey}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}

!2::
    SetTimer, SendSomething, 200
    Input, pressedKey, I L1, % endKeys
    SetTimer, SendSomething, Off
return

SendSomething:
    Send, {VK01 down}{VK01 up}
return

आपको अपने कीबोर्ड लेआउट के आधार पर endkeys की सूची को पूरा करना पड़ सकता है।

4
जोड़ा

एक इस पोस्ट को देखें लें। यहां एक सीधा उद्धरण है। आपको विवरण के लिए मूल पोस्ट देखना चाहिए (मैं इसके लिए क्रेडिट नहीं ले सकता), लेकिन यहां स्निपेट है:

#InstallKeybdHook  ; this MUST be called at the start of your script

AnyKeyPressed() ; returns a 1 if any keyboard key is pressed, else returns 0
{
    if( A_TimeIdlePhysical < 25 )
        return 1

return 0
}
1
जोड़ा
@MCL - तो, ​​क्या आप कह रहे हैं कि keybdhook माउस को कीबोर्ड कुंजी की तरह व्यवहार करता है?
जोड़ा लेखक bgmCoder, स्रोत
#InstallKeybdHook की वजह से @MCL A_TimeIdlePhysical रीसेट नहीं किया जाएगा
जोड़ा लेखक this, स्रोत
यह ज्यादातर मामलों में काम नहीं करेगा। A_TimeIdlePhysical भी माउस ईवेंट द्वारा रीसेट किया जाएगा। नतीजतन, जब भी माउस स्थानांतरित हो जाता है तो लूप रुक जाएगा; और जब भी एक कुंजी दबाया जाता है।
जोड़ा लेखक MCL, स्रोत
आप बिल्कुल सही हैं। मुझे कभी पता नहीं था कि यदि केवल एक हुक स्थापित है, तो केवल इसके प्रकार का भौतिक इनपुट A_TimeIdlePhysical को प्रभावित करता है।
जोड़ा लेखक MCL, स्रोत