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.
[VBA] Verificare se mi trovo in LAN locale
Moderatori:
Paolino,
fairyvilje
16 messaggi
• Pagina 2 di 2 • 1, 2
0
voti
0
voti
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
0
voti
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)
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)
0
voti
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:
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
1
voti
Credo di avere trovato quello che volevo.
Dichiarazione generale:
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:
provata velocemente su Excel, ma spero non ci siano intoppi su Access.
poi tutte le funzioni correlate:
Grazie, accetto commenti e considerazioni. Molto più veloce di fare un tentativo di creazione Dir.
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.
0
voti
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
16 messaggi
• Pagina 2 di 2 • 1, 2
Chi c’è in linea
Visitano il forum: Nessuno e 44 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


