我需要知道用户何时调用了针对Windows的Nuance Dragon(Naturally Speaking)。
在Windows平台上,用户说“Hello,Dragon”后会弹出Dragon Assistant。弹出一个小窗口,其中包含Dragon图标和一些用于解决用户问题的文本。
我的应用程序需要检测Dragon Assistant何时醒来并进入睡眠状态。 Dragon是否为此目的公开任何事件?如果没有,是否可以“向下钻取”Dragon Assistant窗口并检测可以让我知道这件事的东西?使用UI Spy时,我可以看到Dragon Assistant图标发生变化,我还可以看到用于用户提示的文本控件,但我需要在管理员帐户下运行UI Spy才能获得这些详细信息。
答案 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
}
}
}