⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devicechooser.cpp

📁 wince用EVC编译的蓝牙扫描,文件传输,耳机控制软件.完完整软件包!MIPS,ARM编译通过 obexparser.lib filebrowser.cpp devicechooser.cpp
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                    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 + -