Fスクリーンキーボードでは各アプリケーションの全角半角の状態を取得するのに、グローバルフックを使用しIMEの状態を取得してデータをプログラムに送り、半角全角状態を画面に表示している。
が、プログラムにデータを送るのにPostMessageしてるのがセキュリティソフトがトロイと認識してダメだするみたい。
以下はグローバルフック内で使用したコード。
DLLEXPORT LRESULT CALLBACK KeyboardProc( int code, WPARAM wParam, LPARAM lParam ) { CWPRETSTRUCT* callWndProcRet = (CWPRETSTRUCT*)lParam; if ( cg_hParentWnd && code == HC_ACTION && callWndProcRet->message == WM_IME_NOTIFY && (callWndProcRet->wParam == IMN_SETOPENSTATUS || callWndProcRet->wParam == IMN_OPENSTATUSWINDOW) ) { HIMC hImc = ImmGetContext( callWndProcRet->hwnd ); if ( hImc ) { BOOL isIMEOpen = ImmGetOpenStatus( hImc ); ImmReleaseContext( callWndProcRet->hwnd, hImc ); if ( cg_isIMEOpen != isIMEOpen ) { PostMessage( cg_hParentWnd, WM_ISOPEN_IME, (WPARAM)isIMEOpen, 0 ); cg_isIMEOpen = isIMEOpen; } } } return CallNextHookEx( cg_hHook, code, wParam, lParam ); }
他の全角半角の状態取得方法
HWND hImeWnd = ImmGetDefaultIMEWnd( hTargetWnd ); bool isImeOpen = SendMessage( hImeWnd, WM_IME_CONTROL, IMC_GETOPENSTATUS, 0 );
0 件のコメント:
コメントを投稿