ページ 1 / 1
スクロ-ルバー等、システムフックする方法
Posted: 2006年1月21日(土) 10:58
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
宜しくお願いします。
Re: スクロ-ルバー等、システムフックする方法
Posted: 2006年1月26日(木) 13:34
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でしょうか?
スクロ-ルバー等、システムフックする方法
Posted: 2006年1月26日(木) 17:24
by KICO
ノッチ様、ありがとう御座います。
システムフックをする場合はSetWindowsHookExをDLLから呼び出さなければいけません。
この部分はOKでしょうか?
はい、DLLから呼び出しています。
宜しくお願いします。
Re: スクロ-ルバー等、システムフックする方法
Posted: 2006年1月26日(木) 20:33
by NoWest
以前にも確かグローバルフックの話をしたような気がしますね。
今回の件なんですが、wParamの下位WORDにスクロールバーのIDが格納されていそうなのでGetDlgItem(msg->hWnd,LOWORD(msg->wParam))でスクロールバーのハンドルを取得できるんじゃないかなと思ったんですがどうでしょう?
Re: スクロ-ルバー等、システムフックする方法
Posted: 2006年1月26日(木) 23:55
by KICO
NoWest様、ありがとう御座います。
以前にも確かグローバルフックの話をしたような気がしますね。
以前にグローバルフックについて色々教えて頂きまして、ありがとう御座いました。
今回の件なんですが、wParamの下位WORDにスクロールバーのIDが格納されていそうなのでGetDlgItem(msg->hWnd,LOWORD(msg->wParam))でスクロールバーのハンドルを取得できるんじゃないかなと思ったんですがどうでしょう?
戻り値が0のようで、取得できませんでした。
宜しくお願いします。
Posted: 2006年1月27日(金) 18:04
by イグトランス
DLLのグローバル変数はプロセス毎に別個の存在です。
グローバルフックではいくつものプロセスにそれぞれDLLがロードされるので、
SetWindowsHookExを呼び出したプロセス以外ではhHookはNULLになっているはずです。
このことが原因ではないでしょうか?
Re: スクロ-ルバー等、システムフックする方法
Posted: 2006年1月27日(金) 19:21
by KICO
イグトランス様、ありがとう御座います。
DLLのグローバル変数はプロセス毎に別個の存在です。
DLLについて皆様に、色々と教えて頂いたのですが漠然として今ひとつ
把握できていません。
「プロセス毎」という事は、例えばアプリA、アプリBにそれぞれDLLが
ロードされる。
それとも、アプリAの内のプロセス毎という事でしょうか?
(私は前者の方で理解していたのですが)
宜しくお願いします。