메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Autoit 키보드 후킹: 두 판 사이의 차이

데브카페
편집 요약 없음
편집 요약 없음
 
1번째 줄: 1번째 줄:
== 키보드 후킹 예제 ==
== 키보드 후킹 예제 ==
AutoIt에서 SetWindowsHookEx를 이용해 키보드 입력을 가로채고, 특정 키를 F13~F20으로 매핑하는 예제
* AutoIt에서 SetWindowsHookEx를 이용해 키보드 입력을 가로채고, 특정 키를 F13~F20으로 매핑하는 예제
* 예: CapsLock 키를 누르면 F13(가상 키 코드 0x7C)을 대신 보내도록 시스템 레벨에서 처리합니다.
* 이 코드는 모든 창에서 작동하며, 일반적인 HotKeySet()보다 안정적입니다.


=== 준비 사항 ===
 
# 반드시 AutoIt을 관리자 권한으로 실행하세요.
✅ 목표
# WinAPIEx.au3 또는 유사한 API 확장 라이브러리가 필요합니다.
 
예: CapsLock 키를 누르면 F13(가상 키 코드 0x7C)을 대신 보내도록 시스템 레벨에서 처리합니다. 이 코드는 모든 창에서 작동하며, 일반적인 HotKeySet()보다 안정적입니다.
 
 
준비 사항
반드시 AutoIt을 관리자 권한으로 실행하세요.
WinAPIEx.au3 또는 유사한 API 확장 라이브러리가 필요합니다.




코드 예제 (SetWindowsHookEx 기반 키보드 후킹)
=== 소스 코드 예제 (SetWindowsHookEx 기반 키보드 후킹) ===
<source lang=autoit>
<source lang=autoit>
#include <WinAPI.au3>
#include <WinAPI.au3>
76번째 줄: 70번째 줄:




=== 프로그램 확장 예시 ===
 
* 다른 키도 다음처럼 바꿀 수 있습니다:
확장 예시
다른 키도 다음처럼 바꿀 수 있습니다:
<source lang=autoit>
<source lang=autoit>


95번째 줄: 87번째 줄:




=== 참고자료 ===
 
참고자료


키 이름 가상 키 코드 (Hex) 설명
키 이름 가상 키 코드 (Hex) 설명
107번째 줄: 97번째 줄:




=== ⚠️ 주의사항 ===
# 후킹은 시스템 자원을 사용하는 민감한 작업입니다.
# 잘못 구현 시 전체 시스템이 느려질 수 있습니다.
# 키를 너무 많이 리매핑하면 충돌이 생길 수 있으므로 필요한 키만 설정하세요.
#


⚠️ 주의사항
• 후킹은 시스템 자원을 사용하는 민감한 작업입니다.
• 잘못 구현 시 전체 시스템이 느려질 수 있습니다.
• 키를 너무 많이 리매핑하면 충돌이 생길 수 있으므로 필요한 키만 설정하세요.




이제 이 코드를 통해 CapsLock → F13, Insert → F14 등 시스템 전역에서 완벽한 매핑이 가능합니다.


==트레이에 등록 하여 사용 하는 방법 ==
== 트레이에 등록 하여 사용 하는 방법 ==
 
# 키보드 후킹 프로그램을 트레이 아이콘으로 실행하고, 우클릭 시 종료 메뉴가 뜨도록 만들기
좋습니다! 아래는 위의 키보드 후킹 프로그램을 트레이 아이콘으로 실행하고, 우클릭 시 종료 메뉴가 뜨도록 만든 완전한 AutoIt 스크립트입니다.
 


✅ 기능 요약
• CapsLock 키를 F13으로 변환
• 트레이 아이콘 표시
• 트레이 아이콘 우클릭 → 종료 메뉴 제공


=== 기능 요약 ===
# CapsLock 키를 F13으로 변환
# 트레이 아이콘 표시
# 트레이 아이콘 우클릭 → 종료 메뉴 제공


