ActiveBasicLifeのTips集を参考にモーダルダイアログのフックをやろうとしているのですが、
一つ困った問題がおきました。以下がそのコードです。
ダイアログ:ConfUIDPwDlgの先頭部分から抜粋 [ここをクリックすると内容が表示されます]
コード: 全て選択
Dim hConfUIDPwDlgHook As DWord
'ConfUIDPwDlgのフック関数
Function ConfUIDPwDlgGetMsgProc(nCode As Long, wParam As Long, lParam As Long) As Long
Dim msg As MSG
If nCode = HC_ACTION Then 'nCodeが0の場合のみフックで処理する
'lParamは、メッセージが格納されているメモリ領域のアドレスを示すポインタ
'なので、そのままMSG構造体にメモリ領域をコピーする
memcpy(VarPtr(msg), lParam, Len(msg))
'メッセージ内容を判断してIsDialogMessage関数にわたす
If (msg.message = WM_KEYDOWN) and (msg.wParam = VK_TAB or VK_RETURN) Then
ConfUIDPwDlgGetMsgProc = IsDialogMessage(hConfUIDPwDlg, msg)
End If
End If
ConfUIDPwDlgGetMsgProc = CallNextHookEx(hConfUIDPwDlgHook, nCode, wParam, lParam)
End Function
ダイアログのCreateイベントから抜粋 [ここをクリックすると内容が表示されます]
コード: 全て選択
'フックをインストールする
hConfUIDPwDlgHook = SetWindowsHookEx(WH_GETMESSAGE, AddressOf(ConfUIDPwDlgGetMsgProc), 0, GetWindowThreadProcessId(hConfUIDPwDlg, NULL))
AddLog("Install a hook.")
If hConfUIDPwDlgHook=0 Then
MessageBox(hConfUIDPwDlg, "フックのインストールに失敗", lpstrErrMsgBoxTitle, MB_OK or MB_ICONSTOP)
AddLog("Fail to install a hook.")
End If
ダイアログのDestroyイベントから抜粋 [ここをクリックすると内容が表示されます]
このコードを含んでコンパイルすると、Tabキーによってコントロール間の移動は可能なんですが、コード: 全て選択
'フックのアンインストール
UnhookWindowsHookEx(hConfUIDPwDlgHook)
AddLog("Uninstall a hook.")
なぜかエディットボックスに「a」と入力すると、なぜか「aa」と表示されてしまいます。
また、ボタンにTabをあわせて、Enterを押しても、何も反応がありません。
なぜでしょうか。
※AddLog関数…自作関数。ログ作成機能。
あと、参考にしたページのサンプルをダウンロードしてコンパイルし、実行してもEnterキーの反応がありません。
ActiveBasic 4.24.00