<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%ED%82%A4%EB%B3%B4%EB%93%9C_%ED%9B%84%ED%82%B9_%EC%9C%88%EB%8F%84%EC%9A%B0_api_%EC%9D%B4%EC%9A%A9</id>
	<title>키보드 후킹 윈도우 api 이용 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=%ED%82%A4%EB%B3%B4%EB%93%9C_%ED%9B%84%ED%82%B9_%EC%9C%88%EB%8F%84%EC%9A%B0_api_%EC%9D%B4%EC%9A%A9"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%82%A4%EB%B3%B4%EB%93%9C_%ED%9B%84%ED%82%B9_%EC%9C%88%EB%8F%84%EC%9A%B0_api_%EC%9D%B4%EC%9A%A9&amp;action=history"/>
	<updated>2026-07-02T12:03:14Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=%ED%82%A4%EB%B3%B4%EB%93%9C_%ED%9B%84%ED%82%B9_%EC%9C%88%EB%8F%84%EC%9A%B0_api_%EC%9D%B4%EC%9A%A9&amp;diff=2271&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: == AutoIt에서 다른 프로그램의 입력 키를 후킹(hooking)하는 방법 == * 이 기능은 AutoIt의 핵심 강점 중 하나이며, 다양한 접근 방식이 있습니다. * 다른 프로그램에서 발생하는 키 입력을 가로채서 처리하는 방법은 크게 두 가지로 나눌 수 있습니다.  * 방법1) HotKeySet 함수를 이용한 전역(Global) 핫키 설정  ** 가장 간단하고 일반적인 방법 ** 특정 키 조합(예: Ctrl + A, F12, ~)이...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=%ED%82%A4%EB%B3%B4%EB%93%9C_%ED%9B%84%ED%82%B9_%EC%9C%88%EB%8F%84%EC%9A%B0_api_%EC%9D%B4%EC%9A%A9&amp;diff=2271&amp;oldid=prev"/>
		<updated>2025-08-01T03:28:21Z</updated>

		<summary type="html">&lt;p&gt;새 문서: == AutoIt에서 다른 프로그램의 입력 키를 후킹(hooking)하는 방법 == * 이 기능은 AutoIt의 핵심 강점 중 하나이며, 다양한 접근 방식이 있습니다. * 다른 프로그램에서 발생하는 키 입력을 가로채서 처리하는 방법은 크게 두 가지로 나눌 수 있습니다.  * 방법1) HotKeySet 함수를 이용한 전역(Global) 핫키 설정  ** 가장 간단하고 일반적인 방법 ** 특정 키 조합(예: Ctrl + A, F12, ~)이...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== AutoIt에서 다른 프로그램의 입력 키를 후킹(hooking)하는 방법 ==&lt;br /&gt;
* 이 기능은 AutoIt의 핵심 강점 중 하나이며, 다양한 접근 방식이 있습니다.&lt;br /&gt;
* 다른 프로그램에서 발생하는 키 입력을 가로채서 처리하는 방법은 크게 두 가지로 나눌 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
* 방법1) HotKeySet 함수를 이용한 전역(Global) 핫키 설정 &lt;br /&gt;
** 가장 간단하고 일반적인 방법&lt;br /&gt;
** 특정 키 조합(예: Ctrl + A, F12, ~)이 눌렸을 때 특정 함수를 실행하도록 설정합니다. &lt;br /&gt;
** 이 방식은 프로그램이 포커스를 잃더라도 작동합니다.&lt;br /&gt;
&lt;br /&gt;
* 방법2) 윈도우 API를 이용한 저수준(Low-Level) 키보드 후킹&lt;br /&gt;
** 이 방법은 HotKeySet보다 훨씬 더 강력하고 유연합니다. ** _WinAPI_SetWindowsHookEx 함수를 사용해 키보드 메시지가 발생할 때마다 알림을 받는 WH_KEYBOARD_LL 훅을 설치합니다. 이 방식을 사용하면 모든 키 입력을 감지할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
=== 방법 1: HotKeySet을 이용한 전역 핫키 설정 ===&lt;br /&gt;
* 이 방법은 특정 키 조합(예: A, B, C와 같은 개별 키)을 감지하는 용도보다는, 매크로 실행과 같은 특정 동작을 트리거하는 데 더 적합합니다.&lt;br /&gt;
* 예제: 사용자가 Ctrl + Alt + P를 누르면 &amp;quot;Hello World&amp;quot;를 출력하는 스크립트&lt;br /&gt;
&amp;lt;source lang=autoit&amp;gt;&lt;br /&gt;
HotKeySet(&amp;quot;^+p&amp;quot;, &amp;quot;MyFunction&amp;quot;) ; Ctrl + Alt + P 를 누르면 MyFunction 실행&lt;br /&gt;
&lt;br /&gt;
While 1&lt;br /&gt;
    Sleep(100)&lt;br /&gt;