전체 코드 (트레이 포함)
=== 전체 코드 (트레이 포함) ===
<source lang=autoit>
<source lang=autoit>


204번째 줄: 188번째 줄:




=== 실행 방법 ===
 
# .au3 파일로 저장 (예: F13_Tray.au3)
실행 방법
# AutoIt 스크립트로 실행하거나, SciTE 또는 Aut2Exe로 .exe로 컴파일
1. .au3 파일로 저장 (예: F13_Tray.au3)
# 실행 후 트레이 아이콘 확인
2. AutoIt 스크립트로 실행하거나, SciTE 또는 Aut2Exe로 .exe로 컴파일
# CapsLock 키를 누르면 F13처럼 동작
3. 실행 후 트레이 아이콘 확인
# 트레이 아이콘 우클릭 → 종료
4. CapsLock 키를 누르면 F13처럼 동작
5. 트레이 아이콘 우클릭 → 종료
 


추가 팁
=== 추가 팁 ===
아이콘 변경: TraySetIcon("icon.ico")
* 아이콘 변경: TraySetIcon("icon.ico")
더 많은 단축키 추가 가능 (Insert → F14, ScrollLock → F15 등)
* 더 많은 단축키 추가 가능 (Insert → F14, ScrollLock → F15 등)
TrayCreateItem()에 여러 항목 추가해 기능 확장 가능
* TrayCreateItem()에 여러 항목 추가해 기능 확장 가능


[[category:autoit]]




[[category:autoit]]
[[category:autoit]]

2025년 7월 22일 (화) 13:10 기준 최신판

키보드 후킹 예제

  • AutoIt에서 SetWindowsHookEx를 이용해 키보드 입력을 가로채고, 특정 키를 F13~F20으로 매핑하는 예제
  • 예: CapsLock 키를 누르면 F13(가상 키 코드 0x7C)을 대신 보내도록 시스템 레벨에서 처리합니다.
  • 이 코드는 모든 창에서 작동하며, 일반적인 HotKeySet()보다 안정적입니다.

준비 사항

  1. 반드시 AutoIt을 관리자 권한으로 실행하세요.
  2. WinAPIEx.au3 또는 유사한 API 확장 라이브러리가 필요합니다.

소스 코드 예제 (SetWindowsHookEx 기반 키보드 후킹)

#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>

Global $hHook, $hMod

; DLL 콜백 등록
Global $pFunc = DllCallbackRegister("_LowLevelKeyboardProc", "long", "int;wparam;lparam")

; 현재 모듈 핸들
$hMod = _WinAPI_GetModuleHandle(0)

; 후킹 시작 (WH_KEYBOARD_LL = 13)
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pFunc), $hMod, 0)

If @error Or $hHook = 0 Then
    MsgBox(16, "Error", "Hook 설치 실패!")
    Exit
EndIf

; 메시지 루프 유지
While True
    Sleep(100)
WEnd

; 프로그램 종료 시 후킹 해제
DllCallbackFree($pFunc)
_WinAPI_UnhookWindowsHookEx($hHook)

; 후킹 함수 정의
Func _LowLevelKeyboardProc($nCode, $wParam, $lParam)
    If $nCode < 0 Then
        Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf

    Local $tKBDLLHOOKSTRUCT = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    Local $vkCode = DllStructGetData($tKBDLLHOOKSTRUCT, "vkCode")

    ; 눌림 이벤트만 처리
    If $wParam = $WM_KEYDOWN Or $wParam = $WM_SYSKEYDOWN Then
        ; CapsLock(0x14) 키를 F13(0x7C)로 대체
        If $vkCode = 0x14 Then
            _SendVirtualKey(0x7C) ; F13
            Return 1 ; 원래 키는 무시
        EndIf
    EndIf

    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc

Func _SendVirtualKey($vk)
    _WinAPI_Keybd_Event($vk, 0, 0, 0) ; key down
    _WinAPI_Keybd_Event($vk, 0, $KEYEVENTF_KEYUP, 0) ; key up
EndFunc


