|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Oct 2005
Messaggi: 5
|
Variabili di sistema
Ciao a chi stà leggendo, non sono un assiduo frequentatore del forum.
Mi chiedevo come accedere alle variabili di sistema. Ciò che mi serve in particolare é l'elenco delle porte di comunicazione presenti sul computer in uso ed eventuali dati correlati. Grazie! Renzo |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non è una cosa molto semplice... Bisogna ravanare con le API... Forse si può fare qualcosa andando a cercare nel registro di sistema...
Per porte di comunicazione intedi le COM e le LPT ? |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7027
|
prima che la discussione diventi un delirio di niubbaggine
![]() e leggere il registro francamente lo sconsiglio, chissà che macello che ci sta :| magari invece una buona idea sarebbe provare le SetupDi, posto che io non le conosco minimamente ![]() |
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Quote:
![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Non so se possa essere l'ambiente adatto ma con .NET 2.0 c'è l'enumerazione di tutte le porte usando System.IO.Ports.
Ma in ogni caso non si può provare ad aprirle ed eventualmente a trappare l'errore se la com non fosse presente? Io almeno prima facevo così per cercare un dispositivo che poteva essere su una qualunque porta (anche l'adattatore USB/RS232 che a volte si installa sulla COM10) |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Al momento sono riuscito ad enumerare le porte LPT/COM. Ecco il codice "C" (nota: linkare con setupapi.lib!):
Codice:
#define STRICT #include <windows.h> #include <guiddef.h> #include <setupapi.h> #include <stdio.h> GUID g_Guid_Device_Ports = { 0x4d36e978L, 0xe325, 0x11ce, { 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18 } }; int main (void) { HDEVINFO hdi; SP_DEVINFO_DATA did; DWORD dwIdx; CHAR szBuf[512]; DWORD dwSize; hdi = SetupDiGetClassDevs (&g_Guid_Device_Ports, NULL, NULL, DIGCF_PRESENT); if (hdi != INVALID_HANDLE_VALUE) { for (dwIdx=0;;dwIdx++) { ZeroMemory (&did, sizeof (SP_DEVINFO_DATA)); did.cbSize = sizeof (SP_DEVINFO_DATA); if (SetupDiEnumDeviceInfo (hdi, dwIdx, &did)) { if (SetupDiGetDeviceRegistryProperty (hdi, &did, SPDRP_FRIENDLYNAME, NULL, (PBYTE) szBuf, sizeof (szBuf), &dwSize)) printf ("Descrizione: %s\n", szBuf); if (SetupDiGetDeviceRegistryProperty (hdi, &did, SPDRP_SERVICE, NULL, (PBYTE) szBuf, sizeof (szBuf), &dwSize)) printf ("Servizio: %s\n", szBuf); printf ("\n"); } else { if (GetLastError () == ERROR_NO_MORE_ITEMS) break; } } SetupDiDestroyDeviceInfoList (hdi); } return 0; } Descrizione: Porta stampante ECP (LPT1) Servizio: Parport Descrizione: Porta di comunicazione (COM1) Servizio: Serial Descrizione: Porta di comunicazione (COM2) Servizio: Serial Descrizione: MAT USB-to-Serial Bridge (COM3) Servizio: Ser2pl Non sono ancora riuscito a capire se è possibile avere direttamente la stringa "COMx" o "LPTx".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Esiste anche l'API EnumPorts... L'ho vista in un programma VB che invia SMS che ho qui... Se volete incollo il codice...
http://msdn.microsoft.com/library/de...tspol_994j.asp |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Anzi, ecco qui: http://www.answers.com/topic/enumports
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Ho scritto questo codice "C" di prova: Codice:
#define STRICT #include <windows.h> #include <stdio.h> int main (void) { PORT_INFO_1 *ppi; DWORD dwSize, dwCount, dwIdx; BOOL bRet; bRet = EnumPorts (NULL, 1, NULL, 0, &dwSize, &dwCount); if (bRet == FALSE && GetLastError () == ERROR_INSUFFICIENT_BUFFER) { ppi = (PORT_INFO_1*) GlobalAlloc (GPTR, dwSize); if (ppi != NULL) { bRet = EnumPorts (NULL, 1, (LPBYTE) ppi, dwSize, &dwSize, &dwCount); if (bRet) { for (dwIdx=0; dwIdx<dwCount; dwIdx++) printf ("Nome: %s\n", ppi[dwIdx].pName); } GlobalFree ((HGLOBAL) ppi); } } return 0; } Nome: MSFAX: Nome: PDFCreator: Nome: OLFModem Nome: COM1: Nome: COM2: Nome: COM3: Nome: COM4: Nome: FILE: Nome: LPT1: Nome: LPT2: Nome: LPT3: Nome: DocuCom PDF Port: Nome: HPLaserJet1022nw Nome: CPW2: Il che, forse, non è molto utile anche perché, ad esempio, COM4 fisicamente non esiste sul mio PC. ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:26.