/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
autodetekte comporte - kan man det ?
Fra : Esben Piltoft


Dato : 15-06-02 16:11

Nogen der ved om der er en måde man kan "spørge" windows om hvilke
comporte der er installeret i ens PC - som den kan se - (og så f. eks.
få et svar der kan oversættes til: com1, com2).

Har ledt efter en get-et-eller-andet i "Win32 Programmer's Reference"
men kan ikke finde noget der ser ud til at kunne bruges.

På forhånd tak.
~~~~~~~~~~~~~
Esben Piltoft (med Borland C++ Builder 6 (trial) og en "Win32
Programmer's Reference" fra Delphi 5).

 
 
Niels Erik Danielsen (15-06-2002)
Kommentar
Fra : Niels Erik Danielsen


Dato : 15-06-02 22:29


"Esben Piltoft" <synonym@sol.dk> wrote in message
news:5aef858a.0206150711.38eb805d@posting.google.com...
> Nogen der ved om der er en måde man kan "spørge" windows om hvilke
> comporte der er installeret i ens PC - som den kan se - (og så f. eks.
> få et svar der kan oversættes til: com1, com2).
>
> Har ledt efter en get-et-eller-andet i "Win32 Programmer's Reference"
> men kan ikke finde noget der ser ud til at kunne bruges.
>
> På forhånd tak.
> ~~~~~~~~~~~~~
> Esben Piltoft (med Borland C++ Builder 6 (trial) og en "Win32
> Programmer's Reference" fra Delphi 5).

Jeg har lige fliket noget sammen der giver følgende output på min maskine:

COM1 could not be opened: Access is denied.
COM2 opened
COM3 could not be opened: The system cannot find the file specified.
COM4 could not be opened: The system cannot find the file specified.
COM5 could not be opened: The system cannot find the file specified.
COM6 could not be opened: The system cannot find the file specified.
COM7 could not be opened: The system cannot find the file specified.
COM8 could not be opened: The system cannot find the file specified.
COM9 could not be opened: The system cannot find the file specified.

På min maskine findes COM1 og COM2, men COM1 var i brug af et andet program.

Kode:

#include "windows.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
char szPortName[20];
HANDLE m_SerialPort;

for(int i=1;i<10;i++)
{
sprintf(szPortName,"COM%i",i);
m_SerialPort=CreateFile(szPortName, // pointer to name of the file
GENERIC_READ | GENERIC_WRITE, // access (read-write) mode
0, // share mode
0, // pointer to security attributes
OPEN_EXISTING , // how to create
0, // file attributes
0); // handle to file with attributes to copy

if(m_SerialPort==INVALID_HANDLE_VALUE)
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), //
Default language
(LPTSTR) &lpMsgBuf,0,NULL );

printf("%s could not be opened: %s",szPortName,lpMsgBuf);
LocalFree( lpMsgBuf );
}
else
{
printf("%s opened \n",szPortName);
CloseHandle(m_SerialPort);
}


}
return 0;

}








Leo Havmøller (17-06-2002)
Kommentar
Fra : Leo Havmøller


Dato : 17-06-02 06:00

> sprintf(szPortName,"COM%i",i);

Lige en note: Hvis dette ændres til det mere generelle "\\\\.\\COM%i" vil
det også virke for port numre større end 9.

Leo Havmøller.



glenn007 (09-10-2002)
Kommentar
Fra : glenn007


Dato : 09-10-02 21:26

Jeg bruger dev c++ - kan det være rigtigt at den kode ikke virker når
jeg compiler med denne. Jeg ville gerne lige have testet mine comporte
med din fikse program

den giver mig en liste af fejl. så som parse errors ect

Glenn

--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"


b3nny pede (10-10-2002)
Kommentar
Fra : b3nny pede


Dato : 10-10-02 17:10

HANDLE hCom;
OVERLAPPED o;
BOOL fSuccess;
DWORD dwEvtMask;

hCom = CreateFile( "COM1",
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // no security attributes
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL
);

if (hCom == INVALID_HANDLE_VALUE)
{
// Handle the error.
}

// Set the event mask.

fSuccess = SetCommMask(hCom, EV_CTS | EV_DSR);

if (!fSuccess)
{
// Handle the error.
}

// Create an event object for use in WaitCommEvent.

o.hEvent = CreateEvent(
NULL, // no security attributes
FALSE, // auto reset event
FALSE, // not signaled
NULL // no name
);

assert(o.hEvent);

if (WaitCommEvent(hCom, &dwEvtMask, &o))
{
if (dwEvtMask & EV_DSR)
{
// To do.
}

if (dwEvtMask & EV_CTS)
{
// To do.
}
}

og bliv ved til du ikke kan forestille dig flere porte :)

"glenn007" <glenn007.news@kandu.dk> wrote in message
news:190p9.87296$Qk5.3976901@news010.worldonline.dk...
> Jeg bruger dev c++ - kan det være rigtigt at den kode ikke virker når
> jeg compiler med denne. Jeg ville gerne lige have testet mine comporte
> med din fikse program
>
> den giver mig en liste af fejl. så som parse errors ect
>
> Glenn
>
> --
> Leveret af:
> http://www.kandu.dk/
> "Vejen til en hurtig løsning"
>



Leo Havmøller (11-10-2002)
Kommentar
Fra : Leo Havmøller


Dato : 11-10-02 09:57

> hCom = CreateFile( "COM1",

Virker kun for COM1..COM9. Brug \\\\.\\COMnn istedet for.

Leo Havmøller.



R. A. Larsen (15-06-2002)
Kommentar
Fra : R. A. Larsen


Dato : 15-06-02 23:04

synonym@sol.dk (Esben Piltoft) wrote:
>
> Nogen der ved om der er en måde man kan "spørge" windows om hvilke
> comporte der er installeret i ens PC - som den kan se - (og så f. eks.
> få et svar der kan oversættes til: com1, com2).

Prøv (utestet):
void GetSerialPortsList(LPSTR szSymbol);

GetSerialPortsList sets the specified symbol to a list of all serial
ports (that is, "COM1","COM2", and so on).

MVH, René
--
Using Virtual Access
http://www.vamail.com


Esben Piltoft (16-06-2002)
Kommentar
Fra : Esben Piltoft


Dato : 16-06-02 08:05

Mange tak for de svar jeg har fået.

Det er imponerende så hurtig man får svar i denne nyhedsgruppe :)

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste