화면 위 키보드 (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
선택 | 내려받기