자바스크립트를 활성화 해주세요

v033 Autohotkey를 다시 사용하게 되었습니다

 ·  ☕ 2 min read

계기

최근에 autohotkey를 다시 사용하게 되었습니다.

회사에는 데스크탑 컴퓨터가 없고, 가상머신을 사용해서 업무를 하고 있습니다.

한동안 출근하고 있지 않아 10키 붙어있는 넓은 표준 키보드를 사용하고 있었는데, 다시 출근하게 되면서 키보드를 가지고 다니기 귀찮아서 노트북만 들고 다녔더니 굉장히 업무 효율이 낮아졌습니다.

특히나 VDI의 윈도우즈에 연결해서 작업을 하는데, 들고다니는 노트북의 키보드 레이아웃은 한영일 토글하기 매우 불편했습니다. VM의 키보드 레이아웃을 타입3로 변경해서 Shift+Space로 바꾸어 사용하려고 시도했으나, 리모트 데스크탑으로 연결하는 경우 실제로 작동되지 않았습니다.

한/영/일 언어

다음 이미지는 설치된 언어 리스트입니다. 파워쉘의 Get-WinUserLanguageList를 사용합니다.

v033_get-winuserlanguagelist.png

이 외에도 여러가지 불편한 점들이 많이 있는데, 우선 이것부터 해결할 방법이 없을까 하다가, 결국 autohotkey를 다시 도입하기 되었습니다.

AutoHotKey Script

autohotkey는 한동안 사용하다가 쓸 필요가 없어져서 사용하지 않았었는데, 무난히 windows server 2019 VM 에서도 무난히 작동했습니다.

이하는 autohotkey의 토글 핫키의 소스코드입니다. 내용은 간단히, 한/영/일 을 shift+space로 토글하는 내용입니다.

언어는 3개의 언어, 영어, 일본어 한국어가 설치된 경우에 동작합니다.

; refer 
;get-winuserlanguagelist
;Add-Type -AssemblyName System.Windows.Forms
;[System.Windows.Forms.InputLanguage]::CurrentInputLanguage

ToggleLayout()
{
  global currentMode

  SetFormat, Integer, H
  WinGet, WinID,, A
  WinGetActiveTitle, WinTitle
  ThreadID:=DllCall("GetWindowThreadProcessId", "UInt", WinID, "UInt", 0)
  InputLocaleID:=DllCall("GetKeyboardLayout", "UInt", ThreadID, "UInt")
  ;~ MsgBox, %InputLocaleID%
  if (InputLocaleID = 0x4090409)
	PostMessage, 0x50, 0, 0x4110411,, % WinTitle ;kr
  else if (InputLocaleID = 0x4110411)
	PostMessage, 0x50, 0, 0x4120412,, % WinTitle ;jp
  else if (InputLocaleID = 0x4120412)
	PostMessage, 0x50, 0, 0x4090409,, % WinTitle ;English1
}

+Space::
KeyWait, Space
ToggleLayout()
;MsgBox %currentMode%
;SplashTextOff
return

주의사항

실행할 때 주의사항이 있습니다.

  • autohotkey를 실행하기 전에 띄워놓은 윈도우에 대해서는 autohotkey의 키 설정이 적용되지 않을 수 있습니다. 컴퓨터를 켠 다음에 autohotkey를 실행하도록 해 주는 것이 좋습니다.
  • autohotkey는 일반 유저권한으로 실행했는데, vscode는 관리자 권한으로 실행하는 경우와 같이 권한이 일치하지 않는 경우는 autohotkey가 동작하지 않을 수 있습니다.

추가 이슈

가능할 것 같습니다만, 아직 필요에 의한 구현은 이루어지지 않고 있는 이슈들입니다.

  • shift+space 에서, shift key를 왼쪽 shift key로 특정할 수 있을까?
  • kr 레이아웃에서 오른쪽 shift + space 를 한/영 전환으로 변경할 수 있을까?
  • jp 레이아웃에서 오른쪽 shift + space 를 히라가나/로마자 전환으로 변경할 수 있을까?
  • msys2나 bash를 실행하는 도중에는 suspend시킬 수 있을까?

Ref

공유하기

tkim
글쓴이
tkim
Software Engineer