ऑटोहोटेक - डबल कोड एक कीस्ट्रोक संयोजन अहक कोड का एक हिस्सा चलाने के लिए


0

वहाँ एक तरीका है एक डबल क्लिक करें एक Keystroke संयोजन आह कोड के एक भाग को चलाने के लिए।

आप किसी भी माउस या टच डिवाइस पर DoubleClick कर सकते हैं

लेकिन मैं अपने सभी कीस्ट्रोके कॉम्बिनेशन के लिए एक डबल क्लिक करना पसंद करता हूं

मैं एक विंडोज सिस्टम पर काम कर रहा हूं, और मैं ऑटोहोटकी लैंग्वेज पसंद करता हूं।

यह वह कोड है जो मेरे पास अब तक है, अच्छे विचार हमेशा स्वागत करते हैं।

#SingleInstance force

esc::exitapp

;[Click one Time] - <Ctrl & c> to <copy the text to Clipboard>
{Ctrl}c:: ;Part1 Code.
sendinput ^c
return

;[Double Click] - <Ctrl & (2x)c>  <copy the text to Clipboard> + <do a Doogle Search>
{Ctrl}cc:: ;Part2 Code.
sendinput ^c
sleep 150
run https://www.google.com/?q=%clipboard%
return

;[a Count of Clicks] <Ctrl & (3x)c>
{Ctrl}ccc:: ;Part3 Code.
;?
return

नोट - Hotkeystring <: *: {Ctrl} cv ::> और Hotkey <{Ctrl} ccc ::> काम नहीं करता है।

जवाबों:


2

आप सभी Keystroke कॉम्बिनेशन के लिए Ahk कोड्स, (Hotkeys cc: :): - और यदि आप इसका उपयोग करना चाहते हैं (HotkeyStrings) *: cv: :) के लिए अपने विंडोज सिस्टम, DoubleClicks या MultiClicks पर कर सकते हैं। स्क्रिप्ट को लिट्टी बिट में बदल सकता है।

इन दो ऑटोहोटेक लिपियों के साथ आप ऐसा कर सकते हैं।

  • 1: एक एकल विंडोज रजिस्ट्री कुंजी के लिए अपने सभी कीस्ट्रोक संयोजन को स्वचालित रूप से कॉपी करता है। (आप इसे पृष्ठभूमि में चला सकते हैं)

विंडोज की कीज से स्क्रीन पर कीस्ट्रोक दबाएं

  • 2: आप तब उस रजिस्ट्री कुंजी से केवल उस स्ट्रिंग मान का उपयोग कर सकते हैं, और कुछ भी करने के लिए कोडिंग लिख सकते हैं। (नोट - यह सरल उदाहरण स्क्रिप्ट स्क्रीन पर आपके सभी कीबोर्ड और माउस मूवमेंट दिखाएगी - और आप इसे डबल क्लिक कर सकते हैं कुंजी Ctrl + (2x) c या MultiClicks 3x)

HKEY_CURRENT_USER,software\GetKeypressValue,KeypressValue

DoubleClicks > if(KeypressValue="Ctrl + c, c") या

MultiClicks > if(KeypressValue="Ctrl + c (3)")

शो कीस्ट्रोक प्रेस स्क्रीन पर

2 - आप अन्य भाषाओं से भी लिपियों को लिख सकते हैं। (आपको केवल उस एकल रजिस्ट्री कुंजी को आरोपित करने की आवश्यकता है।)

  • माइक्रोसॉफ्ट विजुअल स्टूडियो
  • मूल दृश्य
  • टर्बो पास्कल
  • डेल्फी भाषाएँ
  • सी ++

  • पायथन भाषाएँ

2 - DoubleClickForAllKeystrokes.ahk

