プログラマメモ
VB6.0_ウィンドウプロシージャのオーバーライド
最終更新:
inouework
-
view
ウィンドウプロシージャのオーバーライド
1、APIを宣言します。
'[SetWindowLong]---------------------------------------------------------------- '指定ウィンドウ情報変更API '[引数] '-hWnd :設定対象のウィンドウのハンドル '-nIndex :変更するデータの指定 '-dwNewLong :設定する32ビット値 '[戻り値] '-正常終了 :変更前の値 '-異常終了 :0 Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 'nIndex定数 Private Const GWL_EXSTYLE = (-20) '拡張ウィンドウスタイルを取得します。 Private Const GWL_STYLE = (-16) 'ウィンドウスタイルを取得します。 Private Const GWL_WNDPROC = (-4) 'ウィンドウプロシージャのアドレス、またはウィンドウプロシージャのアドレスを示すハンドルを取得します。 Private Const GWW_HINSTANCE = (-6) 'アプリケーションのインスタンスハンドルを取得します。 Private Const GWL_HINSTANCE = (-6) 'インスタンスハンドルを取得 Private Const GWL_HWNDPARENT = (-8) 'アプリケーションのインスタンスハンドルを取得します。 Private Const GWW_ID = (-12) 'ウィンドウの ID を取得します。 Private Const GWL_USERDATA = (-21) 'ウィンドウに関連付けられたアプリケーション定義の 32 ビット値を取得します。
2、「SetWindowLong」APIを使用しメッセージを取得したいウィンドウに取得先を変更させます
mlngOldHandl = SetWindowLong(Form1.hWnd, GWL_WNDPROC, AddressOf WindowProc)
※戻り値(mlngOldHandl)の以前のハンドルは指定したウィンドウプロシージャがアクセスできる変数スコープで保持します。
※設定している32ビット値(WindowProc)はメッセージが取得されて来てほしいプロシージャ名を指定します。
※設定している32ビット値(WindowProc)はメッセージが取得されて来てほしいプロシージャ名を指定します。
3、指定のウィンドウプロシージャを作成しメッセージをフックします。
'---------------------------------------------------------------- '名称:WindowProc '説明:ウィンドウプロシージャ コールバック関数 '---------------------------------------------------------------- Public Function WindowProc(ByVal hTargetWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case msg Case TRAY_NOTIFYICON 'タスクトレイの操作など Case WM_MOVE 'マウス移動の操作など End Select WindowProc = CallWindowProc(mlngOldHandl, hTargetWnd, msg, wParam, lParam) End Function