dormar Temat założony przez niniejszego użytkownika |
Programowanie telefonii TAPI » 2012-11-12 17:56:38 Witam Programuję współpracę pomiędzy komputerem a cyfrową centralą telefoniczną. Mam napisany i działający fragment programu, który realizuję funkcję dzwonienia, tj.: #include "stdafx.h" #include "windows.h" #include "tapi3.h"
int _tmain( int argc, _TCHAR * argv[] ) { int a = 0; char b; IEnumAddress * pIEnumAddress; ITAddress * pAddress; ITMediaSupport * pMediaSupport; ITBasicCallControl * pBasicCall; long lMediaTypes; short bSupport; BSTR adres, Addr; BSTR callerNumber; BSTR model = L"PPTP"; ITCallStateEvent * pNotify; HRESULT hr = CoInitializeEx( NULL, COINIT_MULTITHREADED ); ITTAPI * gpTapi; hr = CoCreateInstance( CLSID_TAPI, NULL, CLSCTX_INPROC_SERVER, IID_ITTAPI,( LPVOID * ) & gpTapi ); if( FAILED( hr ) ) { MessageBox( NULL, TEXT( "test1" ), TEXT( "Bar" ), 0 ); return hr; } hr = gpTapi->Initialize(); hr = gpTapi->EnumerateAddresses( & pIEnumAddress ); while( S_OK == pIEnumAddress->Next( 1, & pAddress, NULL ) ) { a++; hr = pAddress->get_AddressName( & adres ); if( 0 == wcscmp( adres, model ) ) { break; } } hr = pAddress->CreateCall( L"130", LINEADDRESSTYPE_PHONENUMBER, LINEMEDIAMODE_INTERACTIVEVOICE, & pBasicCall ); pBasicCall->Connect( true ); return 0; } Kolejnym elementem programu ma być odczytanie numeru telefonu dzwoniącego CallerId. Powinno to chyba wyglądać mniej więcej tak (fragment): ITCallStateEvent * pNotify; CALL_STATE state; ITAddress * pAddress; _bstr_t callerNumber;
pEvent->QueryInterface( IID_ITCallStateEvent,( void ** ) & pNotify ); pNotify->get_Call( & pCallInfo ); pCallInfo->get_CallInfoString( CIS_CALLERIDNUMBER, callerNumber.GetAddress() ); I tutaj mam problem związany ze zmienną pEvent. Pod tym linkiem http://msdn.microsoft.com/en-us/library/windows/desktop/ms734177(v=vs.85).aspx podany jest sposób zarejestrowania Event. Proszę o poradę jak to wszystko połączyć do kupy. Pozdrawiam |
|
DejaVu |
» 2012-11-12 21:02:21 W linku który podałeś masz fragmenty kodów odpowiedzialnych za zrobienie 'różnych' rzeczy... nawet masz tematycznie podzielone przykłady w drzewku po lewej. |
|
dormar Temat założony przez niniejszego użytkownika |
» 2012-11-12 22:09:17 Wiem, że to jest w tym linku i dlatego zrobiłem tak: (wg drzewka po lewej) 1. Initialize Tapi 2. Select an Address - tutaj wybieram zainstalowany driver dla mojej centrali 3. Make a Call - wykonanie połączenie na wskazany numer i to mi działa.
chodzi o to, że teraz potrzebuję zidentyfikować numer dzwoniącego i wychodzi mi na to, że trzeba to zrobić tak: 1. Initialize tapi 2. Select an adres 3. Register Events - i tutaj mam problem, jak to wkomponować w ten mój program. Podane na stronie z linku są 4 przykłady (czy bardziej kolejne kroki do wykonania?). Nie wiem własnie jak tego użyć dla moich potrzeb, czyli jak zarejestrować ten Even, aby mozna było go użyć np. w ten sposób: pEvent->QueryInterface( IID_ITCallStateEvent,( void ** ) & pNotify );
Pozdrawiam |
|
DejaVu |
» 2012-11-13 05:12:26 Kody przedstawiają różne etapy rejestrowania zdarzenia. |
|
dormar Temat założony przez niniejszego użytkownika |
» 2012-11-13 06:41:13 Example 2, Example 3 i Example4 wstawiam do mojego kodu po Initialize TAPI i Select an Address. Wtedy powinienem mieć zarejestrowane i (przechwycone) zdarzenie pEvent, które wykorzystam do dolszego programowania, już konkretnie odczytu numeru dzwoniącego. Dobrze myslę? Natomiast nie wiem gdzie i jak umieścić kod zawarty w Example 1, czyli wychodzi na to, że nie wiem jak w Visual Studio 2010 C++ zrobić obsługę zdarzeń (event handler). chodzi o ten fragment
HRESULT STDMETHODCALLTYPE CTAPIEventNotification::Event( TAPI_EVENT TapiEvent, IDispatch * pEvent ) { pEvent->AddRef(); BOOL bMessage; bMessage = PostMessage( ghDlg, WM_PRIVATETAPIEVENT, ( WPARAM ) TapiEvent, ( LPARAM ) pEvent ); return S_OK; }
Pozdrawiam |
|
DejaVu |
» 2012-11-13 16:18:52 |
|
« 1 » |