消息关闭
    暂无新消息!
在开发手持机(CE系统)程序时,由于定制的原因,打印方式和一般不同,手持机连接好打印机后,
需要另外获取打印机的蓝牙地址。 ce里有撒api不拉,谢谢或者有其他方法么?

2个回答

︿ 3
int __stdcall createCom()
{
//BtFind();
PORTEMUPortParams pp ;


HKEY hRoot = HKEY_LOCAL_MACHINE; 
TCHAR *szSubKey = _T("software\\microsoft\\bluetooth\\device\\printer");
WCHAR szString[256];
HKEY hKey;
DWORD dwDisposition = REG_OPENED_EXISTING_KEY;
// DWORD val;
DWORD dwType;
long lRet;
ZeroMemory(&pp, sizeof(pp));

memset(szString,0,256);
lRet = RegCreateKeyEx(hRoot,szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwDisposition);
if(lRet == ERROR_SUCCESS)
{
TCHAR   szBuffer[256]; 
DWORD   dwSize=256; 
ZeroMemory(szBuffer,256); 
DWORD   dIndex; 
dIndex=0L; 
lRet =RegEnumKeyEx(hKey,dIndex,szBuffer,&dwSize,NULL,NULL,NULL,NULL);
if(lRet == ERROR_SUCCESS)
{
pp.channel = 1 ;// the next available channel
//pp.flocal = TRUE;   
//pp.uiportflags = RFCOMM_PORT_FLAGS_REMOTE_DCB | RFCOMM_PORT_FLAGS_AUTHENTICATE |RFCOMM_PORT_FLAGS_ENCRYPT;
GetBA(szBuffer, &pp.device);

pp.uiportflags = RFCOMM_PORT_FLAGS_REMOTE_DCB | RFCOMM_PORT_FLAGS_AUTHENTICATE |RFCOMM_PORT_FLAGS_ENCRYPT;
m_hDev = RegisterDevice(_T("COM"), 9, _T("btd.dll"), (DWORD)&pp);
RegCloseKey(hKey);
if (m_hDev == NULL) 

return -1;


else
{
SetHandle();
return 0;
}

}

}
}

int GetBA (WCHAR *pp, BT_ADDR *pba)  
{
// Bump pointer through any leading spaces
int i = 0 ;
while (*pp == ' ')
++pp;
for (i = 0 ; i < 4 ; ++i, ++pp)  
{
if (!iswxdigit (*pp))
return(FALSE);
int c = *pp;
if (c >= 'a')
c = c - 'a' + 0xa;
else if (c >= 'A')
c = c - 'A' + 0xa;
else c = c - '0';
if ((c < 0) || (c > 16))
return(FALSE);
*pba = *pba * 16 + c;
}
for (i = 0; i < 8 ; ++i, ++pp)  
{
if (!iswxdigit (*pp))
return(FALSE);
int c = *pp;
if (c >= 'a')
c = c - 'a' + 0xa;
else if (c >= 'A')
c = c - 'A' + 0xa;
else c = c - '0';
if ((c < 0) || (c > 16))
return(FALSE);
*pba = *pba * 16 + c;
}
if ((*pp != ' ') && (*pp != '\0'))
return(FALSE);
else
return(TRUE);
}
︿ 1
CE 是没有这种功能 API 的。
你的BT是使用 Module,还是协议栈?
如果是 Module,可以通过 AT 指令获取;如果是 CE 协议栈,则需要协议栈提供这个功能。