2013-07-09 81 views
2

我需要知道用戶何時調用了Nuance Dragon(Naturally Speaking)for Windows。當Nuance Dragon被調用時檢測到

在Windows平臺上,用戶說「你好,Dragon」後,Dragon Assistant彈出。一個小窗口彈出龍圖標和一些用於解決用戶問題的文本。

我的應用程序需要檢測Dragon Assistant何時醒來並進入睡眠狀態。龍會爲此目的揭露任何事件嗎?如果沒有,是否有可能「深入」龍助理窗口,並發現可以讓我知道這件事的東西?在使用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

我可以肯定地嘗試這一點,但我認爲它可能無法正常工作,因爲此窗口設置爲「永遠在最前面」,並且UI Spy說它始終可見。我認爲他們的應用程序正在執行一些技巧,以便在不使用時透明,並且實際上並未改變z順序。 – gonzobrains

+1

@gonzobrains - 我不知道窗口是什麼樣的,但是分層窗口apis隻影響客戶區域,而不是非客戶區域;設置窗口透明會留下一個矩形。 (當然,這可能不會阻止他們去除非客戶端區域的更多技巧...)Spy ++將有助於顯示窗口樣式和類名稱。 –