WEnd&lt;br /&gt;
&lt;br /&gt;
Func MyFunction()&lt;br /&gt;
    MsgBox(0, &amp;quot;핫키 감지&amp;quot;, &amp;quot;Ctrl + Alt + P 키가 눌렸습니다.&amp;quot;)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* HotKeySet(&amp;quot;^+p&amp;quot;, &amp;quot;MyFunction&amp;quot;):&lt;br /&gt;
   * ^ : Ctrl 키&lt;br /&gt;
   * + : Alt 키&lt;br /&gt;
   * p : P 키&lt;br /&gt;
   * &amp;quot;^+p&amp;quot;는 Ctrl + Alt + P를 의미합니다.&lt;br /&gt;
* 장점: 사용하기 매우 쉽고 간단합니다.&lt;br /&gt;
* 단점: 모든 키 입력을 후킹하기는 어렵고, 특정 조합만 감지할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
=== 방법 2: 윈도우 API를 이용한 저수준 키보드 후킹===&lt;br /&gt;
* 이 방법은 다른 프로그램에서 발생하는 모든 키 입력을 실시간으로 감지하고 처리하는 데 사용됩니다. &lt;br /&gt;
* 하지만 이 방법은 스크립트의 복잡성이 증가하며, 관리자 권한이 필요할 수 있고, 잘못 사용하면 다른 프로그램의 정상적인 키 입력을 방해할 수 있으므로 주의해야 합니다.&lt;br /&gt;
* 예제: 키보드 입력을 후킹하여 어떤 키가 눌렸는지 실시간으로 출력하는 스크립트&lt;br /&gt;
&amp;lt;source lang=autoit&amp;gt;&lt;br /&gt;
#include &amp;lt;MsgBoxConstants.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;WinAPISys.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;WinAPI.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;WindowsConstants.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; 전역 변수 선언&lt;br /&gt;
Global $g_hHook&lt;br /&gt;
&lt;br /&gt;
; 윈도우 API를 이용한 키보드 후킹 설치&lt;br /&gt;
; WH_KEYBOARD_LL (13) : 저수준 키보드 이벤트 후킹&lt;br /&gt;
$g_hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, &amp;quot;_KeyboardProc&amp;quot;, @ScriptFullPath)&lt;br /&gt;
&lt;br /&gt;
; 후킹 설치 실패 시 경고&lt;br /&gt;
If Not $g_hHook Then&lt;br /&gt;
    MsgBox($MB_SYSTEMMODAL, &amp;quot;오류&amp;quot;, &amp;quot;키보드 훅 설치 실패! 스크립트를 관리자 권한으로 실행해보세요.&amp;quot;)&lt;br /&gt;
    Exit&lt;br /&gt;