; [^ = Ctrl] [! = Alt] [+ = Shift] [# = Win]
; Press <esc> key to exit
; Press <f1> key to toggle between [Scan Pause] & [Scan] 
#SingleInstance force
Gui, +AlwaysOnTop -MaximizeBox ; 
Gui, Add, Text, center y10 h50 w300 vVar,  %KeypressValue%
Gui, Color, White
Gui, show
size=20
Gui, Font, s%size%
GuiControl, Font, var
Doloop=1

MainLanguages=us ; United States
TransLationTo=nl ; Dutch

GroupAdd, Browser, ahk_class Chrome_WidgetWin_1 ; Chrome or Iron
GroupAdd, Browser, ahk_class IEFrame            ; Internet Explorer
GroupAdd, Browser, ahk_class MozillaWindowClass ; FireFox
GroupAdd, Browser, ahk_class ApplicationFrameWindow ; Edge

While Doloop=1
{
RegRead, KeypressValue, HKEY_CURRENT_USER,software\GetKeypressValue,KeypressValue ; read KeypressValue


If not GetKeyState("Ctrl","P") and not GetKeyState("Alt","P") and not GetKeyState("LWin","P") and not GetKeyState("RWin","P")
{

;Note - All these Keystrokes will be execute after Release All the keys! 

;OneClick {Ctrl}+1x(c) - Copy Is the Default
;if (KeypressValue="Ctrl + c") ;use this for [1x=Ctrl + c][2x=Ctrl + c, c][3x=Ctrl + c (3)] [and many more]
;{
; Here you can put any Code. (Part 1)
; WriteReg_KeypressValue("OneClick - Is the Default Not Needed")
;}

;DoubleClick {Ctrl}+2x(c) - Copy + Google Search
if (KeypressValue="Ctrl + c, c") ;use this for [1x=Ctrl + c][2x=Ctrl + c, c][3x=Ctrl + c (3)] [and many more]
{
;Here you can put any Code. (Part 2)
;sendinput ^c ;Not needed comes from default. (OneClick)
WriteReg_KeypressValue("2x-Google Search")
If WinActive("ahk_group Browser")
{
sendinput ^c ;copy the selected text to clipboard memory
sleep 150
sendinput ^t ; CTRL+t make a new tab + goto address bar  - use CTRL+L for the active tab + goto address bar
sleep 150
texta = https://www.google.com/search?q=
textb = %clipboard% ;selected text
textc = &lr=lang_%MainLanguages%&hl=%MainLanguages%&num=100 ; google parameters

clipboard=%texta%%textb%%textc%
sleep 150
sendinput ^v ; paste the selected text 
sleep 250
send {enter}
clipboard=%textb%
} else {
sendinput ^c ;copy the selected text to clipboard memory
sleep 150
texta = https://www.google.com/?gfe_rd=cr&gws_rd=cr#q=
textb = %clipboard% ;selected text
textc = &lr=lang_%MainLanguages%&hl=%MainLanguages%&num=100 ; google parameters

clipboard=%texta%%textb%%textc%
run %clipboard%
clipboard=%textb%
}
}

;TripleClicks {Ctrl}+3x(c) - Copy + WikiPedia Search
if (KeypressValue="Ctrl + c (3)") ;use this for [1x=Ctrl c][2x=Ctrl c, c][3x=Ctrl c (3)] [and many more]
{
;Here you can put the Code For (Part 3)
;sendinput ^c ;Not needed comes from default. (OneClick)
WriteReg_KeypressValue("3x-Wiki Search")
If WinActive("ahk_group Browser")
{
sendinput ^c ;copy the selected text to clipboard memory
sleep 150
sendinput ^t ; CTRL+t make a new tab + goto address bar  - use CTRL+L for the active tab + goto address bar
sleep 150
texta = https://en.wikipedia.org/wiki/
textb = %clipboard% ;selected text

clipboard=%texta%%textb%
sleep 150
sendinput ^v ; paste the selected text 
sleep 250
sendinput {enter}
clipboard=%textb%
} else {
sendinput ^c ;copy the selected text to clipboard memory
sleep 150
texta = https://en.wikipedia.org/wiki/
textb = %clipboard% ;selected text

clipboard=%texta%%textb%
run %clipboard%
clipboard=%textb%
}

}

;MultiClicks {Ctrl}+4x(c) - Copy + Translate Text
if (KeypressValue="Ctrl + c (4)") ;use this for [1x=Ctrl c][2x=Ctrl c, c][3x=Ctrl c (4)] [and many more]
{
;Here you can put the Code For (Part 4)
;sendinput ^c ;Not needed comes from default. (OneClick)
WriteReg_KeypressValue("4x-TransLate Text")
If WinActive("ahk_group Browser")
{
sendinput ^c 
sleep 150
sendinput ^t ; CTRL+t this will [open a new tab] + goto adress bar
sleep 150
texta = https://translate.google.com/#auto/%TransLationTo%/
textb = %clipboard% ;selected text
clipboard=%texta%%textb%
sleep 150
sendinput ^v ; paste the selected text
sleep 150
sendinput {enter} 
clipboard=%textb%
} else {
sendinput ^c ;copy the selected text to clipboard memory
sleep 150
texta = https://translate.google.com/#auto/%TransLationTo%/
textb = %clipboard% ;selected text

clipboard=%texta%%textb%
run %clipboard%
clipboard=%textb%
}
}

} ;End GetKeyState


sleep 50
GuiControl,, var, %KeypressValue%

} ;End Loop


GuiControl,, var, "Scan Pause"
Gui, show

;-----------------------
~esc::exitapp

f1::
If Doloop=1
{
DoLoop := 0
}else{
reload
}
return

;-----------------------

WriteReg_KeypressValue(a)
{
RegWrite, REG_SZ, HKEY_CURRENT_USER,software\GetKeypressValue,KeypressValue,%a%  ;clear the KeypressValue
}

1 - KeypressToREG.ahk

; For the Changelog you can look to the Bottom of the code.
; This code works with a getkeyname from a Dllcall (See Bottom Script- by Lexikos)
; KeypressToREG.ahk comes from KeypressOSD.ahk that was Created by Author RaptorX
; you can press the esc key to exit.

#SingleInstance force
#NoEnv
SetBatchLines, -1
ListLines, Off

; Settings
    global TransN                := 200      ; 0~255
    global ShowSingleKey         := True
    global ShowMouseButton       := True
    global ShowSingleModifierKey := True
    global ShowModifierKeyCount  := true
    global ShowStickyModKeyCount := false
    global DisplayTime           := 2000     ; In milliseconds
    global GuiPosition           := "Bottom" ; Top or Bottom
    global FontSize              := 50
    global GuiHeight             := 115

CreateGUI()
CreateHotkey()
pre_prefix := "" 
prefix := ""
pre_key := ""
_key := ""
key := ""
return

OnKeyPressed:
    try {
        key := GetKeyStr()
        ShowHotkey(key)
        SetTimer, HideGUI, % -1 * DisplayTime
    }
return

OnKeyUp:
return

_OnKeyUp:
    tickcount_start := A_TickCount
return


CreateGUI() {
    global

    Gui, +AlwaysOnTop -Caption +Owner +LastFound +E0x20
    Gui, Margin, 0, 0
    Gui, Color, Black
    Gui, Font, cWhite s%FontSize% bold, Arial
    Gui, Add, Text, vHotkeyText Center y20

    WinSet, Transparent, %TransN%
}

CreateHotkey() {
    Loop, 95
    {
        k := Chr(A_Index + 31)
        k := (k = " ") ? "Space" : k

        Hotkey, % "~*" k, OnKeyPressed
        Hotkey, % "~*" k " Up", _OnKeyUp
    }

    Loop, 24 ; F1-F24
    {
        Hotkey, % "~*F" A_Index, OnKeyPressed
        Hotkey, % "~*F" A_Index " Up", _OnKeyUp
    }

    Loop, 10 ; Numpad0 - Numpad9
    {
        Hotkey, % "~*Numpad" A_Index - 1, OnKeyPressed
        Hotkey, % "~*Numpad" A_Index - 1 " Up", _OnKeyUp
    }

    Otherkeys := "WheelDown|WheelUp|WheelLeft|WheelRight|XButton1|XButton2|Browser_Forward|Browser_Back|Browser_Refresh|Browser_Stop|Browser_Search|Browser_Favorites|Browser_Home|Volume_Mute|Volume_Down|Volume_Up|Media_Next|Media_Prev|Media_Stop|Media_Play_Pause|Launch_Mail|Launch_Media|Launch_App1|Launch_App2|Help|Sleep|PrintScreen|CtrlBreak|Break|AppsKey|NumpadDot|NumpadDiv|NumpadMult|NumpadAdd|NumpadSub|NumpadEnter|Tab|Enter|Esc|BackSpace"
               . "|Del|Insert|Home|End|PgUp|PgDn|Up|Down|Left|Right|ScrollLock|CapsLock|NumLock|Pause|sc145|sc146|sc046|sc123"
    Loop, parse, Otherkeys, |
    {
        Hotkey, % "~*" A_LoopField, OnKeyPressed
        Hotkey, % "~*" A_LoopField " Up", _OnKeyUp
    }

    If ShowMouseButton {
        Loop, Parse, % "LButton|MButton|RButton", |
            Hotkey, % "~*" A_LoopField, OnKeyPressed
    }

    for i, mod in ["Ctrl", "Shift", "Alt"] {
        Hotkey, % "~*" mod, OnKeyPressed
        Hotkey, % "~*" mod " Up", OnKeyUp
    }
    for i, mod in ["LWin", "RWin"]
        Hotkey, % "~*" mod, OnKeyPressed
}

ShowHotkey(HotkeyStr) {
    WinGetPos, ActWin_X, ActWin_Y, ActWin_W, ActWin_H, A
    if !ActWin_W
        throw

    text_w := (ActWin_W > A_ScreenWidth) ? A_ScreenWidth : ActWin_W

    ;remove this gui codeline if you want only to Write the Value to Windows registry
    ;GuiControl,     , HotkeyText, %HotkeyStr%
    ;GuiControl,     , HotkeyText, %HotkeyStr%

    RegWrite, REG_SZ, HKEY_CURRENT_USER,software\GetKeypressValue,KeypressValue,%HotkeyStr%
     HotkeyText :=""

    ;remove this gui codeline if you want only to Write the Value to Windows registry
    ;GuiControl, Move, HotkeyText, w%text_w% Center
    ;GuiControl, Move, HotkeyText, w%text_w% Center

    if (GuiPosition = "Top")
        gui_y := ActWin_Y
    else
        gui_y := (ActWin_Y+ActWin_H) - 115 - 50

    ;remove this gui codeline if you want only to Write the Value to Windows registry
    ;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
    ;Gui, Show, NoActivate x%ActWin_X% y%gui_y% h%GuiHeight% w%text_w%
}

GetKeyStr() {
    static modifiers := ["Ctrl", "Shift", "Alt", "LWin", "RWin"]
    static repeatCount := 1

    for i, mod in modifiers {
        if GetKeyState(mod)
            prefix .= mod " + "
    }

    if (!prefix && !ShowSingleKey)
        throw

    key := SubStr(A_ThisHotkey, 3)

    if (key ~= "i)^(Ctrl|Shift|Alt|LWin|RWin)$") {
        if !ShowSingleModifierKey {
            throw
        }
        key := ""
        prefix := RTrim(prefix, "+ ")

        if ShowModifierKeyCount {
            if !InStr(prefix, "+") && IsDoubleClickEx() {
                if (A_ThisHotKey != A_PriorHotKey) || ShowStickyModKeyCount {
                    if (++repeatCount > 1) {
                        prefix .= " ( * " repeatCount " )"
                    }
                } else {
                    repeatCount := 0
                }
            } else {
                repeatCount := 1
            }
        }
    } else {
        if ( StrLen(key) = 1 ) {
            key := GetKeyChar(key, "A")
        } else if ( SubStr(key, 1, 2) = "sc" ) {
            key := SpecialSC(key)
        } else if (key = "LButton") && IsDoubleClick() {
            key := "Double-Click"
        }
        _key := (key = "Double-Click") ? "LButton" : key

        static pre_prefix, pre_key, keyCount := 1
        global tickcount_start
        if (prefix && pre_prefix) && (A_TickCount-tickcount_start < 300) {
            if (prefix != pre_prefix) {
                result := pre_prefix pre_key ", " prefix key
            } else {
                keyCount := (key=pre_key) ? (keyCount+1) : 1
                key := (keyCount>2) ? (key " (" keyCount ")") : (pre_key ", " key)
            }
        } else {
            keyCount := 1
        }

        pre_prefix := prefix
        pre_key := _key

        repeatCount := 1
    }
    return result ? result : prefix . key
}

SpecialSC(sc) {
    static k := {sc046: "ScrollLock", sc145: "NumLock", sc146: "Pause", sc123: "Genius LuxeMate Scroll"}
    return k[sc]
}

; by Lexikos - https://autohotkey.com/board/topic/110808-getkeyname-for-other-languages/#entry682236
GetKeyChar(Key, WinTitle:=0) {
    thread := WinTitle=0 ? 0
        : DllCall("GetWindowThreadProcessId", "ptr", WinExist(WinTitle), "ptr", 0)
    hkl := DllCall("GetKeyboardLayout", "uint", thread, "ptr")
    vk := GetKeyVK(Key), sc := GetKeySC(Key)
    VarSetCapacity(state, 256, 0)
    VarSetCapacity(char, 4, 0)
    n := DllCall("ToUnicodeEx", "uint", vk, "uint", sc
        , "ptr", &state, "ptr", &char, "int", 2, "uint", 0, "ptr", hkl)
    return StrGet(&char, n, "utf-16")
}

IsDoubleClick(MSec = 300) {
    Return (A_ThisHotKey = A_PriorHotKey) && (A_TimeSincePriorHotkey < MSec)
}

IsDoubleClickEx(MSec = 300) {
    preHotkey := RegExReplace(A_PriorHotkey, "i) Up$")
    Return (A_ThisHotKey = preHotkey) && (A_TimeSincePriorHotkey < MSec)
}

HideGUI() {
    Gui, Hide
}

~esc::exitapp 

;---------------------------------------------
; ChangeLog : v2.22 (2017-02-25) - Now pressing the same combination keys continuously more than 2 times,
;                                  for example press Ctrl+V 3 times, will displayed as "Ctrl + v (3)"
;             v2.21 (2017-02-24) - Fixed LWin/RWin not poping up start menu
;             v2.20 (2017-02-24) - Added displaying continuous-pressed combination keys.
;                                  e.g.: With CTRL key held down, pressing K and U continuously will shown as "Ctrl + k, u"
;             v2.10 (2017-01-22) - Added ShowStickyModKeyCount option
;             v2.09 (2017-01-22) - Added ShowModifierKeyCount option
;             v2.08 (2017-01-19) - Fixed a bug
;             v2.07 (2017-01-19) - Added ShowSingleModifierKey option (default is True)
;             v2.06 (2016-11-23) - Added more keys. Thanks to SashaChernykh.
;             v2.05 (2016-10-01) - Fixed not detecting "Ctrl + ScrollLock/NumLock/Pause". Thanks to lexikos.
;             v2.04 (2016-10-01) - Added NumpadDot and AppsKey
;             v2.03 (2016-09-17) - Added displaying "Double-Click" of the left mouse button.
;             v2.02 (2016-09-16) - Added displaying mouse button, and 3 settings (ShowMouseButton, FontSize, GuiHeight)
;             v2.01 (2016-09-11) - Display non english keyboard layout characters when combine with modifer keys.
;             v2.00 (2016-09-01) - Removed the "Fade out" effect because of its buggy.
;                                - Added support for non english keyboard layout.
;                                - Added GuiPosition setting.
;             v1.00 (2013-10-11) - First release.
;--------------------------------------------

0

यह वास्तव में सीधा नहीं है, लेकिन यह प्रयास के साथ किया जा सकता है।

आपके उदाहरण में, इसके पहले दो भागों के लिए, जहाँ आप दोनों मामलों में ^ c भेज रहे हैं, मैंने Word में छिपे हुए पाठ की प्रतिलिपि बनाने के लिए इसके बहुत करीब लागू किया है। उस उपयोग के मामले के लिए, यह कोई फर्क नहीं पड़ता कि ^ प्रत्येक कीस्ट्रोके पर ^ c निष्पादित होता है और फिर "भाग 2" के लिए, यदि दूसरा ^ c आपके भीतर "डबल-क्लिक टाइम" को डिम कर सकता है - जो बुरा नामकरण है चूँकि कोई भी कुछ भी क्लिक नहीं कर रहा है - तो छिपे हुए पाठ की नकल हो जाएगी। मैं इसे "डबल-प्रेस टाइम", बनाम डबल-क्लिक टाइम, और किसी भी मामले में एक अच्छा मूल्य मान 500ms के आसपास कहूंगा।

उदाहरण 1

इसलिए मेरे कोड में, अगर मैं ^ c को एक बार दबाता हूं, तो यह कॉपी हो जाता है। अगर मैं copies ca दूसरी बार प्रेस करता हूं, तो 500ms के भीतर, यह छिपे हुए पाठ (यानी, एक डबल-प्रेस) की प्रतिलिपि बनाता है। अगर मैं दूसरी बार ^ प्रेस करता हूं लेकिन यह आखिरी प्रेस के बाद से> 500ms था, तो यह सिर्फ फिर से कॉपी करता है (कोई नुकसान नहीं बेईमानी)।

ऐसा करने के लिए, आप एक फ़ंक्शन बनाते हैं जिसे ^ c हॉटकी के लिए कहा जाता है (जो एक कुंजी-अवरोधक हॉटकी है, अर्थात, इसमें टिल्ड नहीं है)। फ़ंक्शन के अंदर, अंतिम निष्पादन समय को ट्रैक करने के लिए एक स्थिर चर का उपयोग किया जाता है, और फिर वर्तमान निष्पादन समय की तुलना में। तुलना के परिणामों के आधार पर, यह या तो ^ c भेजता है या जो भी अन्य कोड आप निष्पादित करना चाहते हैं (या दोनों करता है) को कॉल करता है। तो यह आपके कोड के पहले 2 भागों के लिए ऊपर काम करेगा।

कॉपी / पेस्ट के लिए इष्टतम समय

वैसे, आप क्लिपबोर्ड को कॉपी से पहले भी साफ़ कर सकते हैं और फिर ClipWaitक्लिपबोर्ड पर दिखाई देने वाली कॉपी की गई सामग्री के लिए गतिशील प्रतीक्षा समय को कम करने के लिए उपयोग करेंगे। न्यूनतम विलंब और अधिकतम विश्वसनीयता के लिए यह दोनों दुनिया में सबसे अच्छा है।

उदाहरण 2

एक और उल्लेखनीय कार्यान्वयन जो थोड़ा अलग है, एक संशोधक को संशोधित करने के लिए संशोधक + कीस्ट्रोके (एक अवरुद्ध हॉटकी परिभाषा के साथ) का उपयोग करना है जो गिनता है कि संशोधन जारी करने से पहले कितनी बार कीस्ट्रोके दबाया जाता है। उदाहरण 1 में, ^ c जैसे ही आप दबाते हैं ^ c। इस उदाहरण में, ^ c को तब तक नहीं भेजा जाएगा जब तक आप ^ c जारी नहीं कर देते ।

तो उदाहरण 2 के लिए ...

  • यदि आपका कीस्ट्रोक अनुक्रम {Ctrl Down}{c down}{c up}{Ctrl Up}होता, तो केस 1 निष्पादित होता
  • यदि आपका कीस्ट्रोक अनुक्रम {Ctrl Down}{c down}{c up}{c down}{c up}{Ctrl Up}होता, तो केस 2 निष्पादित होता
  • ...
  • यदि आपका कीस्ट्रोक अनुक्रम {Ctrl Down}{c down}{c up}{c down}{c up}{c down}{c up}{c down}{c up}{c down}{c up}{Ctrl Up}होता, तो केस 5 निष्पादित होता

कुछ मामलों में जहां मैं 5 या अधिक विकल्पों के लिए इसका उपयोग करता हूं, मैं आमतौर पर टूलटिप या जीयूआई दिखाता हूं जिसके साथ विकल्प चुना जाता है। प्रारंभिक हॉटकी टूलटिप / GUI को पॉपअप करने के लिए ट्रिगर करता है और विकल्प 1 चुनता है। Ctrl (इस उदाहरण में) होल्डिंग GUI दिखाती रहती है और एक विकल्प का चयन नहीं किया जाता है। यानी, आपको हॉटकी मॉडिफ़ायर (नियंत्रण) को अनुक्रम को पूरा करने के लिए पूरी तरह से बंद करना होगा (उपरोक्त उदाहरण से थोड़ा अलग)। जब तक आपके पास संशोधक नीचे है, आप कुंजी दबाए रख सकते हैं और यह बढ़ जाएगा कि कौन सा विकल्प चुना गया है, तो आप चयन को पूरा करने के लिए संशोधक कुंजी को बंद कर देते हैं। इस तरह के मल्टी-प्रेस मेनू के लिए जो GUI का उपयोग करते हैं, मेरे पास भी यह विकल्प हैं, इसलिए यदि केवल 5 विकल्प या कुछ और हैं, तो यदि आप 6 पर पहुंचते हैं तो यह केवल 1 पर वापस जाता है और आपको तब तक विकल्पों को चक्रित करने की अनुमति देता है। आप जो चाहते हैं उसे प्राप्त करें।

यह उन कुछ चीज़ों के लिए बेहतर है, जहाँ आप कुंजियों को दबाकर कई विकल्प रखना चाहते हैं और इसे तेज़ करने की आवश्यकता नहीं है, क्योंकि यह तब तक प्रतीक्षा करेगा जब तक आप कुंजियों को निष्पादित करने के लिए छोड़ दें (उदाहरण 1) कूदकर जैसे ही आप उन्हें दबाते हैं।

ऐसा करने का एक तरीका इस प्रकार है:

सबसे पहले, आप एक फ़ंक्शन बनाते हैं जो आपके हॉटकी (^ c उदाहरण) द्वारा ट्रिगर किया गया है। यह फ़ंक्शन एक स्थिर और / या वैश्विक चर को बढ़ाकर कितने कितने कीस्ट्रोक्स दबाया जाता है, इस पर नज़र रखता है (आपके कोड सेटअप पर निर्भर करता है)।

myOption := ((myOption="") || (myOption=0) || (myOption=6)) ? 1 : myOption+1         ; set comparison value to max number of options and this code will cycle through them

यदि हम प्रारंभिक (चर शून्य या 0) की जाँच कर रहे हैं तो टर्नेरी संचालक यहाँ जाँच करेगा और 1 पर सेट करेगा, या यदि हम अपने अधिकतम विकल्प + 1 तक पहुँच चुके हैं, अर्थात, 5 के लिए इस मामले में उदाहरण के लिए 5 + 1 = 6। चयन करने योग्य विकल्प, फिर 1. पर भी रीसेट करें (बृहदान्त्र के बाद का मूल्य), बस चयनित विकल्प को 1 से बढ़ाएं।

पहला फ़ंक्शन भी एक दूसरे 'हैंडलर' फ़ंक्शन को अतुल्यकालिक रूप से SetTimer(एक बार कॉल करता है, इसलिए सेटटाइमर का उपयोग कुछ नकारात्मक न्यूनतम मान, मान -100) के साथ किया जाएगा। यह पहले फ़ंक्शन को बाहर निकलने की अनुमति देता है इसलिए मुख्य धागा निष्पादित करना जारी रख सकता है, जबकि दूसरा फ़ंक्शन भी चलता रहता है। यानी, दूसरा फंक्शन चल सकता है, जबकि पहले फंक्शन को ओवर-ओवर कहा जाता है, जो कि हॉटकी परिभाषा को पूरा करता है। यदि आप सब कुछ एक ही फ़ंक्शन में रखते हैं, तो निष्पादन पहली बार पूरा नहीं करता है और आप हॉटकी परिभाषा के माध्यम से लगातार कीस्ट्रोक्स का पता नहीं लगा सकते हैं। (आप अभी भी उन्हें मैन्युअल रूप से पहचान सकते हैं, लेकिन यह पता लगाने के लिए पहले से मौजूद हॉटकी ढांचे का उपयोग करना अधिक सरल है)

दूसरे हैंडलर फ़ंक्शन के दो भाग हैं। पहला भाग सिर्फ एक लूप है जो यह जांचता है कि आपका संशोधक अभी भी नीचे है या नहीं। अर्थात,

While GetKeyState("Control", "P")    ; wait for user to release modifier before continuing
    Sleep 10

एक बार हैंडलर फ़ंक्शन लूप को हटा देता है - यानी, एक बार जब आप संशोधक कुंजी को बंद कर देते हैं - जो कि निष्पादित करने के लिए छोड़ दिया जाता है, जो भी फ़ंक्शन कोड की आवश्यकता होती है, उसके आधार पर जो विकल्प चुना गया है।

यह उस चर का उपयोग करके चुना जाता है, जिसमें हर बार हॉटकी को दबाने पर पहला फ़ंक्शन बढ़ जाता है, अर्थात

If (myOption=1)
    function1()

Else If (myOption=2)
    function2()

...

Else If (myOption=5)
    function5()

इस काम के लिए आपको यह भी सुनिश्चित करना होगा कि myOptionकार्यों (साझा या वैश्विक) के बीच आपका चर दायरा उचित हो।

बच हैंडलर

एक अंतिम चीज जो मैं इस बहु-विकल्प सेटअप के लिए भी करता हूं, वह है एक एस्केप विकल्प को लागू करना, अगर मैं किसी भी विकल्प को निष्पादित नहीं करने का निर्णय लेता हूं। ऐसा करने के लिए मेरे पास आमतौर पर एक भागने वाले हैंडलर के रूप में तीसरा फ़ंक्शन होता है जो पहले फ़ंक्शन में सशर्त हॉटकी के रूप में सक्षम होता है।

उदाहरण के लिए, कोड के साथ ^ एस्केप हॉटकी को सेट करें जो यदि संशोधक + एस्केप दबाया जाता है तो एक भागने को मजबूर करेगा। यह myOption = 0 सेट करके और {modifier up}हैंडलर लूप को बाहर निकलने के लिए मजबूर करने के लिए भेजकर किया जा सकता है , और फिर बिना किसी कार्रवाई के पूरा हो सकता है। यह हैंडलर को एस्केप हैंडलर के लिए सशर्त हॉटकी को अक्षम करने के अलावा किसी अन्य कार्रवाई से बाहर निकलने का कारण बनता है।

थ्रेड, नॉटीमर, झूठी

एक अंतिम नोट यह है कि आपको Thread, NoTimers, Falseपहले कॉलिंग फ़ंक्शन में उपयोग करने की आवश्यकता हो सकती है , जो बाद में लॉन्च किए गए थ्रेड्स को प्रभावित करता है, लेकिन कोड की पहली 15ms / 1000 लाइनों को किसी अन्य हॉटकी कॉल द्वारा तुरंत बाधित करने की अनुमति देने की आवश्यकता होती है। यदि आपके पास यह नहीं है, तो कीस्ट्रोक्स "गिरा" पाने के लिए प्रकट हो सकते हैं, या आपका माइलेज काम करने के लिए अलग हो सकता है।

सामान्यतया, सभी घंटियों और सीटियों के लिए ऑटोहोट्की के पास है, मैंने काम करने के लिए मल्टी-कीपर मैक्रोज़ प्राप्त करने का अधिक सरलीकृत तरीका नहीं खोजा है, लेकिन एक बार जब आप किसी फ्रेमवर्क में इस तरह से लागू हो जाते हैं कि आप अपने विभिन्न ड्रॉप करने के लिए समायोजित कर सकते हैं मामलों में निष्पादन, यह बहुत मज़बूती से चलेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.