프로그램 확장 예시

  • 다른 키도 다음처럼 바꿀 수 있습니다:

If $vkCode = 0x2D Then ; Insert
    _SendVirtualKey(0x7D) ; F14
    Return 1
EndIf

If $vkCode = 0x91 Then ; ScrollLock
    _SendVirtualKey(0x7E) ; F15
    Return 1
EndIf


참고자료

키 이름 가상 키 코드 (Hex) 설명 F13 ~ F20 0x7C ~ 0x83 확장 펑션키 CapsLock 0x14 일반 키 Insert 0x2D 일반 키 Scroll Lock 0x91 일반 키


⚠️ 주의사항

  1. 후킹은 시스템 자원을 사용하는 민감한 작업입니다.
  2. 잘못 구현 시 전체 시스템이 느려질 수 있습니다.
  3. 키를 너무 많이 리매핑하면 충돌이 생길 수 있으므로 필요한 키만 설정하세요.



트레이에 등록 하여 사용 하는 방법

  1. 키보드 후킹 프로그램을 트레이 아이콘으로 실행하고, 우클릭 시 종료 메뉴가 뜨도록 만들기


기능 요약

  1. CapsLock 키를 F13으로 변환
  2. 트레이 아이콘 표시
  3. 트레이 아이콘 우클릭 → 종료 메뉴 제공

전체 코드 (트레이 포함)


#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <TrayConstants.au3>
#include <MsgBoxConstants.au3>

Global $hHook, $hMod
Global $pFunc = DllCallbackRegister("_LowLevelKeyboardProc", "long", "int;wparam;lparam")
Global $hMod = _WinAPI_GetModuleHandle(0)

; 트레이 아이콘 설정
#NoTrayIcon
TraySetToolTip("F13 키 후킹 프로그램")
TraySetClick(8) ; 우클릭 감지
TrayCreateItem("종료")
TraySetState($TRAY_ICONSTATE_SHOW)

; 후킹 설치
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pFunc), $hMod, 0)
If @error Or $hHook = 0 Then
    MsgBox($MB_ICONERROR, "오류", "후킹 설치 실패!")
    Exit
EndIf

; 메시지 루프
While True
    Switch TrayGetMsg()
        Case 0 ; 아무 동작 없음
            ; pass
        Case 1 ; "종료" 클릭 시
            ExitLoop
    EndSwitch
    Sleep(50)
WEnd

; 종료 처리
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($pFunc)
TraySetState($TRAY_ICONSTATE_HIDE)
Exit

; 후킹 함수
Func _LowLevelKeyboardProc($nCode, $wParam, $lParam)
    If $nCode < 0 Then
        Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf

    Local $tKBDLLHOOKSTRUCT = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    Local $vkCode = DllStructGetData($tKBDLLHOOKSTRUCT, "vkCode")

    ; 눌림만 처리
    If $wParam = $WM_KEYDOWN Or $wParam = $WM_SYSKEYDOWN Then
        ; CapsLock → F13
        If $vkCode = 0x14 Then
            _SendVirtualKey(0x7C) ; F13
            Return 1 ; 원래 키 무시
        EndIf
    EndIf

    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc

Func _SendVirtualKey($vk)
    _WinAPI_Keybd_Event($vk, 0, 0, 0) ; down
    _WinAPI_Keybd_Event($vk, 0, $KEYEVENTF_KEYUP, 0) ; up
EndFunc


실행 방법

  1. .au3 파일로 저장 (예: F13_Tray.au3)
  2. AutoIt 스크립트로 실행하거나, SciTE 또는 Aut2Exe로 .exe로 컴파일
  3. 실행 후 트레이 아이콘 확인
  4. CapsLock 키를 누르면 F13처럼 동작
  5. 트레이 아이콘 우클릭 → 종료

추가 팁

  • 아이콘 변경: TraySetIcon("icon.ico")
  • 더 많은 단축키 추가 가능 (Insert → F14, ScrollLock → F15 등)
  • TrayCreateItem()에 여러 항목 추가해 기능 확장 가능

Comments