Avatar billede fldkdla Nybegynder
08. februar 2008 - 05:26 Der er 14 kommentarer og
1 løsning

MAC adresse fra WMI

Hej

Jeg skal have alle de mac adresser der er på PC'en men får kun den første.

Min kode:
Function GetMacAddress() As String
Dim brugerid As String
        brugerid = LoginForm1.txtusername.Text
        Try
            Dim strMACAddress As String = ""
            '
            ' Create the query, in SQL syntax, to retrieve the properties from
            ' the active Network Adapter.
            '
            Dim strQuery As String = _
                "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True"

            '
            ' Create a ManagementObjectSearcher object passing in the query to run.
            '
            Dim query As ManagementObjectSearcher = New ManagementObjectSearcher(strQuery)

            '
            ' Create a ManagementObjectCollection assigning it the results of the query.

            Dim queryCollection As ManagementObjectCollection = query.Get()

            '
            ' Loop through the results extracting the MAC Address.
            '
            Dim mo As ManagementObject

            For Each mo In queryCollection
                strMACAddress = mo("MacAddress").ToString()
                DatabaseForbindelse("Insert into mac(brugerid,mac) values('" & brugerid & "','" & strMACAddress & "')")
                'Exit For
            Next

            Return strMACAddress

        Catch ex As Exception
            Return "Fejl"
        End Try

End function

Nogen der ved hvordan jeg kan gøre det ?
Avatar billede nielle Nybegynder
08. februar 2008 - 08:17 #1
Din kode ser rigtigt nok ud. Måske udtrækker den virkelig kun een MAC.

Det kan du jo tjekke efter ved at kigge på query.Count.

Nu har jeg godt nok ikke lige nærlæst dokumentationen på Win32_NetworkAdapterConfiguration, men hvad får du ud hvis du sletter WHERE-delen af din SELECT?
Avatar billede powerpunk Nybegynder
08. februar 2008 - 08:26 #2
Jeg har en lignende funktion som ser sådan her ud:

  List<string> macs = new List<string>();
  ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");

  ManagementObjectCollection managementObjects = mc.GetInstances();

  foreach (ManagementObject objMO in managementObjects)
  {
    if ((bool)objMO["IPEnabled"] && objMO["MacAddress"] != null)
      macs.Add(objMO["MacAddress"].ToString());
  }
Avatar billede powerpunk Nybegynder
08. februar 2008 - 08:27 #3
Den trækker i hvert fald de samme mac adresser ud som GETMAC command-line funktionen...
Avatar billede powerpunk Nybegynder
08. februar 2008 - 08:34 #4
Forresten returnerer din funktion jo også kun éen streng

  Return strMACAddress

Men du skulle gerne have fået dem alle sammen smidt ind i din

  DatabaseForbindelse("Insert into mac(brugerid,mac) values('" & brugerid & "','" & strMACAddress & "')")
Avatar billede fldkdla Nybegynder
08. februar 2008 - 15:20 #5
powerpunk >

Det kode du bruger et det Visual Basic.NET ?

Og hvordan får du så de linier ud af din streng igen ?
Avatar billede tjacob Juniormester
08. februar 2008 - 17:00 #6
powerpunk skriver i C#
Avatar billede powerpunk Nybegynder
11. februar 2008 - 08:27 #7
oops... arbejdskade... :o)

objektet 'macs' i min kodestump er en generisk liste (C#: List<string>, VB.NET: List(Of T))

I foreach loopet tilføjer jeg en adresse af gangen til listen.

Du gør jo også et eller andet i dit foreach loop, men den streng du returnerer bliver sat for hvert loop. Så det er vel faktisk den sidste streng du returnerer.

Hvis du vil have funktionen til at returnere alle MAC adresser ville det give mening at omdefinere funktionen som

  Function GetMacAddress() As List(Of String)

og

  Dim strMACAddress As New List(Of String)
Avatar billede powerpunk Nybegynder
11. februar 2008 - 08:29 #8
Og selvfølgelig

  For Each mo In queryCollection
    strMACAddress.Add(mo("MacAddress").ToString())
Avatar billede nielle Nybegynder
18. februar 2008 - 18:28 #9
Er du kiommet vidre med denne her?
Avatar billede fldkdla Nybegynder
19. februar 2008 - 19:38 #10
Ja, men jeg ved ikke om det virker, hvordan får jeg dataen ud af dem list igen ?

Hvis jeg nu gerne vil sætte det ind i en database ?

Med f.eks denne funktion:  DatabaseForbindelse("Insert into mac(brugerid,mac) values('" & brugerid & "','" & strMACAddress & "')")
Avatar billede powerpunk Nybegynder
20. februar 2008 - 08:24 #11
Enten skal du loope igennem listen bagefter og sætte dem ind, eller også skal du simpelthen tilføje dem både til listen og databasen i samme hug:

  Dim currentAddress As string
  For Each mo In queryCollection
    currentAddress = mo("MacAddress").ToString()
    strMACAddress.Add(currentAddress) 'Tilføj til liste
    DatabaseForbindelse("Insert into mac(brugerid,mac) values('" & brugerid & "','" & currentAddress & "')") 'Indsæt i DB
  Next
Avatar billede nielle Nybegynder
03. marts 2008 - 17:30 #12
Har du fået løst dit problem?
Avatar billede fldkdla Nybegynder
24. september 2008 - 21:47 #13
.
Avatar billede nielle Nybegynder
25. september 2008 - 17:44 #14
Nå da ... fik du løst dit problem eller ej?
Avatar billede fldkdla Nybegynder
25. september 2008 - 18:07 #15
Nej, jeg lavede det med ip adresser istedet for.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester