为什么 Python 而不是 Qt 需要 DLL 中的 GetMessage 消息抽取?

Why is message pumping with GetMessage in DLL needed for Python but not Qt?

我有一个使用 Windows API 的 C++ DLL,它处理 HWND_MESSAGE window creation/registration 并通过 [=13 注册事件通知=].在 Qt 中,我只是设置了一个 window 而没有使用 GetMessage,但是我的 window 进程回调自动工作,所以我没有使用 GetMessage 循环来接收WM_DEVICECHANGE 的通知。我在不添加任何额外代码的情况下获得设备到达和移除。

但是,在 Python 中,我只是使用 ctypes 将 DLL 作为 cdll 加载,这有效:

__lib = ctypes.cdll.LoadLibrary("DevSystem.dll")

但是,我需要在我的 C++ DLL 中手动使用事件 GetMessage 循环来获取设备 arrival/removal 通知。我必须手动创建一个循环才能工作,我不明白。

基本上,这些行是 Python 需要工作的唯一区别:

    MSG msg;
    while (GetMessage(&msg, hWnd, WM_DEVICECHANGE, WM_DEVICECHANGE))
    {
        DispatchMessage(&msg);
    }
  1. 为什么它在Qt中默认工作?
  2. 为什么Python需要留言 循环获取通知?

Why does it work by default in Qt?

Qt 应用程序框架运行一个消息循环来为 UI 提供服务,并且该消息循环还为您的回调提供服务。

Why does Python need a message loop to get notification?

您的 Python 程序不包含运行消息循环的任何内容,因此您需要明确地实现它。