サブクラス化について

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
選キ

サブクラス化について

#1 投稿記事 by 選キ »

対象のウィンドウのメッセージをサブクラス化によって監視しようとしているのですが、どうもうまくいきません。

Dim CallBackhWnd As Long
Dim hTG As Long
'========================================
'----------***新プロシージャ***----------
'========================================
Function WndProc(hWnd As Long,uMsg As Long,wParam As Long,lParam As Long) As Long
'とりあえずメッセージを返す
WndProc=CallWindowProc(CallBackhWnd,hWnd,uMsg,wParam,lParam)
If (uMsg=WM_KEYDOWN) Then
'StaticBoxに"TRUE"と表示
SetWindowText(GetDlgItem(hMainWnd,Static1),"TRUE")
End If
End Function
'============================================
'----------***サブクラス化の開始***----------
'============================================
Sub SubClassSetUp(hWnd As Long)
CallBackhWnd = SetWindowLong(hWnd,GWL_WNDPROC,AddressOf(WndProc))
End Sub
'============================================
'----------***サブクラス化の終了***----------
'============================================
Sub SubClassClose(hWnd As Long)
SetWindowLong(hWnd,GWL_WNDPROC,CallBackhWnd)
End Sub
'=====================================
'-----------***終了ボタン***----------
'=====================================
Sub MainWnd_CB1_Click()
'ボタンを押すとサブクラス化を終了しプログラムを終了
SubClassClose(hTG)
End
End Sub
'========================================
'----------***フォームロード***----------
'========================================
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hTG=FindWindow(NULL,"無題 - ペイント")
if(hTG<>NULL)Then
'ウィンドウハンドルが取得できたらサブクラス化
SubClassSetUp(hTG)
Else
'ウィンドウが見つからなかったら即終了
End
End If
End Sub

上記のソース(イベントプロシージャ部に記述)はサブクラス化のテストで書いたもので、ペイントのウィンドウでキーが押されたときに自分のStaticBoxに文字を表示するという内容です。
しかし、ペイントを起動しキーを押してもメッセージが取れません。
また、サブクラス化するウィンドウのハンドル(hTG)を自分のハンドルに設定すると出来るようなので、サブクラス化自体は成功しているようなのです。
どなたか、私に知識を貸してください。
Toshi
記事: 98
登録日時: 2005年7月19日(火) 19:47
お住まい: 山形県
連絡する:

#2 投稿記事 by Toshi »

別のプロセス(ペイントなど)のウィンドウをサブクラス化することは出来ません。
どうしてもメッセージを捕まえたいのであれば、フックを使用することになります。
フックについては検索などで調べてみてください。
選キ

#3 投稿記事 by 選キ »

やはり、そうでしたか。。。自分でも調べている過程でそんな気がしていましたorz
Toshiさん本当にありがとうございましたm(_ _)m
フックについてはもっと勉強してから手を出そうと思います。
返信する