EndIf&lt;br /&gt;
&lt;br /&gt;
MsgBox($MB_SYSTEMMODAL, &amp;quot;키보드 훅 설치됨&amp;quot;, &amp;quot;이제 모든 키보드 입력이 감지됩니다.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
; 스크립트가 종료될 때 후킹 해제&lt;br /&gt;
_OnExit_Register(&amp;quot;OnExitFunc&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
; 이벤트 루프 (스크립트가 종료되지 않도록 대기)&lt;br /&gt;
While 1&lt;br /&gt;
    Sleep(100)&lt;br /&gt;
WEnd&lt;br /&gt;
&lt;br /&gt;
; -----------------------------------------------------------&lt;br /&gt;
; 키보드 후킹 핸들러 함수&lt;br /&gt;
; -----------------------------------------------------------&lt;br /&gt;
Func _KeyboardProc($nCode, $wParam, $lParam)&lt;br /&gt;
    ; $nCode가 0보다 작을 경우 메시지 처리를 다른 후킹 프로그램에 넘깁니다.&lt;br /&gt;
    If $nCode &amp;lt; 0 Then&lt;br /&gt;
        Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; $wParam 값은 키보드 메시지 (WM_KEYDOWN, WM_KEYUP 등)&lt;br /&gt;
    ; $lParam 값은 키보드 입력 정보가 담긴 구조체 포인터&lt;br /&gt;
&lt;br /&gt;
    ; 눌린 키의 가상 키 코드(VK code)를 추출&lt;br /&gt;
    Local $sVKCode = DllStructGetData(DllStructCreate(&amp;quot;long;long;long;long&amp;quot;, $lParam), 1)&lt;br /&gt;
&lt;br /&gt;
    ; 키가 눌렸을 때 (WM_KEYDOWN 또는 WM_SYSKEYDOWN)&lt;br /&gt;
    If $wParam = $WM_KEYDOWN Or $wParam = $WM_SYSKEYDOWN Then&lt;br /&gt;
        ; VK 코드를 문자열로 변환하여 출력&lt;br /&gt;
        ConsoleWrite(&amp;quot;키 입력 감지: &amp;quot; &amp;amp; Hex($sVKCode) &amp;amp; &amp;quot; (&amp;quot; &amp;amp; Chr($sVKCode) &amp;amp; &amp;quot;)&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
        &lt;br /&gt;
        ; 원하는 동작 수행:&lt;br /&gt;
        ; If $sVKCode = 0x41 Then ; &amp;#039;A&amp;#039; 키가 눌렸을 때&lt;br /&gt;
        ;   MsgBox(0, &amp;quot;알림&amp;quot;, &amp;quot;A 키가 눌렸습니다!&amp;quot;)&lt;br /&gt;
        ; EndIf&lt;br /&gt;
    EndIf&lt;br /&gt;
&lt;br /&gt;
    ; 다른 프로그램들도 키 입력을 받도록 다음 훅 체인으로 메시지를 전달합니다.&lt;br /&gt;
    ; 만약 특정 키 입력을 차단하고 싶다면 이 부분을 제거하고 1을 반환하면 됩니다.&lt;br /&gt;
    Return _WinAPI_CallNextHookEx($g_hHook, $nCode, $wParam, $lParam)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; -----------------------------------------------------------&lt;br /&gt;
; 스크립트 종료 시 후킹 해제 함수&lt;br /&gt;
; -----------------------------------------------------------&lt;br /&gt;
Func OnExitFunc()&lt;br /&gt;
    If $g_hHook Then&lt;br /&gt;
        _WinAPI_UnhookWindowsHookEx($g_hHook)&lt;br /&gt;
        ConsoleWrite(&amp;quot;키보드 훅 해제됨.&amp;quot; &amp;amp; @CRLF)&lt;br /&gt;
    EndIf&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* _WinAPI_SetWindowsHookEx: 키보드 후킹을 설치하는 윈도우 API 함수를 호출합니다.&lt;br /&gt;
* $WH_KEYBOARD_LL: 키보드 이벤트를 저수준으로 감지하도록 지정하는 상수입니다.&lt;br /&gt;
* &amp;quot;_KeyboardProc&amp;quot;: 키보드 이벤트 발생 시 호출될 함수 이름입니다.&lt;br /&gt;
* @ScriptFullPath: 후킹 스레드를 지정합니다. 이 경우 현재 스크립트의 경로를 전달합니다.&lt;br /&gt;
* _KeyboardProc: 키보드 이벤트가 발생할 때마다 호출되는 핸들러 함수입니다.&lt;br /&gt;
* $lParam: 키보드 입력에 대한 상세 정보(가상 키 코드, 스캔 코드 등)가 담긴 포인터입니다. DllStructCreate를 사용하여 이 포인터의 데이터를 읽어옵니다.&lt;br /&gt;
* 주의: $lParam을 이용해 키 정보를 읽는 방식은 키보드 구조체의 정의에 따라 달라질 수 있습니다. 위의 예제는 가장 일반적인 경우입니다.&lt;br /&gt;
* _WinAPI_CallNextHookEx: 매우 중요한 함수입니다. 이 함수를 호출해야 현재 훅 다음의 다른 후킹 프로그램이나 윈도우가 정상적으로 키 입력을 받을 수 있습니다. 이 함수를 호출하지 않으면 다른 프로그램의 키 입력이 먹통이 되는 부작용이 발생할 수 있습니다.&lt;br /&gt;
* _WinAPI_UnhookWindowsHookEx: 스크립트 종료 시 후킹을 해제하여 메모리 누수나 시스템 불안정 문제를 방지합니다.&lt;br /&gt;
요약 및 결론&lt;br /&gt;
* 간단한 매크로나 특정 키 조합만 감지하고 싶다면 HotKeySet을 사용하세요. 스크립트가 훨씬 간단하고 안전합니다.&lt;br /&gt;
* 모든 키 입력, 특히 다른 프로그램의 모든 키 입력을 실시간으로 감지하고 싶다면 _WinAPI_SetWindowsHookEx를 사용하세요. 이 방법은 강력하지만, 윈도우 API와 스레드 개념에 대한 이해가 필요하고, 잘못 사용하면 시스템에 영향을 줄 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
_WinAPI_SetWindowsHookEx는 AutoIt의 DLLCall 기능을 활용하여 C++ 수준의 윈도우 API를 사용하는 것과 동일합니다.&lt;br /&gt;
&lt;br /&gt;
[[category:autoit]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>