Windows 下临时禁用输入法

目前遇到一个需求,是要在弹出右键菜单时禁用掉输入法。找了一圈没找到 Qt 的比较简单的实现,目前只实现了 Windows 下的处理。

#ifdef Q_OS_WIN
	class IMEBlocker
	{
	public:
		explicit IMEBlocker(QWidget *pWidget)
			: m_hWND(pWidget ? pWidget->winId() : nullptr)
			, m_hIMC(nullptr)
		{
			if (m_hWND)
				m_hIMC = ::ImmAssociateContext(m_hWND, nullptr);
		}
		~IMEBlocker()
		{
			if (m_hWND)
				::ImmAssociateContext(m_hWND, m_hIMC);
		}
	private:
		HWND m_hWND;
		HIMC m_hIMC;
	};
#endif
#ifdef Q_OS_WIN
#define DISABLE_IME_TEMPORARY\
	__pragma(comment(lib, "imm32.lib"))\
	Utils::IMEBlocker _ime_block(this);
#else
#define	DISABLE_IME_TEMPORARY
#endif

 

发表回复