2013-07-09 1 views
2

Мне нужно знать, когда пользователь Nuance Dragon (Naturally Speaking) вызывается пользователем.Обнаружить, когда вызывается Nuance Dragon

На платформе Windows помощник по Dragon появляется после того, как пользователь говорит «Привет, Дракон». В маленьком окне появляется значок Dragon и некоторый текст, используемый для обращения к пользователю.

Мое приложение должно обнаружить, когда Помощник Дракона просыпается и ложится спать. Предоставляет ли Дракон какие-либо события для этой цели? Если нет, можно ли «просверлить» окно «Помощник дракона» и обнаружить что-то, что может сообщить об этом? При использовании UI Spy я вижу, что значок Dragon Assistant изменяется, и я также могу видеть текстовый элемент управления, используемый для пользовательских запросов, но мне нужен UI Spy для работы под учетной записью Adminstrator, чтобы получить эти данные.

ответ

2

Вы можете использовать Window Events для прослушивания EVENT_OBJECT_SHOW событий:

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

затем, в вашем прок событий, вы можете проверить, если окно показывается как помощник дракона:

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

I может, конечно, попробовать это, но я думаю, что это может не сработать, потому что это окно настроено на «всегда сверху», а UI Spy говорит, что он всегда виден. Я думаю, что приложение выполняет некоторые трюки, чтобы сделать его прозрачным, когда он не используется, и фактически не изменяет порядок z. – gonzobrains

+1

@ gonzobrains - я не знаю, как выглядит окно, но слоированное окно apis влияет только на клиентскую область, а не на неклиентскую область; установка прозрачного окна оставит прямоугольник. (Конечно, это может не помешать им сделать еще больше обмана, чтобы удалить неклиентскую область ...) Spy ++ был бы полезен для отображения стилей окна и имени класса. –

Смежные вопросы