SetWindowLong

機能
ウィンドウに関するデータを取得
Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function SetWindowInteger Lib "user32.dll" Alias "SetWindowIntegerA" _
(ByVal hWnd As Integer, ByVal nIndex As Integer, ByVal dwNewInteger As Integer) As Integer

LONG SetWindowLong(
HWND hWnd,
int nIndex,
LONG dwNewLong
);
引数
hWnd

設定対象のウィンドウのハンドル
nIndex
変更するデータの指定
dwNewLong
設定する32ビット値
戻り値
正常終了のとき  変更前の値
エラーのとき  0
nIndexの定数

GWL_EXSTYLE = (-20)                     拡張ウィンドウスタイル
GWL_STYLE = (-16)                       ウィンドウスタイル
GWL_WNDPROC = (-4)                      ウィンドウ関数のアドレス
GWL_HINSTANCE = (-6)                    インスタンスハンドル
GWL_HWNDPARENT = (-8)                   親ウィンドウのハンドル
GWL_ID = (-12)                          ウィンドウのID
GWL_USERDATA = (-21)                    ユーザ定義の32ビット値
サンプル
ダウンロード(SetWindowLong.lzh 6.11KB)

Private Sub Command1_Click()
MsgBox "テキストボックスに送られる全てのメッセージを記録しています"
End Sub

Private Sub Form_Load() With Me .Text1.Text = "終了するときは必ず右上の[X]ボタンから終了してください" Open App.Path + "\message.txt" For Output As #1 Print #1, "メッセージのID" + Chr(9) + "wParam" + Chr(9) + "lParam" + Chr(9) + "メッセージの送信時刻" '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) Close 'Notepadのパスが違うかたは変更してください 'Shell "c:\windows\notepad.exe " + App.Path + "\message.txt" Shell "c:\winnt\notepad.exe " + App.Path + "\message.txt" End Sub