ab.com コミュニティ https://www.activebasic.com/forum/ |
|
グローバルフック https://www.activebasic.com/forum/viewtopic.php?t=2514 |
ページ 1 / 1 |
作成者: | rest [ 2008年12月14日(日) 09:22 ] |
記事の件名: | グローバルフック |
グローバルフックをするには、どうすればいいのでしょうか。 DLLを作ってSetWindowsHookをすればいいようですが、 窓プログラミング グローバルフックを使う とかを見ても理解不能です。 共有領域などと書いてありますがどうやって作るのか分かりません。 誰か教えてください。お願いします・・・・[/url] |
作成者: | rest [ 2008年12月14日(日) 09:23 ] |
記事の件名: | |
すいません。 最後に[/url]が付いてしまいました。 |
作成者: | イグトランス [ 2008年12月14日(日) 15:23 ] |
記事の件名: | |
Windows 2000以上を対象にするなら、共有メモリのことは忘れて構いません。 共有メモリはCallNextHookExの1番目の引数(窓プログラミングのコードではhHookWnd)のために使っていますが、Windows 2000からこの引数はNULLで構わないことになっています。そのため、hHookWndはDLL側でただのグローバル変数とすれば問題ありません。 また、EXE側でsethook/freehookを呼び出している個所がありますが、ABではCreate/Destroyイベント内で呼び出せばよいと思います。 |
作成者: | rest [ 2008年12月14日(日) 15:53 ] |
記事の件名: | |
ていねいにお答えいただき、ありがとうございます。 共有メモリは忘れていいんですね。 がんばってみます。 |
作成者: | ゲスト [ 2008年12月14日(日) 18:32 ] |
記事の件名: | |
イグトランスさんの助言のおかげで、次のようなものができました。 キー入力を取得します。 ソースコード [ここをクリックすると内容が表示されます]
ちゃんとできました。ありがとうございます。
'汚いコードですいません(_ _)m #include "KeyLogHook.idx" '------------------------------------------------------------------- ' メモ - このファイルには、DLLの構成要素を記述します。 ' (例:関数定義、グローバル変数、定数定義など) ' ' エクスポートが必要な関数には、"Export" 修飾子を指定します。 ' (例:Function Export FuncName() As Long) '------------------------------------------------------------------- TypeDef HHOOK = VoidPtr TypeDef HOOKPROC = *Function(code As Long, wParam As WPARAM, lParam As LPARAM) As LRESULT Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (idHook As Long, lpfn As HOOKPROC, hmod As HINSTANCE, dwThreadId As DWord) As HHOOK Declare Function UnhookWindowsHookEx Lib "user32" (hhk As HHOOK) As BOOL Declare Function CallNextHookEx Lib "user32" (hhk As HHOOK, nCode As Long, wParam As WPARAM, lParam As LPARAM) As LRESULT Const WH_KEYBOARD = 2 Const HC_ACTION = 0 Const WM_KEYHOOK = (WM_USER + 100) Dim hHook=0 As HHOOK Dim hDllInstance As HINSTANCE Dim hMsgWnd As HWND Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long 'DLLエントリポイント Select Case fdwReason Case DLL_PROCESS_ATTACH 'DLLがプロセス空間にロードされた時に実行されます。 _System_StartupProgram() hDllInstance = hinstDLL DllMain=1 End Select End Function Function Export WindowSet(hWnd As HWND) hMsgWnd = hWnd End Function Function Export SetHook() As Long'フックをセット。失敗するとFALSEが返る。成功ならTRUE。 hHook = SetWindowsHookEx(WH_KEYBOARD,AddressOf(KeyLogHookProc),hDllInstance,0) If hHook=NULL Then SetHook = FALSE:Else:SetHook=TRUE End Function Sub Export FreeHook()'フックを解除 UnhookWindowsHookEx(hHook) End Sub Function KeyLogHookProc(code As Long, wParam As WPARAM, lParam As LPARAM) As LRESULT If code=HC_ACTION Then SendMessage(hMsgWnd, WM_KEYHOOK,wParam,lParam) End If KeyLogHookProc = CallNextHookEx(hHook,code,wParam,lParam) End Function ・・・ですが新たな問題点が(泣 キーを押したときと離したときの区別がつきません。 どうすればいいのでしょうか。誰か教えてください。 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |