6773|8

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince下如何实现自动蓝牙拨号(dun)? [复制链接]

http://msdn.microsoft.com/en-us/library/dd187531.aspx
根据MSDN的描述,分以下几步骤去做?
1、进行蓝牙配对
2、用蓝牙建立虚拟串口,RegisterDevice.如:COM2!
3、将虚拟串口信息更新到已建立的拨号连接中RasSetEntryProperties.
4、启动拨号RASDIAL。
前面2步都完成了,就是不知道怎么更新到已建立的拨号连接中,这是MSDN的描述
Create a virtual COM port for the Bluetooth DUN connection.
Assign an unused virtual COM port that you will use for this Bluetooth DUN connection.
Create a virtual COM port by calling RegisterDevice.
Update the RAS book entries to reflect the correct virtual COM port number by using RasGetEntryProperties and RasSetEntryProperties.
请做过这方面的大侠帮我看一下!没做过的请帮顶!谢了!

最新回复

c.最后就启动蓝牙的拨号联接就可以成功联上了! DWORD   dwRet,dwSizes,dwEntries;            LPBYTE   lpBuffer=NULL;            LPRASENTRYNAME   lpRasEntryName=new   RASENTRYNAME;         lpRasEntryName->dwSize=sizeof(RASENTRYNAME);           dwSizes=sizeof(RASENTRYNAME);            dwRet=RasEnumEntries(NULL,NULL,lpRasEntryName,&dwSizes,&dwEntries);            delete   lpRasEntryName;            lpBuffer=new   BYTE[dwSizes];           lpRasEntryName=(LPRASENTRYNAME)lpBuffer;            lpRasEntryName->dwSize=sizeof(RASENTRYNAME);           if (ERROR_SUCCESS == RasEnumEntries(NULL,NULL,lpRasEntryName,&dwSizes,&dwEntries))         {                 if(dwEntries>0)                    {                            for(DWORD i=0;iszEntryName);                                 //AfxMessageBox(lpRasEntryName->szEntryName);                                 BOOL fPass;                                 RasGetEntryDialParams(NULL, &rp, &fPass);                                 DWORD dwret=0;                                 if(m_hConn!=NULL)                                 {                                         dwret=RasHangUp(m_hConn);                                         if (ERROR_SUCCESS == dwret)                                         {                                                 m_hConn=NULL;                                         }                                 }                                 dwret=RasDial(NULL, NULL, &rp, 0, NULL, &m_hConn);                                 //CString strtemp;                                 //strtemp.Format(_T("entryname %s,errorcode %u!"),lpRasEntryName->szEntryName,dwret);                                 //g_mylog.WriteLog(strtemp);                                 //此处总是返回633,即端口占用错误,应该是蓝牙端口没有打开                                 //如何才能打开端口?                                 //AfxMessageBox(strtemp);                                 if (ERROR_SUCCESS == dwret)                                 {                                         if(IsOnLine())                                         {                                                 bRet=TRUE;                                                 //AfxMessageBox(lpRasEntryName->szEntryName);                                                 break;                                         }                                 }                         }                 }                    else                    {                            delete []lpBuffer;                         AfxMessageBox(_T("你必须建立拨号网络连接"),MB_OK|MB_ICONERROR);                            SendMessage(WM_CLOSE);                            return   FALSE;                    }                     复制代码  详情 回复 发表于 2009-11-30 14:26
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
请eeworld专家帮我解答下!
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
配完对后,再调用这个函数创建虚拟串口,生成MODEM驱动,再生成拨号连接,最后拨号,产生633错误,不知道怎么回事?
BOOL CreateCom(SOCKADDR_BTH* pSockAddrbth)
{
        BOOL bRet=FALSE;
        HANDLE  hCommPort=NULL;
        WCHAR szComPort[30]={0};
        PORTEMUPortParams pp;
        memset (&pp, 0, sizeof(pp));       
        unsigned char nChannel = 24; //直接指定       
        pp.channel = nChannel & 0xff;       
        pp.device = pSockAddrbth->btAddr;       
        pp.flocal = TRUE;
        pp.uiportflags = RFCOMM_PORT_FLAGS_REMOTE_DCB;       
        int index= 9 ;//
        HANDLE h = NULL ;
        for(index = 9 ; index >= 0; index -- )
        {
        h = RegisterDevice (L"COM", index, L"btd.dll", (DWORD)&pp);
               
                if(h > 0)                       
                {                       
                        //打开端口
                        wsprintf (szComPort, L"COM%d:", index);
                        hCommPort = CreateFile (szComPort, GENERIC_READ | GENERIC_WRITE,
                                0, NULL, OPEN_EXISTING, 0, NULL);       
                        if(hCommPort>0)
                        {
                                unsigned char mReadBuf[9] = {0xff,0xff,0x02,0xff};
                                DWORD mWriteLen = 0;
              BOOL Flag = ::WriteFile((HANDLE)hCommPort,mReadBuf,4,&mWriteLen,NULL);//发送数据                               
                                if(mWriteLen>0)
                                {                       
                                        continue ;       
                                }
                                else
                                {       
                                        bRet=TRUE;
                                        break;
                                }
                        }
                }
               
        }
        if(hCommPort!=NULL)
        {
                CloseHandle(hCommPort);
                AfxMessageBox(szComPort);
                HKEY hk;
                if(ERROR_SUCCESS!=RegCreateKeyEx(HKEY_LOCAL_MACHINE, L"ExtModems\\BluetoothDUN",0,NULL,
                        0,KEY_ALL_ACCESS,NULL,&hk,NULL))
                {
       
                }
                if (ERROR_SUCCESS != RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"ExtModems\\BluetoothDUN", 0, KEY_READ, &hk))
                {

                        return FALSE;               
                }
                DWORD dwSize = sizeof(szComPort);
                if(ERROR_SUCCESS != RegSetValueEx(hk,L"Port",0,REG_SZ,(LPBYTE)szComPort,dwSize))
        {

                        RegCloseKey (hk);                       
                        return FALSE;
                }
                if(ERROR_SUCCESS != RegSetValueEx(hk,L"DeviceType",0,REG_DWORD,(LPBYTE)L"1",sizeof(DWORD)))
        {
                        RegCloseKey (hk);                       
                        return FALSE;
                }
                if(ERROR_SUCCESS != RegSetValueEx(hk,L"FriendlyName",0,REG_SZ,(LPBYTE)L"BluetoothDUN",sizeof(L"BluetoothDUN")))
        {
                        RegCloseKey (hk);                       
                        return FALSE;
                }
                RASENTRY RasEntry;       
                RasEntry.dwSize = sizeof(RASENTRY);
                DWORD cb = sizeof(RASENTRY);
                wsprintf(RasEntry.szLocalPhoneNumber,_T("*99***1#" ));
                RasEntry.dwfOptions &= ~(RASEO_SpecificNameServers|RASEO_SpecificIpAddr|
                        RASEO_IpHeaderCompression|RASEO_SwCompression|RASEO_UseCountryAndAreaCodes);               
                wcscpy (RasEntry.szDeviceType, RASDT_Modem);
                wcscpy (RasEntry.szDeviceName, L"BluetoothDUN");
                RasSetEntryProperties(NULL, RAS_NAME_BLUETOOTH, &RasEntry, sizeof(RasEntry), NULL, 0);
                RASDIALPARAMS        RasDialParams;
                memset((char *)&RasDialParams, 0, sizeof(RasDialParams));               
                RasDialParams.dwSize = sizeof(RASDIALPARAMS);
                wcscpy (RasDialParams.szEntryName, RAS_NAME_BLUETOOTH);               
                wsprintf(RasDialParams.szPhoneNumber,_T(""));
                wsprintf(RasDialParams.szCallbackNumber,_T(""));
                wsprintf(RasDialParams.szUserName,_T(""));
                wsprintf(RasDialParams.szPassword,_T(""));
                wsprintf(RasDialParams.szDomain,_T(""));
                RasSetEntryDialParams(RAS_NAME_BLUETOOTH, &RasDialParams, FALSE);
                AfxMessageBox(_T("create dial entry ok!"));

                RASDIALPARAMS rp = {0};
                rp.dwSize = sizeof(RASDIALPARAMS);
                lstrcpy(rp.szEntryName, RAS_NAME_BLUETOOTH);
                //AfxMessageBox(lpRasEntryName->szEntryName);
                HRASCONN   hConn=NULL;
                BOOL fPass;
                RasGetEntryDialParams(NULL, &rp, &fPass);
                DWORD dwret=0;
                dwret=RasDial(NULL, NULL, &rp, 0, NULL, &hConn);
                CString strtemp;
                strtemp.Format(_T("entryname %s,errorcode %u!"),RAS_NAME_BLUETOOTH,dwret);
                //此处总是返回633,即端口占用错误,应该是蓝牙端口没有打开
                AfxMessageBox(strtemp);
               
        }
        return bRet;
}
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
要结贴了,问题解决了,但eeworld上没人帮我,版主不称职!
上面的代码基本上出来了,只是PORTEMUPortParams 这个要用客户端的方式,并且通道一定要正确!
如果有人来顶一下,也许我就把全部代码贴出来,可惜,eeworld让我寒心!
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

5
 
我正找相关方面的资料,我帮你顶.请问自动用WINCE5用API自动配对怎么做的,楼主能否把整个过程的代码都帖出来.
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
同问
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 
先要启动蓝牙,再用代码与蓝牙设备建立联接,最后用建立好的拨号连接拨号!
看下代码,有问题直接发我邮件吧:51anygo#gmail.com
a.启动蓝牙,因为没找到API,所以用发消息的方式模拟点击事件,手工启动,代码如下:

  1. void CBlueTooth_WM::ActiveBluetooth(HWND hWnd,BOOL bIsFirst)
  2. {
  3.         //        MessageBox(hWnd,_T("Find1"),_T("Find1"),MB_OK);
  4.         HWND mybthwnd = FindWindow(NULL, _T("BlueTooth"));
  5.     if(!mybthwnd)
  6.         {
  7.                 HWND nowforewin=GetFocus();
  8.                 HWND myyfhwnd = FindWindow(NULL, _T("YFMainMenu"));
  9.                 if (bIsFirst || nowforewin==myyfhwnd)
  10.                 {
  11.                         if(myyfhwnd)
  12.                         {
  13.                                 {
  14.                                         //BringWindowToTop(myyfhwnd);
  15.                     //SetForegroundWindow(myyfhwnd);
  16.                                         //PostMessage(nowforewin,WM_QUIT,0,0);
  17.                                         //Sleep(100);
  18.                                         //MessageBox(hWnd,_T("Find1"),_T("Find1"),MB_OK);
  19.                                         //TCHAR szClassName[MAX_PATH]={0};
  20.                                         //wsprintf(szClassName,_T("%x,%x"),nowforewin,myyfhwnd);
  21.                                         //MessageBox(hWnd,szClassName,_T("Find"),MB_OK);
  22.                                         //SetWindowPos(nowforewin,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
  23.                                         //SetWindowPos(myyfhwnd,HWND_TOP,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
  24.                                         //SetForegroundWindow(myyfhwnd);
  25.                                         Sleep(100);
  26.                                         SendMessage(myyfhwnd, WM_LBUTTONDOWN, 0, 0x008500BC);
  27.                                         //Sleep(100);
  28.                                         SendMessage(myyfhwnd, WM_LBUTTONUP, 0, 0x008500BC);
  29.                                         int iwait=0;
  30.                                         while(iwait<100 && !(mybthwnd = FindWindow(NULL, _T("BlueTooth"))))
  31.                                         {
  32.                                                 Sleep(100);
  33.                                                 iwait++;                                               
  34.                                         }
  35.                                         /*Sleep(100);
  36.                                         SendMessage(myyfhwnd, WM_USER+2006, 1, 0);
  37.                                         SendMessage(myyfhwnd, WM_ENABLE, 1, 0);
  38.                                         SendMessage(myyfhwnd, 0X0000036e, 1, 0x1403B1F4); */
  39.                                         /*SetForegroundWindow(mybthwnd);
  40.                                         //mybthwnd = FindWindow(NULL, _T("BlueTooth"));
  41.                                         //SetWindowPos(mybthwnd,HWND_TOP,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
  42.                                         //START THE dunlist UI
  43.                                         SendMessage(mybthwnd, WM_LBUTTONDOWN, 1, 0x00b4012A);
  44.                                         //Sleep(100);
  45.                                         SendMessage(mybthwnd, WM_LBUTTONUP, 0, 0x00b4012A);
  46.                                         Sleep(500);
  47.                                         HWND dunlistwnd=GetForegroundWindow();
  48.                                         //::MessageBox(hWnd,_T("GetFocus"),_T("GetFocus"),MB_OK);
  49.                                         if(dunlistwnd)
  50.                                         {  
  51.                                         //MessageBox(hWnd,_T("Find2"),_T("Find2"),MB_OK);
  52.                                         //TCHAR szClassName[MAX_PATH]={0};
  53.                                         //wsprintf(szClassName,_T("%x"),dunlistwnd);
  54.                                         //MessageBox(hWnd,szClassName,_T("Find"),MB_OK);
  55.                                         static i=0;
  56.                                         long pos[5]={0x004000c3,0x006d00ac,0x00a200ac,0x00cb00be,0x01050083};
  57.                                         SendMessage(dunlistwnd, WM_LBUTTONDOWN, 1, pos[i]);
  58.                                         SendMessage(dunlistwnd, WM_LBUTTONUP, 0, pos[i]);
  59.                                         SendMessage(dunlistwnd, WM_LBUTTONDOWN, 1, pos[i]);
  60.                                         SendMessage(dunlistwnd, WM_LBUTTONUP, 0, pos[i]);
  61.                                         //循环查找dun
  62.                                         i++;
  63.                                         Sleep(500);
  64.                                         HWND dialwnd=GetForegroundWindow();
  65.                                         if(dialwnd==dunlistwnd)
  66.                                         {
  67.                                         i=0;
  68.                                         //MessageBox(hWnd,_T("no dial"),_T("no dial"),MB_OK);
  69.                                         }
  70.                                         else
  71.                                         {
  72.                                         //        MessageBox(hWnd,_T("Find3"),_T("Find3"),MB_OK);
  73.                                         SendMessage(dialwnd, WM_LBUTTONDOWN, 1, 0x001501c9);
  74.                                         SendMessage(dialwnd, WM_LBUTTONUP, 0, 0x001501c9);
  75.                                         }
  76.                                         SendMessage(dunlistwnd, WM_LBUTTONDOWN, 1, 0x001901c5);
  77.                                         SendMessage(dunlistwnd, WM_LBUTTONUP, 0, 0x001901c5);
  78.                                 }*/
  79.                                         //hide THE BlueTooth UI
  80.                                         SendMessage(mybthwnd, WM_LBUTTONDOWN, 1, 0x001701c4);
  81.                                         //Sleep(100);
  82.                                         SendMessage(mybthwnd, WM_LBUTTONUP, 0, 0x001701c4);
  83.                                         //Sleep(100);
  84.                                         //SendMessage(myyfhwnd, WM_ENABLE, 1, 0);
  85.                                         //SendMessage(myyfhwnd, 0X0000036e, 0, 0X1403B1F4);
  86.                                         //::MessageBox(hWnd,_T("Find"),_T("Find"),MB_OK);
  87.                                 }
  88.                         }
  89.                 }
  90.                 //SetWindowPos(nowforewin,HWND_TOP,0,0,0,0,1);
  91.                 SetForegroundWindow(nowforewin);
  92.         }
  93. }
复制代码
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
{
        BOOL bRet=FALSE;
        HANDLE  hCommPo
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

9
 
c.最后就启动蓝牙的拨号联接就可以成功联上了!


  1. DWORD   dwRet,dwSizes,dwEntries;   
  2.         LPBYTE   lpBuffer=NULL;   
  3.         LPRASENTRYNAME   lpRasEntryName=new   RASENTRYNAME;
  4.         lpRasEntryName->dwSize=sizeof(RASENTRYNAME);  
  5.         dwSizes=sizeof(RASENTRYNAME);   
  6.         dwRet=RasEnumEntries(NULL,NULL,lpRasEntryName,&dwSizes,&dwEntries);   
  7.         delete   lpRasEntryName;   
  8.         lpBuffer=new   BYTE[dwSizes];  
  9.         lpRasEntryName=(LPRASENTRYNAME)lpBuffer;   
  10.         lpRasEntryName->dwSize=sizeof(RASENTRYNAME);  
  11.         if (ERROR_SUCCESS == RasEnumEntries(NULL,NULL,lpRasEntryName,&dwSizes,&dwEntries))
  12.         {
  13.                 if(dwEntries>0)   
  14.                 {   
  15.                         for(DWORD i=0;i
  16.                         {
  17.                                 RASDIALPARAMS rp = {0};
  18.                                 rp.dwSize = sizeof(RASDIALPARAMS);
  19.                                 lstrcpy(rp.szEntryName, lpRasEntryName->szEntryName);
  20.                                 //AfxMessageBox(lpRasEntryName->szEntryName);
  21.                                 BOOL fPass;
  22.                                 RasGetEntryDialParams(NULL, &rp, &fPass);
  23.                                 DWORD dwret=0;
  24.                                 if(m_hConn!=NULL)
  25.                                 {
  26.                                         dwret=RasHangUp(m_hConn);
  27.                                         if (ERROR_SUCCESS == dwret)
  28.                                         {
  29.                                                 m_hConn=NULL;
  30.                                         }
  31.                                 }
  32.                                 dwret=RasDial(NULL, NULL, &rp, 0, NULL, &m_hConn);
  33.                                 //CString strtemp;
  34.                                 //strtemp.Format(_T("entryname %s,errorcode %u!"),lpRasEntryName->szEntryName,dwret);
  35.                                 //g_mylog.WriteLog(strtemp);
  36.                                 //此处总是返回633,即端口占用错误,应该是蓝牙端口没有打开
  37.                                 //如何才能打开端口?
  38.                                 //AfxMessageBox(strtemp);
  39.                                 if (ERROR_SUCCESS == dwret)
  40.                                 {
  41.                                         if(IsOnLine())
  42.                                         {
  43.                                                 bRet=TRUE;
  44.                                                 //AfxMessageBox(lpRasEntryName->szEntryName);
  45.                                                 break;
  46.                                         }
  47.                                 }
  48.                         }
  49.                 }   
  50.                 else   
  51.                 {   
  52.                         delete []lpBuffer;
  53.                         AfxMessageBox(_T("你必须建立拨号网络连接"),MB_OK|MB_ICONERROR);   
  54.                         SendMessage(WM_CLOSE);   
  55.                         return   FALSE;   
  56.                 }                    
复制代码
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表