화면 위 키보드 (XP/2k/NT 요구) -- by Jon
이 스크립트는 가짜 키보드를 화면 아래에 생성하고 누르는 키들을 실시간으로 보여줍니다. (키보드를 보지 않고) 손감각을 익히기 위해 만들었습니다. 화면 위 키보드의 크기는 스크립트 상단에서 재단할 수 있습니다. 또한, 트레이 아이콘을 더블 클릭하면 키보드를 보여주거나 감출 수 있습니다.
이 스크립트 내려 받기 | 다른 샘플 스크립트 | 홈으로
;---- 환경 구성 부분: 화면 위 키보드 크기와 ; 기타 옵션을 여기에서 재단합니다. ; 다음 글꼴 크기를 바꾸면 전에 화면 위 키보드가 ; 더 커지거나 더 작아입니다: k_FontSize = 10 k_FontName = Verdana ; 이 줄을 비우면 시스템의 기본 글꼴을 사용합니다. k_FontStyle = Bold ; 다른 예제: Italic Underline ; 트레이 메뉴 항목 이름: k_MenuItemHide = Hide on-screen &keyboard k_MenuItemShow = Show on-screen &keyboard ; 기본 모디터 말고 다른 모니터에 키보드를 보여주려면, ; 다음 변수에 2와 같이 숫자를 지정하십시오. 비워두면, ; 기본 모니터를 사용합니다: k_Monitor = ;---- 환경 구성 부분 끝. 이 시점 부터는 변경하지 마십시오. ; 단, 스크립트이 기본 성격을 바꾸고 싶은 경우는 예외입니다. ;---- 트레이 아이콘 메뉴를 변경합니다: Menu, Tray, Add, %k_MenuItemHide%, k_ShowHide Menu, Tray, Add, &Exit, k_MenuExit Menu, Tray, Default, %k_MenuItemHide% Menu, Tray, NoStandard ;---- 선택된 글꼴 크기에 기반하여 객체 크기를 계산합니다.: k_KeyWidth = %k_FontSize% k_KeyWidth *= 3 k_KeyHeight = %k_FontSize% k_KeyHeight *= 3 k_KeyMargin = %k_FontSize% k_KeyMargin /= 6 k_SpacebarWidth = %k_FontSize% k_SpacebarWidth *= 25 k_KeyWidthHalf = %k_KeyWidth% k_KeyWidthHalf /= 2 k_KeySize = w%k_KeyWidth% h%k_KeyHeight% k_Position = x+%k_KeyMargin% %k_KeySize% ;---- 화면 위 키보드를 위하여 GUI 창을 생성합니다: Gui, Font, s%k_FontSize% %k_FontStyle%, %k_FontName% Gui, -Caption +E0x200 +ToolWindow TransColor = F1ECED Gui, Color, %TransColor% ; 이 색은 나중에 아래에서 투명색이 됩니다. ;---- 각 키에 버튼을 추가합니다. 첫 버튼을 절대 좌표에 배치합니다. ; 그러면 다른 모든 버튼이 그에 상대적으로 배치됩니다: Gui, Add, Button, section %k_KeySize% xm+%k_KeyWidth%, 1 Gui, Add, Button, %k_Position%, 2 Gui, Add, Button, %k_Position%, 3 Gui, Add, Button, %k_Position%, 4 Gui, Add, Button, %k_Position%, 5 Gui, Add, Button, %k_Position%, 6 Gui, Add, Button, %k_Position%, 7 Gui, Add, Button, %k_Position%, 8 Gui, Add, Button, %k_Position%, 9 Gui, Add, Button, %k_Position%, 0 Gui, Add, Button, %k_Position%, - Gui, Add, Button, %k_Position%, = Gui, Add, Button, %k_Position%, Bk Gui, Add, Button, xm y+%k_KeyMargin% h%k_KeyHeight%, Tab ; 자동-너비. Gui, Add, Button, %k_Position%, Q Gui, Add, Button, %k_Position%, W Gui, Add, Button, %k_Position%, E Gui, Add, Button, %k_Position%, R Gui, Add, Button, %k_Position%, T Gui, Add, Button, %k_Position%, Y Gui, Add, Button, %k_Position%, U Gui, Add, Button, %k_Position%, I Gui, Add, Button, %k_Position%, O Gui, Add, Button, %k_Position%, P Gui, Add, Button, %k_Position%, [ Gui, Add, Button, %k_Position%, ] Gui, Add, Button, %k_Position%, \ Gui, Add, Button, xs+%k_KeyWidthHalf% y+%k_KeyMargin% %k_KeySize%, A Gui, Add, Button, %k_Position%, S Gui, Add, Button, %k_Position%, D Gui, Add, Button, %k_Position%, F Gui, Add, Button, %k_Position%, G Gui, Add, Button, %k_Position%, H Gui, Add, Button, %k_Position%, J Gui, Add, Button, %k_Position%, K Gui, Add, Button, %k_Position%, L Gui, Add, Button, %k_Position%, `; Gui, Add, Button, %k_Position%, ' Gui, Add, Button, x+%k_KeyMargin% h%k_KeyHeight%, Enter ; 자동-너비. ; 아래의 첫 번째 버튼은 끝에 %A_Space%를 추가해 약간 더 넓힙니다. ; 그래서 그 다음 키와의 레이아웃이 더 정확하게 키보드를 반영합니다.: Gui, Add, Button, xm y+%k_KeyMargin% h%k_KeyHeight%, Shift%A_Space%%A_Space% Gui, Add, Button, %k_Position%, Z Gui, Add, Button, %k_Position%, X Gui, Add, Button, %k_Position%, C Gui, Add, Button, %k_Position%, V Gui, Add, Button, %k_Position%, B Gui, Add, Button, %k_Position%, N Gui, Add, Button, %k_Position%, M Gui, Add, Button, %k_Position%, `, Gui, Add, Button, %k_Position%, . Gui, Add, Button, %k_Position%, / Gui, Add, Button, xm y+%k_KeyMargin% h%k_KeyHeight%, Ctrl ; Auto-width. Gui, Add, Button, h%k_KeyHeight% x+%k_KeyMargin%, Win ; Auto-width. Gui, Add, Button, h%k_KeyHeight% x+%k_KeyMargin%, Alt ; Auto-width. Gui, Add, Button, h%k_KeyHeight% x+%k_KeyMargin% w%k_SpacebarWidth%, Space ;---- 창을 보여줍니다: Gui, Show k_IsVisible = y WinGet, k_ID, ID, A ; Get its window ID. WinGetPos,,, k_WindowWidth, k_WindowHeight, A ;---- (태스크바의 위치를 고려하여) ; 키보드를 화면 아래에 배치합니다: SysGet, k_WorkArea, MonitorWorkArea, %k_Monitor% ; 창의 X-위치를 계산합니다: k_WindowX = %k_WorkAreaRight% k_WindowX -= %k_WorkAreaLeft% ; 이제 k_WindowX에 이 모니터의 너비가 담깁니다. k_WindowX -= %k_WindowWidth% k_WindowX /= 2 ; 수평으로 가운데 위치를 계산합니다. ; 다음은 창이 기본 모니터에 있지 않거나 ; 태스크바가 화면 왼쪽 변에 정박되어 있는 경우를 처리합니다: k_WindowX += %k_WorkAreaLeft% ; 창의 Y-위치를 계산합니다: k_WindowY = %k_WorkAreaBottom% k_WindowY -= %k_WindowHeight% WinMove, A,, %k_WindowX%, %k_WindowY% WinSet, AlwaysOnTop, On, ahk_id %k_ID% WinSet, TransColor, %TransColor% 220, ahk_id %k_ID% ;---- 모든 키를 핫키로 설정합니다. 참조 www.asciitable.com k_n = 1 k_ASCII = 45 Loop { Transform, k_char, Chr, %k_ASCII% StringUpper, k_char, k_char if k_char not in <,>,^,~,,`, Hotkey, ~*%k_char%, k_KeyPress ; 위에서, 별표 접두 심볼 덕분에 사용자가 Control과 Shift 같은 수식 키를 누르고 있든 없든 ; 키를 탐지할 수 있습니다. if k_ASCII = 93 break k_ASCII++ } return ; 자동 실행 섹션의 끝. ;---- 사용자가 키를 누르면, 화면 위에서 상응하는 버튼을 클릭합니다: ~*Backspace:: ControlClick, Bk, ahk_id %k_ID%, , LEFT, 1, D KeyWait, Backspace ControlClick, Bk, ahk_id %k_ID%, , LEFT, 1, U return ; "Shift" 대신에 LShift와 RShift를 사용합니다. 왜냐하면 핫키로 사용될 때, ; "Shift"는 기본적으로 키를 뗄 때 촉발되기 때문입니다 (예전 AHK 버전에서): ~*LShift:: ~*RShift:: ~*LCtrl:: ; Control 대신에 Ctrl을 사용해야 버튼 이름에 부합할 수 있습니다. ~*RCtrl:: ~*LAlt:: ~*RAlt:: ~*LWin:: ~*RWin:: StringTrimLeft, k_ThisHotkey, A_ThisHotkey, 3 ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, D KeyWait, %k_ThisHotkey% ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, U return ~*,:: ~*':: ~*Space:: ~*Enter:: ~*Tab:: k_KeyPress: StringReplace, k_ThisHotkey, A_ThisHotkey, ~ StringReplace, k_ThisHotkey, k_ThisHotkey, * SetTitleMatchMode, 3 ; T 키와 B 키를 Tab과 Backspace로 혼동하지 않도록 방지합니다. ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, D KeyWait, %k_ThisHotkey% ControlClick, %k_ThisHotkey%, ahk_id %k_ID%, , LEFT, 1, U Return k_ShowHide: if k_IsVisible = y { Gui, Cancel Menu, Tray, Rename, %k_MenuItemHide%, %k_MenuItemShow% k_IsVisible = n } else { Gui, Show Menu, Tray, Rename, %k_MenuItemShow%, %k_MenuItemHide% k_IsVisible = y } return GuiClose: k_MenuExit: ExitApp