检测Nuance Dragon被调用的时间

时间:2013-07-09 21:19:03

标签: window ui-automation ui-spy

我需要知道用户何时调用了针对Windows的Nuance Dragon(Naturally Speaking)。

在Windows平台上,用户说“Hello,Dragon”后会弹出Dragon Assistant。弹出一个小窗口,其中包含Dragon图标和一些用于解决用户问题的文本。

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

1 个答案:

答案 0 :(得分:2)

您可以使用Window Events收听EVENT_OBJECT_SHOW个事件:

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

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

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
         }
     }
}