विंडोज 7 पर भागने और नियंत्रण के लिए कैपिंग लॉक को मैप करना


23

मैं चाहता हूं कि अगर वह किसी भी अन्य कुंजी और नियंत्रण के साथ दबाया जाता है, तो बचने के लिए कैप्स लॉक कुंजी को मैप करने में सक्षम होना चाहिए। मैं विंडोज 7 पर ऐसा कैसे कर सकता हूं?



4
खैर, सशर्त पुनर्मूल्यांकन वहाँ नहीं है
wizzard0

मैंने इसे रजिस्टर में संशोधन करके बनाया है: commons.lbl.gov/display/~jwelcher@lbl.gov/ ... ऐसा करने के बाद आपको कंप्यूटर को पुनरारंभ करने की आवश्यकता है। Win7।
स्टैबलर

जवाबों:


8

आप इसे SharpKeys के साथ भागने के लिए फिर से बना सकते हैं

हालाँकि, मैं एक कीबोर्ड ड्राइवर लिखने के अलावा सशर्त रीमैपिंग करने का एक यथार्थवादी तरीका नहीं जानता।


1
मैं पहले से ही अपने कैप्स लॉक कुंजी को SharpKeys के साथ भागने के लिए मैप कर चुका हूं।
ज़मीर मंजी

6

यह बिल्कुल वैसा नहीं है जैसा आप चाहते हैं, लेकिन अगर आप कुछ खामियों के साथ रह सकते हैं तो बहुत करीब हैं। यहाँ एक AutoHotKey स्क्रिप्ट है:

$CapsLock::LControl
$CapsLock Up::Send {Escape}
return

यह कैप्स लॉक को Ctrl पर रीमैप करता है और कुंजी जारी करने पर एस्केप को भेजता है। मुझे हर बार दबाए जाने से बचने में थोड़ी देर लगी, जब मुझे कैप्स लॉक की चाबी जाने दी गई। हालाँकि यह वेबसाइट टेक्सारैस पर बहुत बेकार है क्योंकि प्रेस से बच टेक्स्टएरिया पर फोकस खो देता है।

मैं हालांकि इस के लिए एक समाधान के लिए देख रहा हूँ। मैं जहाँ तक आवश्यकता हो तो C में किसी प्रकार का ड्राइवर / कीबोर्ड हुक लिख सकता हूं।

विम-विशिष्ट झुंझलाहट: यह Ctrl-K संयोजन का उपयोग करके टाइप करने के लिए digraphs को असंभव बनाता है और आमतौर पर सादे गुस्सा होने से पहले आपको इसकी आदत होती है। यह मेरे लिए अच्छी तरह से काम करता है, क्योंकि मैं Esc और Ctrl कुंजियों से यथासंभव बचने के लिए कुछ भी करूंगा।


यदि आप बचने के लिए इसे मैप करना चाहते हैं, तो आप इसे सरल कर सकते हैं: $CapsLock::Escapeऔर फिर तुरंत return
काज़ार्क

मैं समझने की कोशिश कर रहा हूं - इसलिए स्क्रिप्ट के साथ दोष यह है कि जब कैप्स लॉक दबाया जाता है और जारी किया जाता है, तो Ctrl और एस्केप दोनों भेजे जाते हैं?
ऋषि

5

रिच के समाधान के बाद यह पहले उल्लेखित विम विकिया पृष्ठ पर दिखाई दे सकता है ।

; Author: fwompner gmail com
#InstallKeybdHook
SetCapsLockState, alwaysoff
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
    Send {Esc}
}
return

यह मेरा काम नहीं है, लेकिन मैंने इसका उपयोग करना शुरू कर दिया है और यह बिल्कुल वर्णित के रूप में काम करता है, कोई वास्तविक चेतावनी नहीं है, और क्योंकि यह किसी भी अपवाद को मैप करने का प्रयास नहीं करता है (क्योंकि वे अनावश्यक हैं) यह क्रोम में काफी अच्छी तरह से व्यवहार करता है (मैं वास्तव में यह Vimium के लिए चाहता था)।


मैं इस स्क्रिप्ट का उपयोग कर रहा हूं और यह मेरे लिए काम करती है। मैं इसका इस्तेमाल कैप्स लॉक को कंट्रोल / एस्केप के लिए रिमाइंड करने के लिए कर रहा हूं।
ब्रैंडन

