none
変換キーをフックしたい RRS feed

  • 質問

  • いつもお世話になります。

    MFCプログラムで日本語キーボードの変換キーをフックすることは可能でしょうか?

    お手数をお掛けしますが、ご教示下さい。

    2016年6月18日 5:34

回答

  • SetWindowsHookExでキーボードフックをしてやれば出来ました

    HHOOK hHook;
    LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
    { 
    	if (nCode == HC_ACTION)
    	{
    		KBDLLHOOKSTRUCT*pKB = (KBDLLHOOKSTRUCT*)lParam;
    		CString str;
    		str.Format(_T("%x\r\n"), pKB->vkCode);
    		OutputDebugString(str);
    		if (pKB->vkCode == VK_CONVERT)
    		{
    			return 1;
    		}
    	}
    	return CallNextHookEx(hHook, nCode, wParam, lParam);
    }
    
    void CMFCApplication2Dlg::OnBnClickedButton1()
    {
    	hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyHookProc, NULL, 0);
    }
    
    void CMFCApplication2Dlg::OnBnClickedButton2()
    {
    	UnhookWindowsHookEx(hHook);
    }
    #IMEの変換処理をフックしたいという意味?

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2016年6月18日 12:25

すべての返信

  • SetWindowsHookExでキーボードフックをしてやれば出来ました

    HHOOK hHook;
    LRESULT CALLBACK KeyHookProc(int nCode, WPARAM wParam, LPARAM lParam)
    { 
    	if (nCode == HC_ACTION)
    	{
    		KBDLLHOOKSTRUCT*pKB = (KBDLLHOOKSTRUCT*)lParam;
    		CString str;
    		str.Format(_T("%x\r\n"), pKB->vkCode);
    		OutputDebugString(str);
    		if (pKB->vkCode == VK_CONVERT)
    		{
    			return 1;
    		}
    	}
    	return CallNextHookEx(hHook, nCode, wParam, lParam);
    }
    
    void CMFCApplication2Dlg::OnBnClickedButton1()
    {
    	hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyHookProc, NULL, 0);
    }
    
    void CMFCApplication2Dlg::OnBnClickedButton2()
    {
    	UnhookWindowsHookEx(hHook);
    }
    #IMEの変換処理をフックしたいという意味?

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2016年6月18日 12:25
  • お世話になります。

    ご教示頂いたコードで上手くいきました。

    有難うございました。

    2016年6月20日 0:16