You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maya插件新线程Popup窗口切换回调异常及点击监听求助

Maya插件Popup窗口焦点监听问题

问题场景

在Maya插件的新线程中创建Popup窗口,无法在切换到该窗口时收到正确的焦点回调。

创建Popup窗口代码

hWnd = CreateWindow(
    "Sample", "Sample", WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, NULL, NULL, hInstance, NULL);

焦点事件监听实现

通过SetWinEventHook监听EVENT_SYSTEM_FOREGROUND事件,用于判断窗口是否获得焦点:

windowsEventHook = SetWinEventHook(
    EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, // Range of events (4 to 5).
    NULL, // Handle to DLL.
    selectMayaObjectOnActiveWindowCallback, // The callback.
    0, 0, // Process and thread IDs of interest (0 = all)
    WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); // Flags.

回调函数定义

void CALLBACK selectMayaObjectOnActiveWindowCallback(HWINEVENTHOOK hook, DWORD event, HWND hwnd,
    LONG idObject, LONG idChild,
    DWORD dwEventThread, DWORD dwmsEventTime)

核心问题

  1. 点击Maya主窗口缩略图和自定义Popup窗口缩略图时,回调传入的idObject、idChild、dwEventThread参数完全一致,无法区分。
  2. 点击Popup窗口时,回调传入的HWND与创建的窗口实例不匹配,此时窗口标题为TaskListThumbnailWnd。

已尝试的无效方案

  • 用GetCurrentThreadId()限制回调仅响应当前进程ID。
  • 通过窗口标题判断(但缩略图窗口标题固定为TaskListThumbnailWnd)。
  • 调用getActiveWindow()、getForegroundWindow()、GetWindow(hwnd, GW_ENABLEDPOPUP)、getFocus()等函数尝试获取正确窗口句柄。

求助问题

能否直接给HWND实例设置点击监听器?或者有其他可靠方法判断自定义Popup窗口是否被点击?


内容的提问来源于stack exchange,提问作者Doug Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:12:55