イベント (メッセージ フック コントロール)

Message イベント

フック対象のフォームまたはコントロールが、Windows からメッセージを受け取った時に発生します。

構文

Private Sub object_Message ([index As Integer,]ByRef wMsg As Long, ByRef wParam As Long, ByRef lParam As Long, ByRef bDiscard As Boolean, ByRef lResult As Long)

Message イベントの構文の指定項目は次のとおりです。

指定項目内容
objectメッセージ フック コントロールを指すオブジェクト式です。
indexobject がコントロール配列の場合に、配列内の個々のコントロールを指す整数値です。
wMsg受け取ったメッセージの ID です。
wParamメッセージとともに送られる wParam パラメータです。wParam の内容は、メッセージによって異なります。
lParamメッセージとともに送られる lParam パラメータです。lParam の内容は、メッセージによって異なります。
bDiscardMessage イベント プロシージャで処理したメッセージを、Visual Basic の内部機構へ送らないかどうかをブール式で指定します。既定値は False です。
lResultbDiscard = True の場合 (Visual Basic の内部機構へメッセージを送らない場合) に、Windows へ返す結果コードを指定します。既定値は 0 です。

設定値

bDiscard の設定値は次のとおりです。

設定値内容
Trueメッセージは Visual Basic の内部機構へ送られません。この場合、lResult が結果コードとして Windows へ返されます。
False(既定値) メッセージは Visual Basic の内部機構へ送られます。lResult の値は無視されます。

解説

Message イベントは、hWndHook プロパティで指定したフォームまたはコントロールが、HookEnabled プロパティで指定したメッセージを受け取ったときに呼び出されます。

wMsg にはメッセージの ID が指定されているので、複数のメッセージをフックしている場合は、Select Case ステートメントを用いて、メッセージごとに処理を分岐することができます。また、必要に応じて wMsg の値を変更することもできます。

wParamlParam には、メッセージとともに送られるパラメータが指定されます。これらのパラメータの意味は、メッセージによって異なります。詳しくは、Windows API に関する書籍等をご参照ください。これらのパラメータは、必要に応じて変更することができます。

lParam に指定される値は、値そのものである場合と、ユーザ定義型の変数のアドレスである場合があります。変数のアドレスである場合、Visual Basic からはその変数の内容にアクセスすることができません。アクセスする必要がある場合は、メッセージ フック コントロールが提供する mhGetData 関数および、mhSetData 関数を使用します。

bDiscard フラグが False の場合、フックされたメッセージは、Message イベントで処理された後 Visual Basic へ送られ、内部機構によって処理されます。bDiscard フラグを True に設定すると、メッセージは Visual Basic へは送られず、代わりに lResult が Windows へ返されます (「メッセージ フック コントロールとは?」を参照)。Visual Basic にメッセージの処理をさせたくない場合は、bDiscard フラグを True に設定してください。ただし、この場合は、メッセージの処理結果コードを Windows へ返すために、lResult に適切な値を設定する必要があります。メッセージの処理結果コードは、メッセージによって異なります。詳しくは、Windows API に関する書籍等をご参照ください。

注意

Message イベント プロシージャの中で、Windows API の SendMessage 関数を呼び出すときは、イベントの連鎖が発生しないように十分注意してください。

参照

hWndHook プロパティHookEnabled プロパティmhGetData 関数mhSetData 関数メッセージ フック コントロールとは?