Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » com port anhand registry auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.06.2004, 09:23 Uhr
rene04



hallo,

habe in meinem projekt eine com port abfrage auf port 1 und 2. die abfrage ist mehr physischer natur, indem ein teststring an den jeweiligen port gesendet wird. letztens hatte ich dann besuch von einem kollegen der meinte man könne die info ob ein port vervügbar oder belegt ist auch aus der registry auslesen.

stimmt das ? das wäre ntürlich besser da ich dann auch die m öglichkeit hätte bzufragen ob der port verfügbar ist und ob schon etwas dran hängt. immo wird nur die verfügbarkeit geprüft.

sollte das wirklich so sein, wo wird denn sowas in der reg stehen ? dann mach ich das nämlich so !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.06.2004, 10:18 Uhr
ao

(Operator)


My Computer\HKLM\Hardware\DeviceMap\SerialComm

Da steht, welche COM-Ports es gibt. Ob sie noch zu haben sind, kriegst du nur raus, indem du es drauf ankommen lässt, d.h. CreateFile damit machen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.06.2004, 10:52 Uhr
rene rosenberger



nun stellt sich mir die Frage welcher dieser beiden Ansätze der Bessere ist. was denkt ihr ?
--
gruesse rene
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.06.2004, 11:08 Uhr
ao

(Operator)


Inwiefern besser?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.06.2004, 11:27 Uhr
~AS
Gast


Hallo rene04

ich habe in einer Zeitschrift folgende Version gefunden, die ich bevorzuge.

Mittels der API Funktion GetDefaultCommConfig() kann festgestellt werden, ob ein Com-Port existiert.

Die Funktion dahinter interessiert nicht. Falls die Funktion erfolgreich ist, existiert der Com-Port. Dazu muß auch kein Handle existieren. Deshalb muß die Schittstelle auch nicht geöffnet sein

Ob ein existierende COM-Port verfügbar ist, kann warscheinlich nur wie oben beschrieben mit CreateFile() gemacht werden.

MfG
AS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.06.2004, 11:30 Uhr
rene rosenberger



das hört sich gut an. kannst du da mal ein bsp posten ? müsste ja einfach so in den code geschrieben werden :

Code:
m_Com1 = GetDefaultCommConfig(1);



oder welche parameter will die funktion haben ? und was liefert sie als antwort ?
--
gruesse rene

Dieser Post wurde am 03.06.2004 um 11:31 Uhr von rene rosenberger editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.06.2004, 11:38 Uhr
~AS
Gast


Hallo,

ich müsste erstmal ein Beispiel programmieren. Bisher habe ich nur die 16-Bit Version getestet. Das Beispiel aus der Zeitschrift ist in Delphi.

Die Parameter stehen in der Hilfe.

MfG
AS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.06.2004, 11:50 Uhr
~AS
Gast


Hallo

hier das Beispiel :

Code:
    
CString strPort = "COM1";

COMMCONFIG cfg;
unsigned long lStruct =(unsigned long)sizeof(cfg);
int nExist;

nExist=GetDefaultCommConfig(strPort,&cfg,&lStruct);




Am besten in eine Funktion packen und COM-Port Name übergeben.

MfG
AS
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.06.2004, 11:56 Uhr
~toxic
Gast


hi, warum so umständlich ? machs doch mit CreateFile(...) und GetLastError() entsprechend dem fehlercode giebts den port und er ist frei ( :0 ), oder besetzt (access denied : 5) oder nicht vorhanden ( :2 ).

C++:
void CDeinDlg::TestePorts()
{
    CString name = "";
    for (int i = 1; i < 20; i++) {
        name.Format("COM%d", i);
         HANDLE h_testCom = CreateFile(("\\\\.\\"+name), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0 , NULL);
        if ((h_testCom != INVALID_HANDLE_VALUE) && (!GetLastError()))
            ((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(name);
        name.Format("COM%d ... GetLastError : %d\r\n", i, GetLastError());
        AfxMessageBox(name);

        CloseHandle(h_testCom);
    }
}

--
grusz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.06.2004, 12:29 Uhr
rene rosenberger



merci ! genau das isses !
--
gruesse rene
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: