亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? devicechooser.cpp

?? bluetooth obex implement
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
#include <windows.h>
#include "DeviceChooser.h"

#define _STRINGS_DEFINE_STRINGS
#include "ObexStrings.h"

#define MSG_OBEX_EVENT (WM_USER + 1001)


static BOOL fIsEnuming;

class CObexSink : public IObexSink
{
public:
    CObexSink(HWND hWnd) 
    { 
        _hWnd = hWnd;    
        _ulRefs = 0;
    }
    ~CObexSink() {}

public:
    HRESULT STDMETHODCALLTYPE Notify(OBEX_EVENT Event, IUnknown * pUnk1, IUnknown * pUnk2)
    {
        ASSERT(fIsEnuming);

        
        if ((IsWindow(_hWnd)) && (pUnk1))
        {            
            //since PostMessage returns quickly (w/o processing event) 
            //   AddRef it first            
            pUnk1->AddRef(); 
            PostMessage(_hWnd, MSG_OBEX_EVENT, (WPARAM )Event, (LPARAM )pUnk1);
        }
        return S_OK;
    }

    HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppv)
    {
        if ((riid == IID_IObexSink) || (riid == IID_IUnknown))
        {
            *ppv = (IConnectionPoint *) this;
        }
        else
        {
            *ppv = NULL;
            return E_NOINTERFACE;
        }
        AddRef();
        return S_OK;
    }

    ULONG   STDMETHODCALLTYPE AddRef() 
    { 
        return InterlockedIncrement((LONG*)&_ulRefs); 
    }

    ULONG   STDMETHODCALLTYPE Release()
    {
        ULONG ulRefs;
        InterlockedExchange((LONG *)&ulRefs, _ulRefs);
        if (InterlockedDecrement((LONG*)&_ulRefs) == 0)
        {
            delete this;
            return 0;
        }
        return ulRefs - 1;
    }

private:
    ULONG    _ulRefs;
    HWND    _hWnd;
};




struct DeviceList
{
    DeviceList *pNext;
    IPropertyBag *pBag;
};

typedef struct CHOOSEDEVICE_PARAM
{
    IObex        *pObex;
    IObexDevice **ppObexDevice;
	ULONG		  ulListenMask;
} CHOOSEDEVICE_PARAM;



CRITICAL_SECTION csLock;

UINT ChooseService(HINSTANCE hInst, HWND hwndParent, IObex *pObex, IObexDevice **ppObexDevice, ULONG ulListenMask)
{
    int ret;
    *ppObexDevice = NULL;
    
    CHOOSEDEVICE_PARAM cp;
    cp.pObex = pObex;
    cp.ppObexDevice = ppObexDevice;
	cp.ulListenMask = ulListenMask;
    InitializeCriticalSection(&csLock);

    ret =
        DialogBoxParam(hInst, 
        MAKEINTRESOURCE(IDD_CHOOSESERVICE),
        hwndParent, 
        (DLGPROC)ChooseServiceProc, 
        (LPARAM)&cp);

    DeleteCriticalSection(&csLock);
    
    if(ret && ppObexDevice)
        return ret;
    else
        return 1;
}


