|
|
 | 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 :)
| |
|
|