フックチェーンにアプリケーション定義のフックプロシージャを設定します。
#Include <WinAPI.au3>
_WinAPI_SetWindowsHookEx($idHook, $lpfn, $hmod [, $dwThreadId = 0])
パラメータ
$idHook | 設定されるフックプロシージャの種類を指定します。このパラメータは次の値のいずれかです: $WH_CALLWNDPROC - システムが目的のウィンドウプロシージャへ送信する前のメッセージを監視するフックプロシージャを設定します。 $WH_CALLWNDPROCRET - 目的のウィンドウプロシージャが処理した後のメッセージを監視するフックプロシージャを設定します。 $WH_CBT - コンピュータを利用したトレーニング(CBT)アプリケーションに有用な通知を受け取るフックプロシージャを設定します。 $WH_DEBUG - ほかのフックプロシージャのデバッグに有用なフックプロシージャを設定します。 $WH_FOREGROUNDIDLE - アプリケーションのフォアグラウンドスレッドがアイドル状態になろうとしているときに呼び出されるフックプロシージャを設定します。 $WH_GETMESSAGE - メッセージキューへポストされたメッセージを監視するフックプロシージャを設定します。 $WH_JOURNALPLAYBACK - WH_JOURNALRECORDフックプロシージャが既に記録したメッセージをポストするフックプロシージャを設定します。 $WH_JOURNALRECORD - システムメッセージキューへポストされた入力メッセージを記録するフックプロシージャを設定します。 $WH_KEYBOARD - キーストロークメッセージを監視するフックプロシージャを設定します。 $WH_KEYBOARD_LL - Windows NT/2000/XP: 低水準のキーボード入力イベントを監視するフックプロシージャを設定します。 $WH_MOUSE - マウスメッセージを監視するフックプロシージャを設定します。 $WH_MOUSE_LL - Windows NT/2000/XP: 低水準のマウス入力イベントを監視するフックプロシージャを設定します。 $WH_MSGFILTER - ダイアログボックス、メッセージボックス、メニュー、スクロールバーのいずれかへの入力イベントの結果として生成されたメッセージを監視するフックプロシージャを設定します。 $WH_SHELL - シェルアプリケーションにとって有用な通知を受け取るフックプロシージャを設定します。 $WH_SYSMSGFILTER - ダイアログボックス、メッセージボックス、メニュー、スクロールバーのいずれかへの入力イベントの結果として生成されたメッセージを監視するフックプロシージャを設定します。 |
$lpfn | フックプロシージャへのポインタ。 $dwThreadIdパラメータがゼロまたは異なるプロセスに作成されたスレッドの識別子を指定する場合、 $lpfnパラメータはDLL内のフックプロシージャを指さなければなりません。 それ以外の場合、$lpfnは 現在のプロセスに関連付けられたコードのフックプロシージャを指すことができます。 |
$hmod | $lpfnパラメータによって指されるフックプロシージャを格納しているDLLのハンドル。 $dwThreadIdパラメータが現在のプロセスによって作成されたスレッドを指定している場合、 またフックプロシージャが現在のプロセスに関連付けられたコード内にある場合、 $hModパラメータはNULLに設定されていなければなりません。 |
$dwThreadId | [オプション]
フックプロシージャが関連付けられているスレッドの識別子を指定します。 このパラメータがゼロの場合、フックプロシージャは同じデスクトップで呼び出し元スレッドとして実行している既存の全てのスレッドと関連付けられます。 |
返し値
成功: | フックプロシージャのハンドル |
失敗: | 0を返し、@errorを設定します |
注意
なし。
関連
_WinAPI_UnhookWindowsHookEx, _WinAPI_CallNextHookEx, DllCallbackRegister, DllCallbackGetPtr, DllCallbackFree
こちらも参照
MSDNライブラリでSetWindowsHookExを検索して下さい。
例
#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
Opt('MustDeclareVars', 1)
Global $hHook, $hStub_KeyProc, $buffer = ""
_Main()
Func _Main()
OnAutoItExitRegister("Cleanup")
Local $hmod
$hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
$hmod = _WinAPI_GetModuleHandle(0)
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
MsgBox(4096, "", "Click OK, then in notepad type..." & _
@CRLF & @CRLF & "Jon" & @CRLF & "AutoIt" & @CRLF & @CRLF & "Press Esc to exit script")
Run("Notepad")
WinWait("Untitled -")
WinActivate("Untitled -")
While 1
Sleep(10)
WEnd
EndFunc ;==>_Main
Func EvaluateKey($keycode)
If (($keycode > 64) And ($keycode < 91)) _ ; a - z
Or (($keycode > 96) And ($keycode < 123)) _ ; A - Z
Or (($keycode > 47) And ($keycode < 58)) Then ; 0 - 9
$buffer &= Chr($keycode)
Switch $buffer
Case "Jon"
ToolTip("What can you say?")
Case "AutoIt"
ToolTip("AutoIt Rocks")
EndSwitch
ElseIf ($keycode > 159) And ($keycode < 164) Then
Return
ElseIf ($keycode = 27) Then ; esc key
Exit
Else
$buffer = ""
EndIf
EndFunc ;==>EvaluateKey
;===========================================================
; コールバック関数
;===========================================================
Func _KeyProc($nCode, $wParam, $lParam)
Local $tKEYHOOKS
$tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
If $nCode < 0 Then
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndIf
If $wParam = $WM_KEYDOWN Then
EvaluateKey(DllStructGetData($tKEYHOOKS, "vkCode"))
Else
Local $flags = DllStructGetData($tKEYHOOKS, "flags")
Switch $flags
Case $LLKHF_ALTDOWN
ConsoleWrite("$LLKHF_ALTDOWN" & @CRLF)
Case $LLKHF_EXTENDED
ConsoleWrite("$LLKHF_EXTENDED" & @CRLF)
Case $LLKHF_INJECTED
ConsoleWrite("$LLKHF_INJECTED" & @CRLF)
Case $LLKHF_UP
ConsoleWrite("$LLKHF_UP: scanCode - " & DllStructGetData($tKEYHOOKS, "scanCode") & @TAB & "vkCode - " & DllStructGetData($tKEYHOOKS, "vkCode") & @CRLF)
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc ;==>_KeyProc
Func Cleanup()
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_KeyProc)
EndFunc ;==>Cleanup