?? devicechooser.cpp
字號:
fHaveTransport && (varTransport.vt == VT_BSTR) &&
(SUCCEEDED(CLSIDFromString(varTransport.bstrVal, &clsidTrans))))
{
WCHAR szDevice[512];
WCHAR *szTrans = (0 == memcmp(&clsidTrans, &CLSID_BthTransport, sizeof(CLSID))) ? L"BT" : L"IRDA";
BOOL fAdd = TRUE;
if(!fHaveUUID || varUUID.vt != VT_BSTR)
{
if(!fHavePort)
wsprintf(szDevice, L"%s:<unk> (%s)", varDeviceName.bstrVal, szTrans);
else if(varPort.vt == VT_BSTR)
wsprintf(szDevice, L"%s:%s (%s)", varDeviceName.bstrVal, varPort.bstrVal, szTrans);
else if(varPort.vt == VT_I4)
wsprintf(szDevice, L"%s:%d (%s)", varDeviceName.bstrVal, varPort.lVal, szTrans);
else
wsprintf(szDevice, L"Unknown port type!");
}
else
{
BOOL fInbox = FALSE;
BOOL fFile = FALSE;
WCHAR *pPtrTmp = varUUID.bstrVal;
while(pPtrTmp)
{
if(0==wcsncmp(pPtrTmp,L"{00001105-0000-1000-8000-00805f9b34fb}", 38))
fInbox = TRUE;
if(0==wcsncmp(pPtrTmp,L"{00001106-0000-1000-8000-00805f9b34fb}", 38))
fFile = TRUE;
pPtrTmp = wcschr(pPtrTmp, ';');
if(pPtrTmp)
pPtrTmp ++;
}
//if what we got back doesnt match any of the masked values, delete it
fAdd = ((fInbox && (ulListenMask & INBOX_LISTEN_MASK)) || (fFile && (ulListenMask & FB_LISTEN_MASK)));
wsprintf(szDevice, L"%s <IB:%s> <FB:%s>", varDeviceName.bstrVal, fInbox?L"YES":L"NO",fFile?L"YES":L"NO");
}
//
if(fAdd)
{
int nIndex = SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM )szDevice);
if (nIndex >= 0)
{
//
// Add the device to the list
//
DeviceList *pNew = new DeviceList();
pNew->pNext = pDeviceList;
pNew->pBag = pDevice;
pDeviceList = pNew;
pDevice->AddRef();
SendMessage(hwndList, LB_SETITEMDATA, nIndex, (LPARAM )pDevice);
}
}
}
}
else if (wParam == OE_DEVICE_DEPARTURE)
{
if (fHaveAddress &&
((varAddress.vt == VT_I4) || (varAddress.vt == VT_BSTR)))
{
UINT numFetched = SendMessage(hwndList, LB_GETCOUNT, 0, 0);
for (ULONG i=0; i<numFetched; i++)
{
VARIANT var2;
VariantInit(&var2);
IPropertyBag *pBag = NULL;
LPARAM lPar = SendMessage(hwndList, LB_GETITEMDATA, (WPARAM )i, NULL);
if ((lPar != LB_ERR) && (lPar != LB_ERRSPACE))
pBag = (IPropertyBag *)lPar;
if (pDevice == pBag)
{
SendMessage(hwndList, LB_DELETESTRING, (WPARAM )i, NULL);
i = numFetched;
}
VariantClear(&var2);
}
}
}
else if (wParam == OE_DEVICE_UPDATE)
{
CLSID clsidTrans;
if (fHaveAddress && ((varAddress.vt == VT_I4) || (varAddress.vt == VT_BSTR)) &&
fHaveDeviceName && (varDeviceName.vt == VT_BSTR) &&
fHaveTransport && (varTransport.vt == VT_BSTR) &&
(SUCCEEDED(CLSIDFromString(varTransport.bstrVal, &clsidTrans))))
{
UINT numFetched = SendMessage(hwndList, LB_GETCOUNT, 0, 0);
for (ULONG i=0; i < numFetched; i++)
{
IPropertyBag *pBag = NULL;
LPARAM lPar = SendMessage(hwndList, LB_GETITEMDATA, (WPARAM)i, NULL);
if ((lPar != LB_ERR) && (lPar != LB_ERRSPACE))
pBag = (IPropertyBag *)lPar;
if (pDevice == pBag)
{
WCHAR szDevice[512];
WCHAR *szTrans = (0 == memcmp(&clsidTrans, &(CLSID_BthTransport), sizeof(CLSID))) ? L"BT" : L"IRDA";
BOOL fDelete = FALSE;
if(!fHaveUUID || varUUID.vt != VT_BSTR)
{
if(!fHavePort)
wsprintf(szDevice, L"%s:<unk> (%s)", varDeviceName.bstrVal, szTrans);
else if(varPort.vt == VT_BSTR)
wsprintf(szDevice, L"%s:%s (%s)", varDeviceName.bstrVal, varPort.bstrVal, szTrans);
else if(varPort.vt == VT_I4)
wsprintf(szDevice, L"%s:%d (%s)", varDeviceName.bstrVal, varPort.lVal, szTrans);
else
wsprintf(szDevice, L"Unknown port type!");
}
else
{
BOOL fInbox = FALSE;
BOOL fFile = FALSE;
WCHAR *pPtrTmp = varUUID.bstrVal;
while(pPtrTmp)
{
if(0==wcsncmp(pPtrTmp,L"{00001105-0000-1000-8000-00805f9b34fb}", 38))
fInbox = TRUE;
if(0==wcsncmp(pPtrTmp,L"{00001106-0000-1000-8000-00805f9b34fb}", 38))
fFile = TRUE;
pPtrTmp = wcschr(pPtrTmp, ';');
if(pPtrTmp)
pPtrTmp ++;
}
//if what we got back doesnt match any of the masked values, delete it
fDelete = !((fInbox && (ulListenMask & INBOX_LISTEN_MASK)) || (fFile && (ulListenMask & FB_LISTEN_MASK)));
wsprintf(szDevice, L"%s <IB:%s> <FB:%s>", varDeviceName.bstrVal, fInbox?L"YES":L"NO", fFile?L"YES":L"NO");
}
//delete this guy
SendMessage(hwndList, LB_DELETESTRING, (WPARAM)i, NULL);
//only reinsert if told not to delete
if(!fDelete)
{
SendMessage(hwndList, LB_INSERTSTRING, (WPARAM)i, (LPARAM)szDevice);
SendMessage(hwndList, LB_SETITEMDATA, (WPARAM)i, (LPARAM)pBag);
}
i = numFetched; // end the loop here
}
}
}
}
VariantClear(&varPort);
VariantClear(&varDeviceName);
VariantClear(&varTransport);
VariantClear(&varAddress);
pDevice->Release();
}
LeaveCriticalSection(&csLock);
break;
}
case WM_COMMAND:
switch(wParam)
{
case IDOK:
{
EnterCriticalSection(&csLock);
UINT i = SendMessage(hwndList, LB_GETCURSEL, 0, 0);
UINT numFetched = SendMessage(hwndList, LB_GETCOUNT, 0, 0);
int nRet = 1;
if(i == LB_ERR)
{
LeaveCriticalSection(&csLock);
MessageBox(NULL, L"Nothing Selected", L"Error", MB_OK);
}
else
{
HCURSOR hCurOld;
hCurOld = SetCursor(LoadCursor(NULL, IDC_WAIT));
//
// Disconnect ourselves as a sink
if (pConPt)
{
pConPt->Unadvise(dwCookie);
pConPt->Release();
pConPt = NULL;
}
//stop the device enumeration
pObex->StopDeviceEnum();
fIsEnuming = FALSE;
for(UINT j=0; j<numFetched; j++)
{
LPARAM lPar = SendMessage(hwndList, LB_GETITEMDATA, (WPARAM )j, NULL);
if ((lPar != LB_ERR) && (lPar != LB_ERRSPACE))
{
IPropertyBag *pBag = (IPropertyBag *)lPar;
ASSERT(pBag);
if(i==j)
{
HRESULT hr;
//
// put in the requested service here
if(ulListenMask & FB_LISTEN_MASK) {
VARIANT varRequested;
VariantInit(&varRequested);
varRequested.vt = VT_BSTR;
varRequested.bstrVal = SysAllocString(L"{00001106-0000-1000-8000-00805f9b34fb}");
hr = pBag->Write(L"RequestedServiceUUID", &varRequested);
VariantClear(&varRequested);
}
hr = pObex->BindToDevice(pBag, ppObexDevice);
if(FAILED(hr))
*ppObexDevice = NULL;
break;
}
// NOTE: DO NOT RELEASE the propery bag.
// it it contained withing the list of bags
// and will be removed during dialog cleanup
//
}
}
SetCursor(hCurOld);
LeaveCriticalSection(&csLock);
EndDialog(hwnd, nRet);
}
}
break;
}
break;
default:
break;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -