Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[VBA] Verificare se mi trovo in LAN locale

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

0
voti

[11] Re: [VBA] Verificare se mi trovo in LAN locale

Messaggioda Foto Utentemicdisav » 15 gen 2023, 14:52

Confermo: il passo seguente del rilascio mouse-dx della parte bassa della figura precedente.
Anzi, ho provato a rinominare ora; mentre la connessione è in uso ...e si può cambiare.
Solo per vedere se in primo PC è connesso, poi posso trasferire a un secondo PC connesso in rete, sottointeso, con gli strumenti adatti (che non fanno perte della discusione fatta).
O, con comandi appositi se voglio trasferire sullo stesso PC a cui sto scrivendo.
Il quesito cosi lo intesi.
Almeno, in Windows 7.

Saluti, Michele.
Avatar utente
Foto Utentemicdisav
271 7
Frequentatore
Frequentatore
 
Messaggi: 147
Iscritto il: 17 giu 2020, 16:40

0
voti

[12] Re: [VBA] Verificare se mi trovo in LAN locale

Messaggioda Foto Utentealev » 15 gen 2023, 15:56

Allora, non capisco come sia possibile (con il tuo metodo) determinare automaticamente se il PC è nella LAN di casa oppure dell'ufficio (edit), considerato che il nome dell'interfaccia rimane costante e non cambia automaticamente
Avatar utente
Foto Utentealev
5.995 2 9 12
free expert
 
Messaggi: 6284
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

0
voti

[13] Re: [VBA] Verificare se mi trovo in LAN locale

Messaggioda Foto Utentemicdisav » 15 gen 2023, 16:41

Appunto il rinomina ha la sua importanza: per esempio rinomino una "LAN_casa" e l'altra "LAN_ufficio", cosi dalla scansione dell'output di "netsc" su uno dei PC, posso programmare di inviare all'altro o a se stesso. (con strumenti diversi, ovviamente)
I nomi LAN (che per default sono uguali) cambiati, forniscono la discriminante per compiere l'azione corretta.
(da programma, perché comunque, l'operatore lo sa)
Avatar utente
Foto Utentemicdisav
271 7
Frequentatore
Frequentatore
 
Messaggi: 147
Iscritto il: 17 giu 2020, 16:40

0
voti

[14] Re: [VBA] Verificare se mi trovo in LAN locale

Messaggioda Foto UtenteBobo360 » 15 gen 2023, 18:06

micdisav ha scritto:Buonasera,
evitando gli IP address e ping ("meno invasivo" e molto + semplice!):
1) da VB, lanciare il cmd (tipo ShellExecute(...) con API32):

netsh interface show interface >quali_interfacce.txt

che produce il file output "quali_interfacce.txt" (dove vuoi tu, poi lo cancelli o mantieni traccia di ciò che hai fatto)

2) con VB leggi "quali_interfacce.txt"; dalla lettura contenuto colonna "Nome interfaccia", puoi risalire agevolmente alla postazione LAVORO o CASA del PC in cui ti trovi.
A tal punto, sai dove è il PC che invoca e, agisci di conseguenza tramite istruzioni VB.

2bis) se si ritiene opportuno; cioè incorrono ambiguità tra i 2 siti, si può rinominare l'interfaccia (da "connessioni di rete" di Windows)

Saluti, Michele.

Allego sia "quali_interfacce.txt" che i contenuti di 3 finestre di Windows attinenti:
CMD_NetshInterfaceShowInterface+connessioni.png

quali_interfacce.zip


Grazie, questa è una strada pure da percorrere.
Io invece provato la strada con IP e scoprire il MACAddress e forse mi sebra più efficace al mio scopo, ma poi vorrò provare questa tua strada. Grazie ;-)
Avatar utente
Foto UtenteBobo360
30 4
Frequentatore
Frequentatore
 
Messaggi: 153
Iscritto il: 12 nov 2008, 12:55

1
voti

[15] Re: [VBA] Verificare se mi trovo in LAN locale

Messaggioda Foto UtenteBobo360 » 15 gen 2023, 18:14

Credo di avere trovato quello che volevo.
Dichiarazione generale:
Codice: Seleziona tutto
Option Explicit

Private Const NO_ERROR = 0

Private Declare PtrSafe Function inet_addr Lib "wsock32.dll" _
  (ByVal s As String) As Long

Private Declare PtrSafe Function SendARP Lib "iphlpapi.dll" _
  (ByVal DestIP As Long, _
   ByVal SrcIP As Long, _
   pMacAddr As Long, _
   PhyAddrLen As Long) As Long

Private Declare PtrSafe Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
  (dst As Any, _
   src As Any, _
   ByVal bcount As Long)

Ho dovuto usare la funzione PtrSafe per poter usare Declare nel mio sistema, ma sembra fuonzionare.