1
काम करता है! बस स्पष्ट करने के लिए, यह एक AutoHotKey स्क्रिप्ट है। यहां से शुरू करें: autohotkey.com
माइकल फॉक्स

पाठकों के लाभ के लिए, जिन्होंने मेरी जिस्ट पर टिप्पणियों को नहीं देखा और देखा हो सकता है, ऐसा लगता है कि यह समाधान केवल तभी काम करता है जब आप दबाने Caps Lockसे पहले दबाते हैं ShiftCaps+Shift+Xकाम करता है, लेकिन Shift+Caps+Xनहीं करता है।
रिच

4

मैं निम्नलिखित AutoHotkey का उपयोग करता हूं स्क्रिप्ट का , जो कि मुझे विम टिप्स विकी पर मिली एक से अनुकूलित है । कार्यान्वयन थोड़ा सा है, लेकिन यह "मेरे लिए काम करता है।" (और 2016-09-19 के अनुसार इस पृष्ठ पर अन्य उत्तरों के विपरीत, यह पूरी तरह से बिना किसी चेतावनी के समस्या को हल करता है जिससे मैं अवगत हूं)

मूल कोडर का उल्लेख:

स्क्रिप्ट "झूठी सकारात्मक" का पता लगाने और उससे बचने की कोशिश भी करती है जहां आप नियंत्रण और एक अन्य कुंजी दबाते हैं और दोनों को बहुत जल्दी छोड़ देते हैं, यानी टाइमआउट अवधि से पहले।

यह सुनिश्चित करने के लिए कि आपका कीबोर्ड कितना अच्छा या बुरा है, और आपके स्वयं के प्रतिक्रिया समय के आधार पर 250ms का मूल्य तय करें। यह संभवतः अपनी पसंद के अनुसार प्रयोगात्मक रूप से ट्विक करने के लिए कुछ है।

CapsLockCtrlEscape.ahk gist :

g_LastCtrlKeyDownTime := 0
g_AbortSendEsc := false
g_ControlRepeatDetected := false

*CapsLock::
    if (g_ControlRepeatDetected)
    {
        return
    }

    send,{Ctrl down}
    g_LastCtrlKeyDownTime := A_TickCount
    g_AbortSendEsc := false
    g_ControlRepeatDetected := true

    return

*CapsLock Up::
    send,{Ctrl up}
    g_ControlRepeatDetected := false
    if (g_AbortSendEsc)
    {
        return
    }
    current_time := A_TickCount
    time_elapsed := current_time - g_LastCtrlKeyDownTime
    if (time_elapsed <= 250)
    {
        SendInput {Esc}
    }
    return