LRESULT CALLBACK ChooseServiceProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndList; 
    static IObexDevice **ppObexDevice;
    
    static IObex *pObex = NULL;
    static IConnectionPointContainer *pCont = NULL;
    static IConnectionPoint *pConPt = NULL;
    static DWORD dwCookie;
    static DeviceList *pDeviceList = NULL;
	static ULONG ulListenMask = 0;
    
    

    switch(message)
    {
    case WM_INITDIALOG :
        EnterCriticalSection(&csLock);
        pDeviceList = NULL;
        pObex = ((CHOOSEDEVICE_PARAM *)lParam)->pObex;
		ulListenMask = ((CHOOSEDEVICE_PARAM *)lParam)->ulListenMask;
        pObex->AddRef();
        ppObexDevice = ((CHOOSEDEVICE_PARAM *)lParam)->ppObexDevice;

         //release the device (if it exists)
        if(*ppObexDevice)
            (*ppObexDevice)->Release();
        *ppObexDevice = 0;
        
        hwndList = GetDlgItem(hwnd, IDC_LIST);        

        CObexSink *pSink;
        pSink = new CObexSink(hwnd);
        if (!pSink)
        {
            LeaveCriticalSection(&csLock);
            break;
        }

        fIsEnuming = TRUE;
        if ( (pObex) && (pSink) && (SUCCEEDED(pObex->QueryInterface(IID_IConnectionPointContainer, (LPVOID *)&pCont))) &&
             (SUCCEEDED(pCont->FindConnectionPoint(IID_IObexSink, &pConPt))) && (pConPt) &&
             (SUCCEEDED(pConPt->Advise((IUnknown *)pSink, &dwCookie)))     )
        {
            
            pObex->StartDeviceEnum();
        }
        else
        {
            fIsEnuming = FALSE;
        }
        LeaveCriticalSection(&csLock);
        break;

    case WM_DESTROY:
        EnterCriticalSection(&csLock);


        //
        //  Disconnect ourselves as a sink
        if (pConPt)
        {
            pConPt->Unadvise(dwCookie);
            pConPt->Release();
        }

        if(fIsEnuming)
        {
            pObex->StopDeviceEnum();
            fIsEnuming = FALSE;
        }

        

        //
        //  Delete all devices that are lingering
        while(pDeviceList)
        {
            DeviceList *pDelMe = pDeviceList;    
            pDeviceList = pDeviceList->pNext;
            pDelMe->pBag->Release();        
            delete pDelMe;
        }
        
        if (pCont)
            pCont->Release();
        if (pObex)
            pObex->Release();
        LeaveCriticalSection(&csLock);
        break;

    case MSG_OBEX_EVENT:
    {
        EnterCriticalSection(&csLock);
        
        IPropertyBag *pDevice = NULL;
        if (NULL != (pDevice = (IPropertyBag *)lParam))
        {
            VARIANT varAddress;
            VARIANT varDeviceName;
            VARIANT varTransport;
            VARIANT varPort;
            VARIANT varUUID;
            
            BOOL fHaveAddress = FALSE;
            BOOL fHaveDeviceName = FALSE;
            BOOL fHaveTransport = FALSE;
            BOOL fHavePort = FALSE;
            BOOL fHaveUUID = FALSE;
            
            VariantInit(&varDeviceName);
            VariantInit(&varTransport);
            VariantInit(&varAddress);
            VariantInit(&varPort);
            VariantInit(&varUUID);

            if(SUCCEEDED(pDevice->Read(c_szDevicePropName, &varDeviceName, NULL)))
                fHaveDeviceName = TRUE;
            if(SUCCEEDED(pDevice->Read(c_szDevicePropTransport, &varTransport, NULL)))
                fHaveTransport = TRUE;
            if(SUCCEEDED(pDevice->Read(c_szDevicePropAddress, &varAddress, NULL)))
                fHaveAddress = TRUE;
            if(SUCCEEDED(pDevice->Read(c_szPort, &varPort, NULL)))
                fHavePort = TRUE;
            if(SUCCEEDED(pDevice->Read(c_szDeviceServiceUUID, &varUUID, NULL)))
                fHaveUUID = TRUE;


            //see how much we can read    
            if (wParam == OE_DEVICE_ARRIVAL)
            {
                CLSID clsidTrans;

                if( fHaveDeviceName && (varDeviceName.vt == VT_BSTR) && 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合久久综合九色| 久久国产尿小便嘘嘘尿| 国产成人在线视频播放| 丁香六月久久综合狠狠色| 狠狠色综合日日| 国产高清在线观看免费不卡| 成人综合婷婷国产精品久久蜜臀 | 高清在线成人网| 国产真实乱子伦精品视频| 免费看欧美女人艹b| 欧美a级理论片| 不卡欧美aaaaa| 免费成人小视频| 色综合久久天天综合网| 精品播放一区二区| 午夜国产精品影院在线观看| 福利视频网站一区二区三区| 欧美不卡一区二区| 日本大胆欧美人术艺术动态| 91在线精品一区二区| 国产精品久久久久久久久免费丝袜| 国产伦精品一区二区三区免费| 成人性生交大片免费看中文| 欧美视频日韩视频| 波多野结衣精品在线| 91精品在线免费| 亚洲一区二区三区四区在线观看 | 午夜视频久久久久久| 日本不卡视频一二三区| a在线播放不卡| 久久久久亚洲综合| 婷婷国产在线综合| 99久久精品免费看国产免费软件| 日韩一级高清毛片| 首页国产欧美久久| 欧美一区二区三区影视| 一区二区三区欧美| 99re66热这里只有精品3直播| 欧美成人福利视频| 国内欧美视频一区二区| 欧美tickling挠脚心丨vk| 日本女人一区二区三区| 3751色影院一区二区三区| 最新高清无码专区| 色婷婷一区二区三区四区| 亚洲欧洲性图库| 在线观看日韩高清av| 一区二区久久久久久| 欧美无人高清视频在线观看| 亚洲精品视频在线看| 国产欧美精品一区| 成人精品鲁一区一区二区| 欧美揉bbbbb揉bbbbb| 91免费观看国产| 成人性生交大片免费| 国产精品一区在线| 国产乱子轮精品视频| 日日摸夜夜添夜夜添精品视频| 亚洲天堂中文字幕| 亚洲美女区一区| 亚洲欧美偷拍卡通变态| 国产欧美日韩视频在线观看| www精品美女久久久tv| 日韩精品一区二区三区中文精品| 成人免费高清在线| 国产精品亚洲人在线观看| 亚洲视频中文字幕| 亚洲精品国产第一综合99久久| 精品美女一区二区| 欧美一区二区三区在线| 欧美二区三区91| 欧美色偷偷大香| 色综合久久中文综合久久97| 成人午夜精品在线| 高清成人免费视频| 国产做a爰片久久毛片| 免费成人av资源网| 久久国产免费看| 亚洲一区免费在线观看| 国产精品夜夜嗨| 韩国成人在线视频| 丁香婷婷综合五月| 丁香六月综合激情| 在线免费观看日本一区| 欧美三电影在线| 欧美成人伊人久久综合网| 精品国产伦一区二区三区免费 | 久久99久国产精品黄毛片色诱| 亚洲第一激情av| 美日韩一区二区| 国产69精品久久久久毛片| 日韩精品中文字幕在线不卡尤物| 欧美日韩一区二区在线观看视频| 欧美日韩综合色| 久久中文娱乐网| 亚洲美女少妇撒尿| 日韩和欧美的一区| 风间由美一区二区av101| 欧美在线播放高清精品| 欧美年轻男男videosbes| 亚洲欧美色图小说| 一区二区三区四区五区视频在线观看| 免费观看一级欧美片| 色悠悠久久综合| 欧美精品一区二区三区在线 | 欧洲精品中文字幕| 国产精品视频一二三| 国产精品一区二区无线| 日韩三级视频在线看| 偷偷要91色婷婷| 欧美日韩久久久一区| 一区二区三区自拍| 色哦色哦哦色天天综合| 国产精品久久99| 在线欧美日韩精品| 一区二区三区精品久久久| a亚洲天堂av| 日韩一卡二卡三卡| 国产精品电影一区二区| 99久久伊人精品| 亚洲靠逼com| 欧美一区二区播放| 国产一区二区免费看| 中文字幕一区二区在线播放| 成人小视频免费观看| 亚洲成av人片在线| 久久久亚洲精华液精华液精华液 | 在线观看日韩精品| 日本美女视频一区二区| 国产精品天干天干在线综合| 综合在线观看色| 欧美日韩国产三级| 国产成人99久久亚洲综合精品| 国产精品少妇自拍| 欧美日韩亚洲综合| 99久久婷婷国产综合精品电影 | 美女爽到高潮91| 欧美国产视频在线| 精品国产91九色蝌蚪| 日本欧美大码aⅴ在线播放| 久久综合国产精品| 91免费版在线看| 亚洲免费视频成人| 在线日韩一区二区| 欧美在线免费播放| 岛国一区二区三区| 日本视频在线一区| 91精品国产高清一区二区三区蜜臀| 伊人开心综合网| 2020国产精品自拍| 欧美主播一区二区三区| 日韩有码一区二区三区| 欧美日韩一卡二卡| 91丨九色丨蝌蚪丨老版| 国产精品白丝av| 成人av综合在线| 欧美日免费三级在线| 色婷婷av一区| 69p69国产精品| 欧美午夜精品久久久| av亚洲精华国产精华精| 日韩欧美一区二区免费| 伦理电影国产精品| 久久天堂av综合合色蜜桃网| 日韩精品亚洲一区二区三区免费| 91福利视频久久久久| 亚洲久本草在线中文字幕| 在线免费观看一区| 日韩黄色免费网站| 久久久久99精品一区| 国产一区二区不卡老阿姨| 国产欧美日韩综合| 99视频超级精品| 一二三区精品视频| 欧美日韩高清一区二区三区| 精品三级av在线| 亚洲视频一二三区| 国产一区二区三区精品欧美日韩一区二区三区 | 一区二区三区视频在线观看| 欧美国产一区视频在线观看| 亚洲品质自拍视频| 美脚の诱脚舐め脚责91| 成熟亚洲日本毛茸茸凸凹| 精品久久久久久久久久久久久久久 | 久久久久88色偷偷免费| 精品福利二区三区| 99热精品国产| 在线视频国内一区二区| 7777精品伊人久久久大香线蕉完整版| 欧美老人xxxx18| 久久婷婷久久一区二区三区| 亚洲蜜臀av乱码久久精品蜜桃| 日韩极品在线观看| 成人午夜私人影院| 欧美一区国产二区| 中文子幕无线码一区tr| 亚洲第一综合色| 成人开心网精品视频| 欧美日韩不卡在线| 最近中文字幕一区二区三区|