Winforms 为什么';t SAPI';s ISpNotifySource::SetNotifyWindowMessage()是否将通知发送到my WndProc()?

Winforms 为什么';t SAPI';s ISpNotifySource::SetNotifyWindowMessage()是否将通知发送到my WndProc()?,winforms,dll,callback,speech-recognition,wndproc,Winforms,Dll,Callback,Speech Recognition,Wndproc,我正在使用WinForms,并试图让SetNotifyWindowMessage()向WndProc发送消息,但它没有这样做 函数调用: HRESULT initSAPI(HWND hWnd) { ... if(FAILED( g_cpRecoCtxt->SetNotifyWindowMessage( hWnd, WM_RECOEVENT, 0, 0 ))) MessageBoxW(hWnd, L"Error sending window message", L"SAPI

我正在使用WinForms,并试图让SetNotifyWindowMessage()向WndProc发送消息,但它没有这样做

函数调用:

HRESULT initSAPI(HWND hWnd)
{
  ...
  if(FAILED( g_cpRecoCtxt->SetNotifyWindowMessage( hWnd, WM_RECOEVENT, 0, 0 )))
    MessageBoxW(hWnd, L"Error sending window message", L"SAPI Initialization Error", 0);
  ...
}
WndProc:

LRESULT WndProc (HWND hWnd, UINT message, WPARAM wparam, LPARAM lparam)
{
   case WM_RECOEVENT:
      ProcessRecoEvent(hWnd);
      break;
   default:
      return DefWindowProc(hWnd, message, wParam, lParam);
}

注意:在鼠标单击事件中调用initSAPI()。

您也调用过吗?SetNotifyWindowMessage指定事件发生时要执行的操作,但不指定要侦听的事件。

是的,我已将兴趣设置为
SPEI\u RECOGNITION
。问题是,当事件发生时,它没有按要求执行操作。您使用的是inproc还是共享识别器?你必须对inproc识别器进行更多的初始化(特别是设置引擎),如果你不设置引擎,SAPI不会给你错误代码,但也不会进行任何识别。我使用的是共享识别器。我已经完成了引擎、上下文、语法和规则设置。您认为如何?尝试添加更多事件标志。特别是,SPEI_SR_AUDIO_LEVEL有助于确保识别器实际处理音频。