/ Forside/ Teknologi / Udvikling / VB Scripts / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB Scripts
#NavnPoint
technet 385
MouseKeep.. 300
Dark_Magi.. 250
natmaden 200
Harlekin 200
AntonV 200
EXTERMINA.. 200
gandalf 160
smorch 139
10  strarup 110
Hent lokal ip adresse med vbs script
Fra : fuldfart
Vist : 2352 gange
200 point
Dato : 22-10-03 11:20

Er der en der har en idé til
hvordan jeg kan hente/aflæse ip adressen
på en lokal maskine.
Hvis der er 2 netkort skal den kunne finde begge....

Jeg havde først lavet et der så således ud

Dim WSHShell, RegKey, RegKey2, netkort, IPadr, RegKey3
Set WSHShell = CreateObject("WScript.Shell")
RegKey = "HKLM\software\microsoft\Windows NT\CurrentVersion\NetworkCards\1\ServiceName"
netkort = WSHShell.RegRead(RegKey)
RegKey2 = "HKLM\SYSTEM\ControlSet001\Services\"&netkort&"\Parameters\Tcpip\DHCPIPAddress"
IPadr = WSHShell.RegRead(RegKey2)
WSHShell.RegWrite "HKCU\Software\Microsoft\Internet Explorer\Main\" & "Window Title", "Din IP adresse er: "& IPadr


msgbox "Din ip adresse er: " &IPadr, 0,"IP adresse"

...............
og det virker også....bare ikke hvis der er flere netkort.
Scriptet skal kunne køres uafhængigt af maskine type osv...

Jeg har ikke kunne finde en indbygget funktion,
men det mest rigtige vil vel være at kalde en eller anden api
men hvordan gør jeg nu lige det ???

Mvh
John

 
 
Kommentar
Fra : MouseKeeperX


Dato : 22-10-03 14:12

Jeg kender godt nok ikke lige en indbygget funktion som kan kaldes fra VBS :( Man kan købe sådan noget, men det er jo ikke så interessant regner jeg med?
En ide: Hvad med at spawne et kommandovindue og så tage outputtet fra ipconfig /All - det burde kunne fungere, men er naturligvis ikke så elegant som at at bruge en createobject("DenErDerBareIkke")

mvh
MouseKeeperX

Accepteret svar
Fra : MouseKeeperX

Modtaget 200 point
Dato : 22-10-03 14:50

Lavede lige en lille test med ideen ovenfor - det virker fint. Det burde i hvert fald virke på både dansk, engelsk. Har kun prøvet på w2000 og XP - har ikke lige mulighed for andet.

Dim oFSO, WSHShell
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set WSHShell = CreateObject("WScript.Shell")

Set sTempFldr = oFSO.GetSpecialFolder(TemporaryFolder)
sTmpFN = oFSO.GetTempName
If len(sTempfldr) > 3 Then
   sTempFile = sTempFldr & "\" & sTmpFN
Else
   sTempFile = sTempFldr & sTmpFN
End If


WSHShell.run "%comspec% /c ipconfig /all >" & sTempFile,0,True
Set oTFile = oFSO.OpenTextFile(sTempFile,1,False)

Do While oTFile.AtEndOfStream <> True

   sLine = oTFile.ReadLine
   
If instr(sLine, "IP A") Then
IPline = sLine
wscript.echo(sLine)

End If
Loop

oTFile.Close

oFSO.deletefile(sTempFile)
Set oTFile = Nothing



Kommentar
Fra : fuldfart


Dato : 22-10-03 16:27

hmm... okay...det vil måske kunne virke,
men det er ikke særlig fikst synes jeg....
(...og det virker ikke umiddelbart på NT...men det kunne nok godt justeres lidt til uden de store problemer)

Jeg har kigget lidt på noget der hedder Dynawrap som skulle
gøre een (os) i stand til at kalde en API fra et vbs script, men jeg har endnu ikke haft
tid til at sætte mig ind i det.



Godkendelse af svar
Fra : fuldfart


Dato : 22-10-03 16:30

Tak for svaret MouseKeeperX.
                        

Kommentar
Fra : MouseKeeperX


Dato : 22-10-03 18:44

Jeg er enig at det ikke er så fikst, men det var noget med de forhåndenværende søm... Nu ved jeg ikke i hvilken sammenhæng du skal bruge det, men i nogle sammenhænge kan det være en fordel at der ikke skal installeres en ekstra DLL.
Hvis du går efter dll-modellen skulle du tage et kik på Powertcp - jeg er ikke sikker, men mener at de har noget i den stil.

mvh
M



Kommentar
Fra : MouseKeeperX


Dato : 22-10-03 18:53

Lille krølle på halen - så fandt jeg lige denne stump C-kode på
http://www.codeguru.com/cs_network/getip.html

Det er nemt når der er adgang til winsock

#include <stdio.h>
#include <WinSock.h>
#pragma comment(lib, "wsock32.lib")

int main(int argc, char *argv[])
{
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 1, 1 );
char *ip;

if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
if( gethostname ( name, sizeof(name)) == 0)
{
printf("Host name: %s\n", name);

if((hostinfo = gethostbyname(name)) != NULL)
{
int nCount = 0;
while(hostinfo->h_addr_list[nCount])
{
ip = inet_ntoa (*(struct in_addr *)hostinfo->h_addr_list[nCount]);

printf("IP #%d: %s\n", ++nCount, ip);
}
}
}
return 0;
}




Kommentar
Fra : thygel


Dato : 30-06-04 22:38
Du har følgende muligheder
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.

Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste