- #define CAPS_BUFFER_SIZE 512
-
- #define MAX_LOADSTRING 25
-
- TCHAR szNumber[MAX_LOADSTRING];
- HRESULT SHGetPhoneNumber(LPTSTR szNumber, UINT cchNumber, UINT nLineNumber);
-
- SHGetPhoneNumber(szNumber, MAX_LOADSTRING, 1);
- MessageBox(NULL, szNumber, TEXT("Phone Number"), MB_OK);
- HRESULT SHGetPhoneNumber(LPTSTR szNumber, UINT cchNumber, UINT nLineNumber)
- {
- HRESULT hr = E_FAIL;
- LRESULT lResult = 0;
- HLINEAPP hLineApp;
- DWORD dwNumDevs;
- DWORD dwAPIVersion = TAPI_API_HIGH_VERSION;
- LINEINITIALIZEEXPARAMS liep;
-
- DWORD dwTAPILineDeviceID;
- const DWORD dwAddressID = nLineNumber - 1;
-
- liep.dwTotalSize = sizeof(liep);
- liep.dwOptions = LINEINITIALIZEEXOPTION_USEEVENT;
-
-
- if (SUCCEEDED(lineInitializeEx(&hLineApp, 0, 0,
- TEXT("ExTapi_Lib"), &dwNumDevs, &dwAPIVersion, &liep)))
- {
-
- BYTE* pCapBuf = NULL;
- DWORD dwCapBufSize = CAPS_BUFFER_SIZE;
- LINEEXTENSIONID LineExtensionID;
- LINEDEVCAPS* pLineDevCaps = NULL;
- LINEADDRESSCAPS* placAddressCaps = NULL;
-
- pCapBuf = new BYTE[dwCapBufSize];
- EXIT_ON_NULL(pCapBuf);
-
- pLineDevCaps = (LINEDEVCAPS*)pCapBuf;
- pLineDevCaps->dwTotalSize = dwCapBufSize;
-
-
- dwTAPILineDeviceID = 0xffffffff;
- for (DWORD dwCurrentDevID = 0 ; dwCurrentDevID < dwNumDevs ;
- dwCurrentDevID++)
- {
-
- if (0 == lineNegotiateAPIVersion(hLineApp, dwCurrentDevID,
- TAPI_API_LOW_VERSION, TAPI_API_HIGH_VERSION, &dwAPIVersion, &LineExtensionID))
- {
- lResult = lineGetDevCaps(hLineApp, dwCurrentDevID,
- dwAPIVersion, 0, pLineDevCaps);
-
-
- if (dwCapBufSize < pLineDevCaps->dwNeededSize)
- {
- delete[] pCapBuf;
- dwCapBufSize = pLineDevCaps->dwNeededSize;
- pCapBuf = new BYTE[dwCapBufSize];
- EXIT_ON_NULL(pCapBuf);
-
- pLineDevCaps = (LINEDEVCAPS*)pCapBuf;
- pLineDevCaps->dwTotalSize = dwCapBufSize;
-
- lResult = lineGetDevCaps(hLineApp, dwCurrentDevID,
- dwAPIVersion, 0, pLineDevCaps);
- }
-
- if ((0 == lResult) &&
- (0 == _tcscmp((TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->
- dwLineNameOffset), CELLTSP_LINENAME_STRING)))
- {
- dwTAPILineDeviceID = dwCurrentDevID;
- break;
- }
- }
- }
-
- placAddressCaps = (LINEADDRESSCAPS*)pCapBuf;
- placAddressCaps->dwTotalSize = dwCapBufSize;
-
- lResult = lineGetAddressCaps(hLineApp, dwTAPILineDeviceID, dwAddressID,
- dwAPIVersion, 0, placAddressCaps);
-
-
- if (dwCapBufSize < placAddressCaps->dwNeededSize)
- {
- delete[] pCapBuf;
- dwCapBufSize = placAddressCaps->dwNeededSize;
- pCapBuf = new BYTE[dwCapBufSize];
- EXIT_ON_NULL(pCapBuf);
-
- placAddressCaps = (LINEADDRESSCAPS*)pCapBuf;
- placAddressCaps->dwTotalSize = dwCapBufSize;
-
- lResult = lineGetAddressCaps(hLineApp, dwTAPILineDeviceID, dwAddressID,
- dwAPIVersion, 0, placAddressCaps);
- }
-
- if (0 == lResult)
- {
- if (szNumber)
- {
- szNumber[0] = TEXT('\0');
- EXIT_ON_FALSE(0 != placAddressCaps->dwAddressSize);
-
- ASSERT(0 != placAddressCaps->dwAddressOffset);
- PWCHAR tsAddress = (WCHAR*)(((BYTE*)placAddressCaps)
- +placAddressCaps->dwAddressOffset);
- StringCchCopy(szNumber, cchNumber, tsAddress);
- }
-
- hr = S_OK;
- }
-
- delete[] pCapBuf;
- }
-
- FuncExit:
- lineShutdown(hLineApp);
-
- return hr;
- }
(myyb) |