ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
-
KICO
- 記事: 57
- 登録日時: 2005年12月13日(火) 17:42
#1
投稿記事
by KICO »
何時も、お世話に成っています。
スクロ-ルバー(WM_HSCROLL,WM_VSCROLL)とWM_COMMANDをシステムフックする方法を教えて下さい。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]
Const WH_MSGFILTER = -1 'フックの種類を示す定数
Const MSGF_SCROLLBAR = 5 'イベントタイプを示す定数
'MSGFILTER Hook インストール
hHook=SetWindowsHookEx(WH_MSGFILTER, AddressOf(SysMsgProc), hInst, 0)
Function SysMsgProc(code As Long, wParam As DWord, lParam As DWord) As DWord
Dim msg As *MSG
If code=MSGF_SCROLLBAR Then
msg=lParam
msg->lParam で、スクロ-ルバーのハンドルが取得できません?
End If
'次のフックを呼び出す
GetMsgProc=CallNextHookEx(hHook, code, wParam, lParam)
End Function
宜しくお願いします。
-
ノッチ
- 記事: 82
- 登録日時: 2005年6月01日(水) 23:27
- お住まい: 北海道札幌市
#2
投稿記事
by ノッチ »
> 何時も、お世話に成っています。
>
> スクロ-ルバー(WM_HSCROLL,WM_VSCROLL)とWM_COMMANDをシステムフックする方法を教えて下さい。
>
> [hide]
> Const WH_MSGFILTER = -1 'フックの種類を示す定数
> Const MSGF_SCROLLBAR = 5 'イベントタイプを示す定数
>
> 'MSGFILTER Hook インストール
> hHook=SetWindowsHookEx(WH_MSGFILTER, AddressOf(SysMsgProc), hInst, 0)
>
> Function SysMsgProc(code As Long, wParam As DWord, lParam As DWord) As DWord
> Dim msg As *MSG
>
> If code=MSGF_SCROLLBAR Then
> msg=lParam
> msg->lParam で、スクロ-ルバーのハンドルが取得できません?
> End If
>
> '次のフックを呼び出す
> GetMsgProc=CallNextHookEx(hHook, code, wParam, lParam)
> End Function
> [/hide]
> 宜しくお願いします。
システムフックをする場合はSetWindowsHookExをDLLから呼び出さなければいけません。
この部分はOKでしょうか?
-
KICO
- 記事: 57
- 登録日時: 2005年12月13日(火) 17:42
#3
投稿記事
by KICO »
ノッチ様、ありがとう御座います。
システムフックをする場合はSetWindowsHookExをDLLから呼び出さなければいけません。
この部分はOKでしょうか?
はい、DLLから呼び出しています。
宜しくお願いします。
-
NoWest
- 記事: 264
- 登録日時: 2005年5月31日(火) 10:52
- お住まい: 高知
-
連絡する:
#4
投稿記事
by NoWest »
以前にも確かグローバルフックの話をしたような気がしますね。
今回の件なんですが、wParamの下位WORDにスクロールバーのIDが格納されていそうなのでGetDlgItem(msg->hWnd,LOWORD(msg->wParam))でスクロールバーのハンドルを取得できるんじゃないかなと思ったんですがどうでしょう?
-
KICO
- 記事: 57
- 登録日時: 2005年12月13日(火) 17:42
#5
投稿記事
by KICO »
NoWest様、ありがとう御座います。
以前にも確かグローバルフックの話をしたような気がしますね。
以前にグローバルフックについて色々教えて頂きまして、ありがとう御座いました。
今回の件なんですが、wParamの下位WORDにスクロールバーのIDが格納されていそうなのでGetDlgItem(msg->hWnd,LOWORD(msg->wParam))でスクロールバーのハンドルを取得できるんじゃないかなと思ったんですがどうでしょう?
戻り値が0のようで、取得できませんでした。
宜しくお願いします。
-
イグトランス
- 記事: 899
- 登録日時: 2005年5月31日(火) 17:59
- お住まい: 東京都
-
連絡する:
#6
投稿記事
by イグトランス »
DLLのグローバル変数はプロセス毎に別個の存在です。
グローバルフックではいくつものプロセスにそれぞれDLLがロードされるので、
SetWindowsHookExを呼び出したプロセス以外ではhHookはNULLになっているはずです。
このことが原因ではないでしょうか?
-
KICO
- 記事: 57
- 登録日時: 2005年12月13日(火) 17:42
#7
投稿記事
by KICO »
イグトランス様、ありがとう御座います。
DLLのグローバル変数はプロセス毎に別個の存在です。
DLLについて皆様に、色々と教えて頂いたのですが漠然として今ひとつ
把握できていません。
「プロセス毎」という事は、例えばアプリA、アプリBにそれぞれDLLが
ロードされる。
それとも、アプリAの内のプロセス毎という事でしょうか?
(私は前者の方で理解していたのですが)
宜しくお願いします。