w-lan signalstärke über wmi auslesen



  • Moin Moin,

    ich hänge aktuell an einem Problem, welches mich langsam ziemlich nervt.

    ich möchte eine w-lan antenne automatisch ausrichten lassen, um den bestmöglichsten empfang zu bekommen. dazu muss ich natürlich die aktuelle signalstärke auswerten können.

    nun habe ich mich etwas in wmi eingelesen und folgenden code bisher konstruiert:

    String^ GetSignal()
    { bool test;
    ObjectQuery^ Oq = gcnew ObjectQuery("SELECT * FROM WLAN_BSS_ENTRY");
    ManagementScope^ Ms = gcnew ManagementScope("root/CIMV2");
    ManagementObjectSearcher^ query = gcnew ManagementObjectSearcher(Ms, Oq);
    ConnectionOptions^ Co = gcnew ConnectionOptions;
    ManagementObjectCollection^ Qc = query->Get();
    String^ outp="";
    ManagementObjectCollection::ManagementObjectEnumerator^ nummerator;
    ManagementBaseObject^ object;
    nummerator = Qc->GetEnumerator();

    while(nummerator->MoveNext())
    {
    object = nummerator->Current;
    //outp = object->GetPropertyValue("Ndis80211ReceivedSignalStrength")->ToString();
    //MessageBox::Show(object->GetPropertyValue("RSSI")->ToString ());
    }

    return outp;
    }

    Nun bekomme ich beim Ausführen folgenden Fehler bei der while schleife und zwar bevor der Block beginnt:

    Eine nicht behandelte Ausnahme des Typs "System.Management.ManagementException" ist in System.Management.dll aufgetreten.

    Zusätzliche Informationen: Ungültige Klasse

    jemand einen Tip? Ich währe sehr dankbar.

    mfg
    onomo



  • String^ GetSignal() 
    { 
       bool test; 
       ObjectQuery^ Oq = gcnew ObjectQuery("SELECT * FROM WLAN_BSS_ENTRY"); 
       ManagementScope^ Ms = gcnew ManagementScope("root/CIMV2"); 
       ManagementObjectSearcher^ query = gcnew ManagementObjectSearcher(Ms, Oq); 
       ConnectionOptions^ Co = gcnew ConnectionOptions; 
       ManagementObjectCollection^ Qc = query->Get(); 
       String^ outp=""; 
       ManagementObjectCollection::ManagementObjectEnumerator^ nummerator; 
       ManagementBaseObject^ object; 
       nummerator = Qc->GetEnumerator(); 
    
    while(nummerator->MoveNext()) 
    { 
       object = nummerator->Current; 
       //outp = object->GetPropertyValue("Ndis80211ReceivedSignalStrength")->ToString(); 
       //MessageBox::Show(object->GetPropertyValue("RSSI")->ToString ()); 
    } 
    
       return outp; 
    }
    


  • Was für einen Fehler gibt die Innere Exception aus?

    Fahr mal mit dem Debugger durch...



  • ObjectQuery^ Oq = gcnew ObjectQuery("SELECT * FROM WLAN_BSS_ENTRY");
    ManagementScope^ Ms = gcnew ManagementScope("root/CIMV2");
    ManagementObjectSearcher^ query = gcnew ManagementObjectSearcher(Ms, Oq);

    da scheint der hund begraben zu sein (ich sollte wieder anfangen mit haltepunkten zu debuggen ^^). query bekommt nichts, ich vermute das evtl. das objectquery falsch ist.

    ich will hier: http://msdn.microsoft.com/en-us/library/ms706839(VS.85).aspx
    den Punkt RSSI auslesen. kann es sein, dass die Abfrage falsch ist? Ich bin mit dem Thema nicht sehr vertraut.





  • Knuddlbaer schrieb:

    CodeTags!

    http://www.microsoft.com/downloads/details.aspx?familyid=89e6b1e5-f66c-4a4d-933b-46222bb01eb0&displaylang=en

    das tool will dotnet framework 1.1.4322, bekomme ich nicht zum laufen.

    inwiefern hätte es mir den helfen können? aus der toolbeschreibung war es für mich erstmal nicht ersichtlich





  • Knuddlbaer schrieb:

    http://www.microsoft.com/downloads/details.aspx?familyid=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en

    danke für den link. muss das jetzt mal ausgiebig testen.

    bei dem code für die msndis80211...receivedsignalstrength abfragen kommt nämlich immer ein fehlercode bei der ausführung von wegen nicht unterstützt. ich hoffe der treiber vom w-lan device ist wmi kompatibel



  • onomo schrieb:

    Knuddlbaer schrieb:

    http://www.microsoft.com/downloads/details.aspx?familyid=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en

    danke für den link. muss das jetzt mal ausgiebig testen.

    Ist aber nix was Du suchst...
    Das ist ein .NET XSD Sample Code Generator.

    Spaß von Knuddy



  • Den Link den Du Zitierst hast Du aber auch mal angeklickt und mal geschaut ?

    The WMI Code Creator tool generates code that uses WMI to obtain management information or perform management tasks

    Wenn es Dir nicht weiterhelfen würde dann schweig. Ich denke onomo wird aus dem Tool die Information die gesucht wird schon rauspusseln können.



  • onomo ist auf jeden fall jetzt noch mehr verwirrt.

    Ndis80211ReceivedSignalStrength scheint es unter windows vista nicht mehr zu geben.

    allerdings wird im WMI Code Creator unter "Namespaces on this Computer"
    bei root/wmi genau dieser Eintrag dennoch angezeigt Oo??

    Woanders habe ich nun gelesen, ich müsse den Wert RSSI aus dem Struct WLAN_BSS_ENTRY auslesen.

    So langsam brummt mir ganz schön der Kopf.

    Bei Windows XP ist es mit C# ein einfacher 5 Zeiler, bei Vista scheints leider nicht so easy zu gehen 😕



  • also jetzt hab ich es sicher, dass der key unter Vista nicht mehr existiert 😞

    für vista gibts einen Wert wlan_intf_opcode_rssi der über WlanQueryInterface abfragbar sein müsste....kennt sich jemand damit aus?



  • sodele, habe das vista sdk und das vs 2005 sdk installiert.
    war notwendig um die wlanapi.dll/h/lib zu bekommen.

    jetzt habe ich das problem, dass beim compilieren die wlanapi.h nicht gefunden wird. habe in den projekteigentschaften unter verweise -> weitere verweissuchpfade
    die beiden pfade zu den libs und includes des vista sdk gesetzt.

    compilierfehler: Fehler 1 fatal error C1083: Datei (Include) kann nicht geöffnet werden: "Wlanapi.h": No such file or directory

    jemand eine idee??

    grüsse
    onomo

    ps: wenn ich das mal fertig bekommen sollte, poste ich die lösung hier. ist ja ein krampf zu diesem thema was ordentliches zu finden 😡



  • bin wieder ein schritt weiter, und habe neue fehler 😕

    nachdem ich das vista sdk installiert und das integration tool angewendet habe, hat der kompiler auch die wlanapi.h gefunden. allerdings habe ich jetzt 233 fehler durch andere header dateien 😕

    alle diese Fehler finden in den dateien ifdef.h, devpkey.h und l2cmn.h statt. meistens ist die erste fehlermeldung, dass ein ';' fehlt. da diese dateien alle vom sdk kommen, gehe ich einfach mal davon auch, dass der code korrekt ist.

    beim recherchieren habe ich gesehen, das andere auch ähnliche fehler hatten, dort lag es aber meist an fehlenden pfadeinträgen in den projekten, diese habe ich jedoch angelegt.

    vielleicht kann mir ja jemand zu diesem fehler etwas sagen.

    grüsse
    onomo



  • so..ich gebe auf das unter vista zu versuchen. die wlanapi.dll ist nicht .net konform und ich müsste jetzt auch noch einen wrapper schreiben. dafür habe ich aber keine zeit also setze ich das ganze unter windows xp fort.

    danke für die hilfe.

    bye


Anmelden zum Antworten