CallWindowProc

機能
Windowsメッセージを指定のウィンドウプロシージャに渡す
Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal MSG As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Integer, ByVal hWnd As Integer, ByVal MSG As Integer, _
ByVal wParam As Integer, ByVal lParam As Integer) As Integer

LRESULT CallWindowProc(
WNDPROC lpPrevWndFunc,
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
引数
lpPrevWndFunc

元のウィンドウ関数へのポインタ
(GetWindowLong()関数にGWL_WNDPRCを設定して取得可)
hWnd
対象のウィンドウハンドル
Msg
Windowsからのメッセージ
wParam
同、パラメータ
lParam
同上
戻り値
正常終了のとき  ウィンドウのハンドル
エラーのとき  0
サンプル
ダウンロード(CallWindowProc.lzh 6.15KB)

Private Sub Check1_Click()
Beep
With Me.Check1
    If .Value = 0 Then
        Label1.Caption = "ボタンをチェックするとTextBoxのキー入力のみを無効化します" + _
          Chr(13) + Chr(10) + "マウスによる操作はそのままできます。"
    Else
        Label1.Caption = "キーボードからの入力を無効化しました。"
    End If
End With
End Sub

Private Sub Form_Load() With Me .Text1.Text = "終了するときは必ず右上の[X]ボタンから終了してください" .Check1.Caption = "キー入力を無効化する" .Label1.Caption = "ボタンをチェックするとTextBoxのキー入力のみを無効化します" + _ Chr(13) + Chr(10) + "マウスによる操作はそのままできます。" 'TextBoxのウィンドウプロシージャを変更する hOldWndProc = SetWindowLong(.Text1.hWnd, GWL_WNDPROC, AddressOf TextBoxProc) End With End Sub
Private Sub Form_Unload(Cancel As Integer) '変更したウィンドウプロシージャを元に戻す Call SetWindowLong(Me.Text1.hWnd, GWL_WNDPROC, hOldWndProc) End Sub