Poi la mia funzione che in questo esempio faccio partitre con un tasto, ma poi usero un automatico:
Codice: Seleziona tutto
Private Sub MacAddress_Click()
Dim gSh As Worksheet, i As Integer
   
'Get All Network oAdapterConf Configuration Details
Set gSh = ThisWorkbook.Sheets(1)
gSh.Cells(1, 1) = "IP Scanner"
gSh.Cells(1, 2) = "MACAddress"
   
Dim sRemoteMacAddress As String
   
If Len(gSh.Cells(2, 1)) > 0 Then
   
    If GetRemoteMACAddress(gSh.Cells(2, 1), sRemoteMacAddress, "-") Then
        gSh.Cells(2, 2) = sRemoteMacAddress
    Else
        gSh.Cells(2, 2) = "(Impossibile trovare MAC Address)"
    End If
     
End If
   
End Sub

provata velocemente su Excel, ma spero non ci siano intoppi su Access.

poi tutte le funzioni correlate:
Codice: Seleziona tutto
Private Function GetRemoteMACAddress(ByVal sRemoteIP As String, _
                                     sRemoteMacAddress As String, _
                                     sDelimiter As String) As Boolean

   Dim dwRemoteIP As Long
   Dim pMacAddr As Long
   Dim bpMacAddr() As Byte
   Dim PhyAddrLen As Long
   
  'convert the string IP into
  'an unsigned long value containing
  'a suitable binary representation
  'of the Internet address given
   dwRemoteIP = ConvertIPtoLong(sRemoteIP)

   If dwRemoteIP <> 0 Then
   
     'must set this up first!
      PhyAddrLen = 6
   
    'assume failure
     GetRemoteMACAddress = False
     
     'retrieve the remote MAC address
      If SendARP(dwRemoteIP, 0&, pMacAddr, PhyAddrLen) = NO_ERROR Then
     
         If (pMacAddr <> 0) And (PhyAddrLen <> 0) Then
     
           'returned value is a long pointer
           'to the MAC address, so copy data
           'to a byte array
            ReDim bpMacAddr(0 To PhyAddrLen - 1)
            CopyMemory bpMacAddr(0), pMacAddr, ByVal PhyAddrLen
           
           'convert the byte array to a string
           'and return success
            sRemoteMacAddress = MakeMacAddress(bpMacAddr(), sDelimiter)
            GetRemoteMACAddress = True
           
         End If 'pMacAddr

      End If  'SendARP
     
   End If  'dwRemoteIP
     
End Function

Private Function ConvertIPtoLong(sIpAddress) As Long

   ConvertIPtoLong = inet_addr(sIpAddress)

End Function

Private Function MakeMacAddress(b() As Byte, sDelim As String) As String

   Dim cnt As Long
   Dim buff As String
   
   On Local Error GoTo MakeMac_error

  'so far, MAC addresses are
  'exactly 6 segments in size (0-5)
   If UBound(b) = 5 Then
   
     'concatenate the first five values
     'together and separate with the
     'delimiter char
      For cnt = 0 To 4
         buff = buff & Right$("00" & Hex(b(cnt)), 2) & sDelim
      Next
     
     'and append the last value
      buff = buff & Right$("00" & Hex(b(5)), 2)
         
   End If  'UBound(b)
   
   MakeMacAddress = buff
   
MakeMac_exit:
   Exit Function
   
MakeMac_error:
   MakeMacAddress = "(error building MAC address)"
   Resume MakeMac_exit
   
End Function


Grazie, accetto commenti e considerazioni. Molto più veloce di fare un tentativo di creazione Dir. :D
Avatar utente
Foto UtenteBobo360
30 4
Frequentatore
Frequentatore
 
Messaggi: 153
Iscritto il: 12 nov 2008, 12:55

0
voti

[16] Re: [VBA] Verificare se mi trovo in LAN locale

Messaggioda Foto Utentealev » 15 gen 2023, 18:33

micdisav ha scritto:Appunto il rinomina ha la sua importanza: per esempio rinomino una "LAN_casa" e l'altra "LAN_ufficio", cosi dalla scansione dell'output di "netsc" su uno dei PC, posso programmare di inviare all'altro o a se stesso. (con strumenti diversi, ovviamente)
I nomi LAN (che per default sono uguali) cambiati, forniscono la discriminante per compiere l'azione corretta.
(da programma, perché comunque, l'operatore lo sa)

Scusa, ma se il PC ha una sola interfaccia, mi speghi il senso di rinominarla manualmente?
Non mi pare una soluzione che soddisfi la richiesta del thread
Avatar utente
Foto Utentealev
5.995 2 9 12
free expert
 
Messaggi: 6284
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

Precedente

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti