0

我正在编写自定义键盘切换器,发现某些应用程序会挂起。首先我想,我的应用程序或类似的东西有一个无限循环,但发现,即使使用 3rd 方工具发送消息也可以挂起应用程序。

在此处输入图像描述

挂起的应用程序示例有 Comsol Multiphysics 5.3a 和 Pinnacle Studio 20。

我在某处读到,这可能是 Qt 的问题,但就我而言,我不明白,如何检测此类应用程序并控制它们而不挂起?


会不会是这个问题:https ://bugreports.qt.io/browse/QTBUG-59889


我不明白,如果我使用工具栏小部件更改语言,为什么应用程序不会挂起?根据文档,它的作用相同:发布 WM_INPUTLANGCHANGEREQUEST 消息!


我已经使用 Spy++ 捕获了消息,并且看到默认切换器不发送此消息,它只发送

在此处输入图像描述

我不明白,如果WM_INPUTLANGCHANGE它自己发送,应用程序如何知道选择哪种语言。

4

1 回答 1

0

我解决了这个问题原因是qt在处理WM_INPUTLANGCHANGEREQUEST时有bug

# 重写窗口消息处理
def wndProc(self, hWnd, msg, wParam, lParam):
    if msg == 80:
        logger.info("msg={},wParam={},lParam={}".format(msg, wParam, lParam))
        # 如果是英文输入法
        if lParam == 67699721:
            # 手动调api切换英文输入法
            intptr = LoadKeyboardLayout("0409", 1)
            ActivateKeyboardLayout(intptr, KLF_ACTIVATE)
            # 禁止向下传递消息
            return False
        # sougou
        # if lParam == 134481924:
        #     return False
    return CallWindowProc(
        self.oldWndProc,
        hWnd,
        msg,
        wParam,
        lParam
    )
于 2021-10-13T03:29:15.097 回答