मैं चाहता हूं कि अगर वह किसी भी अन्य कुंजी और नियंत्रण के साथ दबाया जाता है, तो बचने के लिए कैप्स लॉक कुंजी को मैप करने में सक्षम होना चाहिए। मैं विंडोज 7 पर ऐसा कैसे कर सकता हूं?
मैं चाहता हूं कि अगर वह किसी भी अन्य कुंजी और नियंत्रण के साथ दबाया जाता है, तो बचने के लिए कैप्स लॉक कुंजी को मैप करने में सक्षम होना चाहिए। मैं विंडोज 7 पर ऐसा कैसे कर सकता हूं?
जवाबों:
आप इसे SharpKeys के साथ भागने के लिए फिर से बना सकते हैं
हालाँकि, मैं एक कीबोर्ड ड्राइवर लिखने के अलावा सशर्त रीमैपिंग करने का एक यथार्थवादी तरीका नहीं जानता।
यह बिल्कुल वैसा नहीं है जैसा आप चाहते हैं, लेकिन अगर आप कुछ खामियों के साथ रह सकते हैं तो बहुत करीब हैं। यहाँ एक AutoHotKey स्क्रिप्ट है:
$CapsLock::LControl
$CapsLock Up::Send {Escape}
return
यह कैप्स लॉक को Ctrl पर रीमैप करता है और कुंजी जारी करने पर एस्केप को भेजता है। मुझे हर बार दबाए जाने से बचने में थोड़ी देर लगी, जब मुझे कैप्स लॉक की चाबी जाने दी गई। हालाँकि यह वेबसाइट टेक्सारैस पर बहुत बेकार है क्योंकि प्रेस से बच टेक्स्टएरिया पर फोकस खो देता है।
मैं हालांकि इस के लिए एक समाधान के लिए देख रहा हूँ। मैं जहाँ तक आवश्यकता हो तो C में किसी प्रकार का ड्राइवर / कीबोर्ड हुक लिख सकता हूं।
विम-विशिष्ट झुंझलाहट: यह Ctrl-K संयोजन का उपयोग करके टाइप करने के लिए digraphs को असंभव बनाता है और आमतौर पर सादे गुस्सा होने से पहले आपको इसकी आदत होती है। यह मेरे लिए अच्छी तरह से काम करता है, क्योंकि मैं Esc और Ctrl कुंजियों से यथासंभव बचने के लिए कुछ भी करूंगा।
$CapsLock::Escape
और फिर तुरंत return
।
रिच के समाधान के बाद यह पहले उल्लेखित विम विकिया पृष्ठ पर दिखाई दे सकता है ।
; Author: fwompner gmail com
#InstallKeybdHook
SetCapsLockState, alwaysoff
Capslock::
Send {LControl Down}
KeyWait, CapsLock
Send {LControl Up}
if ( A_PriorKey = "CapsLock" )
{
Send {Esc}
}
return
यह मेरा काम नहीं है, लेकिन मैंने इसका उपयोग करना शुरू कर दिया है और यह बिल्कुल वर्णित के रूप में काम करता है, कोई वास्तविक चेतावनी नहीं है, और क्योंकि यह किसी भी अपवाद को मैप करने का प्रयास नहीं करता है (क्योंकि वे अनावश्यक हैं) यह क्रोम में काफी अच्छी तरह से व्यवहार करता है (मैं वास्तव में यह Vimium के लिए चाहता था)।
Caps Lock
से पहले दबाते हैं Shift
। Caps+Shift+X
काम करता है, लेकिन Shift+Caps+X
नहीं करता है।
मैं निम्नलिखित AutoHotkey का उपयोग करता हूं स्क्रिप्ट का , जो कि मुझे विम टिप्स विकी पर मिली एक से अनुकूलित है । कार्यान्वयन थोड़ा सा है, लेकिन यह "मेरे लिए काम करता है।" (और 2016-09-19 के अनुसार इस पृष्ठ पर अन्य उत्तरों के विपरीत, यह पूरी तरह से बिना किसी चेतावनी के समस्या को हल करता है जिससे मैं अवगत हूं)
मूल कोडर का उल्लेख:
स्क्रिप्ट "झूठी सकारात्मक" का पता लगाने और उससे बचने की कोशिश भी करती है जहां आप नियंत्रण और एक अन्य कुंजी दबाते हैं और दोनों को बहुत जल्दी छोड़ देते हैं, यानी टाइमआउट अवधि से पहले।
यह सुनिश्चित करने के लिए कि आपका कीबोर्ड कितना अच्छा या बुरा है, और आपके स्वयं के प्रतिक्रिया समय के आधार पर 250ms का मूल्य तय करें। यह संभवतः अपनी पसंद के अनुसार प्रयोगात्मक रूप से ट्विक करने के लिए कुछ है।
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
यहां एक रजिस्ट्री प्रविष्टि है जो विंडोज़ 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) के साथ फ़ाइल को ऊपर सहेजें और इसे अपने मशीन पर आयात / निष्पादित करें।
hex:00,00,00,00,00,00,00,00,02,00,00,00,01,00,3a,00,00,00,00,00
। इस नक्शे के लिए उपयोगी संपादक PlexData से ScancodeMapping है ।
वास्तव में मुझे लगता है कि मैंने यहाँ सही समाधान बनाया है:
एक विम उपयोगकर्ता के रूप में, यह मेरे लिए बहुत जरूरी है, और मैं इसे लंबे समय से विंडोज पर सफलता के साथ उपयोग कर रहा हूं। मैं सिर्फ एक प्रविष्टि बनाता हूंHKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
निष्पादन योग्य को इंगित करने के लिए regedit के साथ और यह बस काम करता है।
निर्भरता को संकलित करने और स्थापित करने के लिए कृपया रिपॉजिटरी README और इंटरसेप्शन के लिए मुख्य वेबसाइट देखें।
मैंने यहाँ भी एक लिनक्स संस्करण बनाया है:
मैं इसके समान कुछ ढूंढ रहा था, लेकिन दुर्भाग्य से यहां के जवाबों से AHK स्क्रिप्ट मेरे लिए अच्छी तरह से काम नहीं कर पाई।
हालाँकि, मुझे एक समाधान मिला जिसने इसे मेरे लिए विकी विकी पर हल कर दिया ।
C:\Users\%username%\util\
)C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
और ALT- होल्ड करते हुए , डुअल-की-रीमैप। Exe फ़ाइल को खींचें शॉर्टकट बनाने के लिए । (या राइट क्लिक करें और 'शॉर्टकट बनाएँ' का चयन करें, और शॉर्टकट को अपनी स्टार्टअप निर्देशिका में स्थानांतरित करें)।इस आलेख में वर्णित Windows Server 2003 संसाधन किट उपकरण में शामिल remapkey.exe प्रोग्राम Windows 7 में अच्छी तरह से काम करता है।
मेरे पास मेरे लिए काम करने वाले उत्तर पर टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है। मैं अभी भी इसे उखाड़ फेंका।
मिर्च-चिको के जवाब ने मेरे लिए काम किया।
कैप्स लॉक कुंजी अपने आप पर दबाए जाने पर एस्केप कुंजी के रूप में व्यवहार करती है। और अगर दूसरों के साथ संयुक्त Ctrl कुंजी की तरह व्यवहार करता है। मेरे पास इसके लिए समान उपयोग का मामला भी है। विम।
उनके द्वारा दिए गए लिंक में दिए गए निर्देश का पालन करना काफी सरल है।
यदि आप शॉर्ट सोर्स कोड को स्वयं कंपाइल करने से गुरेज नहीं करते हैं, तो आप नीचे दिए गए कोड का उपयोग कर सकते हैं। आपको इसे विंडोज कंसोल एप्लिकेशन के रूप में संकलित करने की आवश्यकता है। उदाहरण के लिए, दृश्य 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;
}