티스토리 뷰

728x90

Capslock을 오래(0.1초 이상) 누르고 있으면 Ctrl로 동작하고

0.1초 이내로 짧게 누르는 경우 0.1초 이내에 Capslock 요청이 한 번 더 온다면 Esc로 동작,

짧게 눌렀고 요청이 한 번 더 오지 않는다면 한영전환(vk15)로 동작하게 된다.

 

Ctrl을 누르는 경우 Modifier key로 동작하게 하기 위함(다른 키가 더 입력되기를 기다리는)이 대부분이기 때문에 오래 누르고 있는 경우 {Control Down}으로 인식하고 로직이 끝난 후에 {Control Up}을 진행한다.

 

$Capslock::
	KeyWait, Capslock, T0.1
	
	if (ErrorLevel)
		;long press
		Send, {Ctrl Down}

	else {
		KeyWait, Capslock, D T0.1

		;single press
		if (ErrorLevel)
			Send, {vk15}
		;double press
		else
			Send, {esc}
	}

	KeyWait, Capslock
	Send, {Ctrl Up}
return

 

(2023-01-09) 추가 : 위의 기능을 좀 더 보강하여 Capslock을 한번 클릭시 영어, 두번 클릭시 한글로 변경되게 수정해보았다.

$Capslock::
	KeyWait, Capslock, T0.1
	
	if (ErrorLevel)
		;long press
		Send, {Ctrl Down}

	else {
		KeyWait, Capslock, D T0.1

		;single press
		;Capslock 한번 클릭시 무조건 영어.
		if (ErrorLevel) {
			ime_status := % IME_CHECK("A")
			;한글이라면 영어로 전환
			if(ime_status = "1") {
        				Send, {VK15}
			} else {}
		}
		;double press
		;Capslock 2번 클릭시 무조건 한글.
		else {
			ime_status := % IME_CHECK("A")
			;영어라면 한글로 전환
			if(ime_status = "0") {
        				Send, {VK15}
			} else {}
		}
	}

	KeyWait, Capslock
	Send, {Ctrl Up}
return

/*
  IME check 
*/
IME_CHECK(WinTitle) {
  WinGet,hWnd,ID,%WinTitle%
  Return Send_ImeControl(ImmGetDefaultIMEWnd(hWnd),0x005,"")
}
Send_ImeControl(DefaultIMEWnd, wParam, lParam) {
  DetectSave := A_DetectHiddenWindows
  DetectHiddenWindows,ON
   SendMessage 0x283, wParam,lParam,,ahk_id %DefaultIMEWnd%
  if (DetectSave <> A_DetectHiddenWindows)
      DetectHiddenWindows,%DetectSave%
  return ErrorLevel
}
ImmGetDefaultIMEWnd(hWnd) {
  return DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
}

 

 

레퍼런스

https://gist.github.com/volks73/1e889e01ad0a736159a5d56268a300a8

 

AutoHotkey script to change Caps Lock to Control on hold and Escape on press and release

AutoHotkey script to change Caps Lock to Control on hold and Escape on press and release - AutoHotkey.ahk

gist.github.com

 

https://www.autohotkey.com/boards/viewtopic.php?t=10067 

 

single press, double press and long press - AutoHotkey Community

Report this post @ Quote 01 Nov 2015, 11:45 It's a matter of brackets. Wrap your 5 lines after } Else inside of a block as well. RIght now, only your KeyWait, z, D T0.2 line is associated with the Else. So what happens is when Send longpress happens, and t

www.autohotkey.com

 

'etc' 카테고리의 다른 글

Intellij 기본적인 세팅 정리  (0) 2022.11.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함