2

我需要知道用户何时调用了适用于 Windows 的 Nuance Dragon (Naturally speak)。

在 Windows 平台上,当用户说“你好,龙”后,会弹出龙助手。会弹出一个带有龙图标的小窗口和一些用于解决用户的文本。

我的应用程序需要检测 Dragon Assistant 何时醒来并进入睡眠状态。Dragon 是否为此公开任何事件?如果没有,是否可以“深入”到 Dragon 助手窗口并检测到可以让我知道的内容?使用 UI Spy 时,我可以看到 Dragon Assistant 图标发生变化,我还可以看到用于用户提示的文本控件,但我需要 UI Spy 在 Adminstrator 帐户下运行才能获取这些详细信息。

4

1 回答 1

2

您可以使用窗口事件来监听EVENT_OBJECT_SHOW事件:

    SetWinEventHook( EVENT_OBJECT_SHOW, EVENT_OBJECT_SHOW, NULL, MyWinEventProc, 
                     0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);

然后,在您的事件过程中,您可以检查显示的窗口是否是 Dragon 助手:

void CALLBACK MyWinEventProc(
  HWINEVENTHOOK hWinEventHook,
  DWORD event,
  HWND hwnd,
  LONG idObject,
  LONG idChild,
  DWORD dwEventThread,
  DWORD dwmsEventTime
)
{
     if (idObject == OBJID_WINDOW)     // the window itself is being shown
     {
         // compare window class and/or title here
         WCHAR szClass[255];
         if (GetClassName(hwnd, szClass, ARRAYSIZE(szClass)) != 0 &&
             wcscmp(szClass, "WhatEverDragonAssistantClassNameIs") == 0)
         {
             // the Dragon Assistant is showing; notify the rest of your app here
         }
     }
}
于 2013-07-10T17:09:34.437 回答