~*^a::
~*^b::
~*^c::
~*^d::
~*^e::
~*^f::
~*^g::
~*^h::
~*^i::
~*^j::
~*^k::
~*^l::
~*^m::
~*^n::
~*^o::
~*^p::
~*^q::
~*^r::
~*^s::
~*^t::
~*^u::
~*^v::
~*^w::
~*^x::
~*^y::
~*^z::
~*^1::
~*^2::
~*^3::
~*^4::
~*^5::
~*^6::
~*^7::
~*^8::
~*^9::
~*^0::
~*^Space::
~*^Backspace::
~*^Delete::
~*^Insert::
~*^Home::
~*^End::
~*^PgUp::
~*^PgDn::
~*^Tab::
~*^Return::
~*^,::
~*^.::
~*^/::
~*^;::
~*^'::
~*^[::
~*^]::
~*^\::
~*^-::
~*^=::
~*^`::
~*^F1::
~*^F2::
~*^F3::
~*^F4::
~*^F5::
~*^F6::
~*^F7::
~*^F8::
~*^F9::
~*^F10::
~*^F11::
~*^F12::
    g_AbortSendEsc := true
    return

3

यहां एक रजिस्ट्री प्रविष्टि है जो विंडोज़ 7 पर बचने के लिए कैप्स लॉक को मैप करती है।


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,46,00,01,00,3a,00,00,00,00,00

एक .reg एक्सटेंशन (जैसे mapCapLocks.reg) के साथ फ़ाइल को ऊपर सहेजें और इसे अपने मशीन पर आयात / निष्पादित करें।


कृपया संदर्भ लिंक (एस) से उत्तर के आवश्यक हिस्सों को उद्धृत करें, क्योंकि लिंक लिंक किए गए पृष्ठ (परिवर्तन) होने पर उत्तर अमान्य हो सकता है। वर्तमान में 404 इसलिए यह उत्तर बेकार है।
DavidPostill

बहुत बढ़िया अंक। मैं जवाब अपडेट करूंगा
स्ट्राइकर

यह भी CapsLock के लिए ScrollLock कुंजी मैप करेगा। यदि वह नहीं है जो आप चाहते हैं, तो मूल्य का उपयोग करें hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00। इस नक्शे के लिए उपयोगी संपादक PlexData से ScancodeMapping है
अपीलीय

2

वास्तव में मुझे लगता है कि मैंने यहाँ सही समाधान बनाया है:

एक विम उपयोगकर्ता के रूप में, यह मेरे लिए बहुत जरूरी है, और मैं इसे लंबे समय से विंडोज पर सफलता के साथ उपयोग कर रहा हूं। मैं सिर्फ एक प्रविष्टि बनाता हूंHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run निष्पादन योग्य को इंगित करने के लिए regedit के साथ और यह बस काम करता है।

निर्भरता को संकलित करने और स्थापित करने के लिए कृपया रिपॉजिटरी README और इंटरसेप्शन के लिए मुख्य वेबसाइट देखें।

मैंने यहाँ भी एक लिनक्स संस्करण बनाया है:


2

मैं इसके समान कुछ ढूंढ रहा था, लेकिन दुर्भाग्य से यहां के जवाबों से AHK स्क्रिप्ट मेरे लिए अच्छी तरह से काम नहीं कर पाई।

हालाँकि, मुझे एक समाधान मिला जिसने इसे मेरे लिए विकी विकी पर हल कर दिया ।

  • सबसे पहले, डुअल-की-रिमैप नामक निम्न ऐप डाउनलोड करें ।
  • अपने चयन के स्थान पर ज़िप निकालें (मैं इन जैसी उपयोगिताओं को संग्रहीत करता हूं C:\Users\%username%\util\)
  • निम्न निर्देशिका खोलें: C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\और ALT- होल्ड करते हुए , डुअल-की-रीमैप। Exe फ़ाइल को खींचें शॉर्टकट बनाने के लिए । (या राइट क्लिक करें और 'शॉर्टकट बनाएँ' का चयन करें, और शॉर्टकट को अपनी स्टार्टअप निर्देशिका में स्थानांतरित करें)।
  • लॉग इन करें और बाहर। कुंजियों में लॉग इन करने के कुछ सेकंड बाद आप रिबाउंड होंगे।

0

इस आलेख में वर्णित Windows Server 2003 संसाधन किट उपकरण में शामिल remapkey.exe प्रोग्राम Windows 7 में अच्छी तरह से काम करता है।


1
कृपया उत्तर के रूप में लिंक का उपयोग करने से बचें। इसके बजाय, लिंक की अपनी सर्वोत्तम सामग्री को समझाने की कोशिश करें और केवल संदर्भ के रूप में उनका उपयोग करें। यदि लिंक कभी टूट जाता है, तो आपका पूरा जवाब होता है।
लोरेंजो वॉन मैटरहॉर्न

0

मेरे पास मेरे लिए काम करने वाले उत्तर पर टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है। मैं अभी भी इसे उखाड़ फेंका।

मिर्च-चिको के जवाब ने मेरे लिए काम किया।

कैप्स लॉक कुंजी अपने आप पर दबाए जाने पर एस्केप कुंजी के रूप में व्यवहार करती है। और अगर दूसरों के साथ संयुक्त Ctrl कुंजी की तरह व्यवहार करता है। मेरे पास इसके लिए समान उपयोग का मामला भी है। विम।

उनके द्वारा दिए गए लिंक में दिए गए निर्देश का पालन करना काफी सरल है।


0

यदि आप शॉर्ट सोर्स कोड को स्वयं कंपाइल करने से गुरेज नहीं करते हैं, तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं। आपको इसे विंडोज कंसोल एप्लिकेशन के रूप में संकलित करने की आवश्यकता है। उदाहरण के लिए, दृश्य C ++ कमांड प्रॉम्प्ट में आप इसे संकलित कर सकते हैं

cl /D_WIN32_WINNT=0x0401 remap_capslock.cpp /EHsc /link user32.lib

एप्लिकेशन के चलने के दौरान कुंजी रीमैपिंग काम करती है। रिबूट, लॉग आउट / इन आदि के लिए कोई ज़रूरत नहीं है। यदि आपको व्यवस्थापक अधिकारों के साथ चलने वाले एप्लिकेशन के लिए काम करने के लिए रीमैपिंग की आवश्यकता है, तो आपको रीमैपर एप्लिकेशन को व्यवस्थापक के रूप में भी चलाने की आवश्यकता है। पहले से ही (विंडोज़ 10 पर) कुछ दिनों से इसका उपयोग कर रहे हैं, अब तक बहुत अच्छा है।

// The app allows to remap CapsLock key to Esc (if pressed separately) or to Ctrl (if pressed with other keys).
// This may be useful for Vim.
// To compile from Visual C++ command prompt: 
//    cl /D_WIN32_WINNT=0x0401 remap_capslock.cpp /EHsc /link user32.lib
// Original source (which supported only Caps-Ctrl remapping): /superuser//a/1490007/22750

#include <windows.h>
#include <iostream>
#include <set>

HHOOK hook;
std::set<WORD> keys_down;
bool caps_down = false;
bool caps_was_down_with_another_key = false;

LRESULT CALLBACK keyboardHook(int nCode, WPARAM wParam, LPARAM lParam) {
    KBDLLHOOKSTRUCT *p = (KBDLLHOOKSTRUCT *) lParam;
    INPUT input[3] = {{ INPUT_KEYBOARD }, { INPUT_KEYBOARD }, { INPUT_KEYBOARD }};

    if ((p->flags & LLKHF_INJECTED) == 0) {
        std::cout << "nCode=" << nCode << "\twParam=" << wParam << "\tvkCode=" << p->vkCode << "\tscanCode=" << p->scanCode << std::endl;
        bool keyup = wParam == WM_KEYUP || wParam == WM_SYSKEYUP;
        if (p->vkCode == VK_CAPITAL) {
            if (keyup) {
                if (caps_was_down_with_another_key) {
                    std::cout << "Remapping CAPSLOCK UP to CTRL UP" << std::endl;
                    input[0].ki.dwFlags = KEYEVENTF_KEYUP;
                    input[0].ki.wVk = VK_LCONTROL;
                    SendInput(1, input, sizeof (INPUT));
                } else {
                    std::cout << "Remapping CAPSLOCK UP to ESCAPE DOWN&UP" << std::endl;
                    input[0].ki.dwFlags = KEYEVENTF_KEYUP;
                    input[0].ki.wVk = VK_LCONTROL;
                    input[1].ki.dwFlags = 0;
                    input[1].ki.wVk = VK_ESCAPE;
                    input[2].ki.dwFlags = KEYEVENTF_KEYUP;
                    input[2].ki.wVk = VK_ESCAPE;
                    SendInput(3, input, sizeof (INPUT));
                }
                caps_down = false;
                caps_was_down_with_another_key = false;
            } else {
                std::cout << "Remapping CAPSLOCK DOWN to CTRL DOWN" << std::endl;
                caps_down = true;
                input[0].ki.dwFlags = 0;
                input[0].ki.wVk = VK_LCONTROL;
                SendInput(1, input, sizeof (INPUT));
            }
            return 1;
        } else {
            if (keyup) {
                keys_down.erase(p->vkCode);
            } else {
                keys_down.insert(p->vkCode);
            }
            std::cout << keys_down.size() << " keys down" << std::endl;
        }
        if (caps_down && !keys_down.empty()) {
            caps_was_down_with_another_key = true;
        }
    }
    return CallNextHookEx(hook, nCode, wParam, lParam);
}

int main(int argc, char **argv){
    MSG messages;
    hook = SetWindowsHookEx(WH_KEYBOARD_LL, keyboardHook, NULL, 0);
    if (hook == NULL) {
        std::cout << "Error " << GetLastError() << std::endl;
        return 1;
    }
    std::cout << "Mapping ??? CAPSLOCK=>LCTRL and LCTRL=>CAPSLOCK..." << std::endl;
    while (GetMessage (&messages, NULL, 0, 0)) {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return 0;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.