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 | メッセージ フック コントロールを指すオブジェクト式です。 |
index | object がコントロール配列の場合に、配列内の個々のコントロールを指す整数値です。 |
wMsg | 受け取ったメッセージの ID です。 |
wParam | メッセージとともに送られる wParam パラメータです。wParam の内容は、メッセージによって異なります。 |
lParam | メッセージとともに送られる lParam パラメータです。lParam の内容は、メッセージによって異なります。 |
bDiscard | Message イベント プロシージャで処理したメッセージを、Visual Basic の内部機構へ送らないかどうかをブール式で指定します。既定値は False です。 |
lResult | bDiscard = True の場合 (Visual Basic の内部機構へメッセージを送らない場合) に、Windows へ返す結果コードを指定します。既定値は 0 です。 |
設定値
bDiscard の設定値は次のとおりです。
設定値 | 内容 |
---|---|
True | メッセージは Visual Basic の内部機構へ送られません。この場合、lResult が結果コードとして Windows へ返されます。 |
False | (既定値) メッセージは Visual Basic の内部機構へ送られます。lResult の値は無視されます。 |
解説
Message イベントは、hWndHook プロパティで指定したフォームまたはコントロールが、HookEnabled プロパティで指定したメッセージを受け取ったときに呼び出されます。
wMsg にはメッセージの ID が指定されているので、複数のメッセージをフックしている場合は、Select Case ステートメントを用いて、メッセージごとに処理を分岐することができます。また、必要に応じて wMsg の値を変更することもできます。
wParam、lParam には、メッセージとともに送られるパラメータが指定されます。これらのパラメータの意味は、メッセージによって異なります。詳しくは、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 関数、メッセージ フック コントロールとは?