VB6 - Anslutningsbara comportar?

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
Cenorpa
Inlägg: 737
Blev medlem: 11 juli 2005, 20:58:03
Ort: Stockholm | Borlänge
Kontakt:

VB6 - Anslutningsbara comportar?

Inlägg av Cenorpa »

Det jag behöver göra är altså något som kan kolla om en comport går att använda och ansluta till, kanske låter lite konstigt men ni förstår säkert.

Om jag har en dropdown-list med 10 comportar i , com1 - com10 så vill jag att dom jag kan använda och ansluta ska vara gröna och resten ska vara röda och spärras från anslutningsförsök från användaren.

Utan denna check så stängs programet om man försöker ansluta en felaktig port och detta vil jag komma undan.

Hittade denna kod på nätet men resultatet är inte det jag är ute efter, av denna får jag fram hur många comportar som finns installerade men inte vilka som jag kan använda.

Kod: Markera allt


Dim count As Integer, i As Integer

For i = 1 To 16
    If IsComPortAvailable(i) Then count = count + 1
Next
MsgBox "Found " & count & " serial ports"

'******************Funktionen:**************

Function IsComPortAvailable(ByVal portNum As Integer) As Boolean
    Dim fnum As Integer
    
    On Error Resume Next
    fnum = FreeFile
    Open "COM" & CStr(portNum) For Binary Shared As #fnum
    If Err = 0 Then
        Close #fnum
        IsComPortAvailable = True
    End If
End Function

Hoppas nån kan ge mig lite hjälp här.

[edit]
Oj, jag tror inte jag kollade igenom koden riktigt ska testa att ändra lite, då den såg ganska användbar ut...

[edit2]
Såg att detta var precis den koden jag behövde som grund, får skylla på att jag var lite trött :)

Men jag låter tråden vara kvar ifall någon annan finner informationen användbar.

[edit3]
Problemet kvarstår, har fortfarande samma problem som från första början, koden talar bara om "installerade" comportar inte dom portarna som går att använda.

Hjälp sökes forfarande.
Maalobs
Inlägg: 1304
Blev medlem: 3 februari 2005, 14:35:15
Ort: Stockholm

Inlägg av Maalobs »

När du har fått din lista av tillgängliga portar, testa då att öppna dem en efter en för att se vilka som är lediga.
Användarvisningsbild
Icecap
Inlägg: 26632
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Nu kör jag inte VB men BCB6 och där gör jag ung. samma sak vid att öppna dom en efter en och kolla om de finns och om de är upptagna (felkod vid redan-tagit), jag stänger dom såklart direkt jag har kollat.
Användarvisningsbild
ensten
EF Sponsor
Inlägg: 3759
Blev medlem: 19 oktober 2004, 15:55:20
Ort: Hudiksvall

Inlägg av ensten »

Jag höll på med samma sak för ngn vecka sedan i VB6 och det är som föregående talare säger. Man få öppna och kolla dom en och en.
Användarvisningsbild
Cenorpa
Inlägg: 737
Blev medlem: 11 juli 2005, 20:58:03
Ort: Stockholm | Borlänge
Kontakt:

Inlägg av Cenorpa »

Men om man öppnar en port som inte är tillgänglig så uppstår ju nått fel och programmet avslutas, hur har ni gjort för att undvika det? Det är väl själva felhanteringen jag syftar på.

Skulle vara bra med lite kod exempel.
Användarvisningsbild
ensten
EF Sponsor
Inlägg: 3759
Blev medlem: 19 oktober 2004, 15:55:20
Ort: Hudiksvall

Inlägg av ensten »

Ok här kommer en snutt, men du får själv räkna ut hur den funkar, jag har inte tid att suporta den just nu.

Kod: Markera allt

On Error GoTo Err
MSComm1.CommPort = Text1.Text
MSComm1.PortOpen = True
MSComm1.PortOpen = False
msg = MsgBox("Porten existerar och fungerar", vbInformation, "Fungerande port")
Command2.Enabled = True

GoTo Slut
Err:
msg = MsgBox("Porten existerar inte, eller är upptagen", vbCritical, "Felaktigt portval")
Text1.Text = ""
Text1.SetFocus
Command2.Enabled = False

Slut:
Man kan ju "trappa" det korrekta felmeddelandet om man vill ... så blir det snyggare.

EDIT> Fixade stavning
Användarvisningsbild
Cenorpa
Inlägg: 737
Blev medlem: 11 juli 2005, 20:58:03
Ort: Stockholm | Borlänge
Kontakt:

Inlägg av Cenorpa »

Tack så mycket!
Precis vad jag behövde.
pheer
EF Sponsor
Inlägg: 1283
Blev medlem: 16 januari 2005, 18:05:21

Inlägg av pheer »

Här är mitt bidrag på samma tema:

Kod: Markera allt

Private Sub EnumComPorts()

On Error GoTo errHandler

Dim comm As MSComm, lIter As Long, bOk As Boolean

    ' Create mscomm object
    Set comm = New MSComm
    
    'Enumerate comports
    For lIter = 1 To 10
        bOk = True
        comm.CommPort = lIter
        comm.PortOpen = True
        If bOk = True Then cboCOMPorts.AddItem "COM" & Str(lIter)
        If comm.PortOpen = True Then comm.PortOpen = False
    Next lIter
    
    Set comm = Nothing
     
errHandler:
    Select Case Err.Number
        Case 0
        Case 8002 'invalid portnumber
            bOk = False
            Resume Next
        Case 8005 'port already open
            Resume Next
        Case Else
            MsgBox "EnumComPorts()" & vbCrLf & "Error" & Err.Number & ": " & Err.Description & ", " & Err.Source
            Resume Next
    End Select
End Sub
Användarvisningsbild
Cenorpa
Inlägg: 737
Blev medlem: 11 juli 2005, 20:58:03
Ort: Stockholm | Borlänge
Kontakt:

Inlägg av Cenorpa »

Tack så mycket Pheer!
Din kod fungerar finfint, bra att kunna ta reda på vad det är för fel på ett speciellt portnummer.
Skriv svar