OVH Cloud OVH Cloud

N° du port IrDa

4 réponses
Avatar
lamalice
Bonjour,

je développe une appli pour un Pocket PC 2003 Pro, et j'aimerai communiquer
avec un autre appareil quelconque par l'intérmédiare du port IrDa. J'utilise
la fonction CreateFile pour ouvrir les ports COM, mais je n'arrive pas à
trouver le bon n° du port COM associé à l'IrDa...
Quelqu'un sait comment on fait?

Merci.

4 réponses

Avatar
Alain Zanchetta [MS]
Bonjour,

1) il me semble qu'il y a une API dédiée à l'infra-rouge sans avoir besoin
de passer par CreateFile
2) pour faire du CreateFile("COMxx:"), il faut aller dans la registry,
énumérer les drivers dont le nom est COM et regarder si la dll associée est
irda, rechercher un post pas très vieux sur ce forum où j'expliquais comment
énumérer les ports COM disponibles à partir de la registry (il devait y
avoir "série" dans le titre)

bonne journée

Alain


"lamalice" a écrit dans le message de
news:
Bonjour,

je développe une appli pour un Pocket PC 2003 Pro, et j'aimerai
communiquer
avec un autre appareil quelconque par l'intérmédiare du port IrDa.
J'utilise
la fonction CreateFile pour ouvrir les ports COM, mais je n'arrive pas à
trouver le bon n° du port COM associé à l'IrDa...
Quelqu'un sait comment on fait?

Merci.


Avatar
BigMaster
UINT CIrdaPort::FindPortIndex()
{
// Look into the registry for the infrared port number

UINT uiPort = 0;
HKEY hKey = NULL;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("DriversBuiltInIrDA"), 0, 0,
&hKey) == ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;

if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, NULL, &dwSize) ==
ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;

if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, (LPBYTE)
&dwData, &dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}

RegCloseKey(hKey);
}

if (uiPort != 0)
return uiPort;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("CommIrDA"), 0, 0, &hKey) ==
ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;

if (RegQueryValueEx(hKey, _T("Port"), NULL, NULL, NULL, &dwSize) ==
ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;

if (RegQueryValueEx(hKey, _T("Port"), NULL, NULL, (LPBYTE) &dwData,
&dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}

RegCloseKey(hKey);
}

if (uiPort != 0)
return uiPort;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("CommIrDALinkage"), 0, 0,
&hKey) == ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;

if (RegQueryValueEx(hKey, _T("Bind"), NULL, NULL, NULL, &dwSize) ==
ERROR_SUCCESS)
{
if ((dwSize >= sizeof(TCHAR)) && (dwSize % sizeof(TCHAR) == 0))
{
LPTSTR pszSubKey = new TCHAR[dwSize / sizeof(TCHAR) + 1];

if (RegQueryValueEx(hKey, _T("Bind"), NULL, NULL, (LPBYTE) pszSubKey,
&dwSize) == ERROR_SUCCESS)
{
pszSubKey[dwSize / sizeof(TCHAR)] = _T('');

CString strSubKey;
strSubKey.Format(_T("Comm%sParms"), pszSubKey);

// AfxMessageBox(strSubKey);

HKEY hNewKey = NULL;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strSubKey, 0, 0, &hNewKey) ==
ERROR_SUCCESS && hNewKey != NULL)
{
dwSize = 0;

if (RegQueryValueEx(hNewKey, _T("Port"), NULL, NULL, NULL, &dwSize) ==
ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;

if (RegQueryValueEx(hNewKey, _T("Port"), NULL, NULL,
(LPBYTE) &dwData, &dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}

RegCloseKey(hNewKey);
}
}

delete [] pszSubKey;
}
}

RegCloseKey(hKey);
}

if (uiPort != 0)
return uiPort;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("DriversBuiltInIrCOMM"), 0,
0, &hKey) == ERROR_SUCCESS && hKey != NULL)
{
DWORD dwSize = 0;

if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, NULL, &dwSize) ==
ERROR_SUCCESS)
{
if ((dwSize > 0) && (dwSize <= sizeof(DWORD)))
{
DWORD dwData = 0;

if (RegQueryValueEx(hKey, _T("Index"), NULL, NULL, (LPBYTE)
&dwData, &dwSize) == ERROR_SUCCESS)
{
uiPort = (UINT) dwData;
}
}
}

RegCloseKey(hKey);
}

return uiPort;
}

"lamalice" wrote:

Bonjour,

je développe une appli pour un Pocket PC 2003 Pro, et j'aimerai communiquer
avec un autre appareil quelconque par l'intérmédiare du port IrDa. J'utilise
la fonction CreateFile pour ouvrir les ports COM, mais je n'arrive pas à
trouver le bon n° du port COM associé à l'IrDa...
Quelqu'un sait comment on fait?

Merci.


Avatar
lamalice
Merci pour les infos, je vais essayer de traduire ce bout de code en VB.NET.

Lamalice.
Avatar
PurL
Merci pour ce code, comme on a veut toujours plus :) que fait-elle d'autre
ta classe CIrdaPort ?

En tout ca merci,

PurL