Hallo,
folgende Code ausschnitte habe ich bekommen und möchte diese in mein C# Projekt einbinden. kann mir jemand helfen wie dies funktioniert?
HRESULT GetSymbolSignalStrength(TCHAR *ptcDeviceName, int* piSignalQuality)
{
BOOL bStatus; // status variable
DWORD dwReturnedLength = 0;
DWORD dwReturnCode = 0xFFFF;
USHORT usAssociationStatus = 0;
FPS24DRIVEREXTENSION fpS24DriverExtension = NULL;
FPS24DRIVERINIT fpS24DriverInit = NULL;
BYTE byAdapterMacAddr[S24_MAC_ADDR_LENGTH];
DWORD dwMaxWaitForComplete = 5;
S24_CHANNEL_QUALITY ChannelQuality;
fpS24DriverExtension = // handle to driver method
(FPS24DRIVEREXTENSION)GetProcAddress(hLib,L"S24DriverExtension");
fpS24DriverInit = // initialization method pointer
(FPS24DRIVERINIT)GetProcAddress(hLib,L"S24DriverInit");
if((NULL == fpS24DriverExtension) || (NULL == fpS24DriverInit))
{ // failed to get the method,
return 0; // fail
}
bStatus = (fpS24DriverInit)(); // get the current status
if (bStatus == FALSE) // if we are not working...
{
return 0; // fail
}
bStatus = (fpS24DriverExtension)( // Get the adapter MAC address
0, // MAC Address
S24_GET_ADAPTER_MAC_ADDRESS, // Function code
NULL, // Client window
0, // User token
dwMaxWaitForComplete, // Synchronous timeout
NULL, // Input buffer
0, // Input buffer length
byAdapterMacAddr, // Output buffer
S24_MAC_ADDR_LENGTH, // Output buffer length
&dwReturnedLength, // Returned length
&dwReturnCode); // Return code
if (dwReturnCode != RC_SUCCESS) // if we failed...
{
return FALSE; // fail
}
bStatus = (fpS24DriverExtension)(
byAdapterMacAddr, // MAC Address
S24_GET_CHANNEL_QUALITY, // Function code
NULL, // Client window
0, // User token
dwMaxWaitForComplete, // Synchronous timeout
NULL, // Input buffer
0, // Input buffer length
&ChannelQuality, // Output buffer
sizeof(ChannelQuality), // Output buffer length
&dwReturnedLength, // Returned length
&dwReturnCode); // Return Code
if (dwReturnCode != RC_SUCCESS) // if we failed...
{
return FALSE; // fail
}
// The Symbol EVMON code bases signal quality on three factors...
if (ChannelQuality.usPercentMissedBeacons > 60 ||
ChannelQuality.usPercentTxRetries > 80 ||
ChannelQuality.usRxRSSI < 9)
{
*piSignalQuality = 0; // No signal
}
if (ChannelQuality.usPercentMissedBeacons > 50 ||
ChannelQuality.usPercentTxRetries > 75 ||
ChannelQuality.usRxRSSI < 11)
{
*piSignalQuality = 1; // Very low
}
else if (ChannelQuality.usPercentMissedBeacons > 40 ||
ChannelQuality.usPercentTxRetries > 70 ||
ChannelQuality.usRxRSSI < 15)
{
*piSignalQuality = 2; // Low
}
else if (ChannelQuality.usPercentMissedBeacons > 32 ||
ChannelQuality.usPercentTxRetries > 65 ||
ChannelQuality.usRxRSSI <= 20)
{
*piSignalQuality = 3; // Good
}
else if (ChannelQuality.usPercentMissedBeacons > 20 ||
ChannelQuality.usPercentTxRetries > 50 ||
ChannelQuality.usRxRSSI < 25)
{
*piSignalQuality = 4; // Very good
}
else
{
*piSignalQuality = 5; // Excellent
}
return S_OK;
}
HRESULT GetSignalStrength(TCHAR *ptcDeviceName, int* piSignalStrength, int* piSignalQuality)
{
PNDISUIO_QUERY_OID queryOID;
DWORD dwBytesReturned = 0;
UCHAR QueryBuffer[2000];
HANDLE ndisAccess = INVALID_HANDLE_VALUE;
BOOL retval;
HRESULT hr;
// Attach to NDISUIO.
ndisAccess = CreateFile( NDISUIO_DEVICE_NAME,
0, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
INVALID_HANDLE_VALUE );
if ( ndisAccess == INVALID_HANDLE_VALUE )
return E_FAIL; // ????
// Get Signal strength
queryOID = (PNDISUIO_QUERY_OID)&QueryBuffer[0];
queryOID->ptcDeviceName = ptcDeviceName;
queryOID->Oid = OID_802_11_RSSI;
retval = DeviceIoControl(ndisAccess,
IOCTL_NDISUIO_QUERY_OID_VALUE,
(LPVOID) queryOID,
sizeof(NDISUIO_QUERY_OID) + sizeof(long),
(LPVOID) queryOID,
sizeof(NDISUIO_QUERY_OID) + sizeof(long),
&dwBytesReturned, NULL);
if( retval && piSignalStrength && piSignalQuality )
{
hr = S_OK;
*piSignalStrength = *(long *)&(queryOID->Data);
//Here's Microsoft's interpretation
//of the return value
if(*piSignalStrength < -90)
*piSignalQuality = 0; // No signal
else if(*piSignalStrength < -81)
*piSignalQuality = 1; // Very low
else if(*piSignalStrength < -71)
*piSignalQuality = 2; // Low
else if(*piSignalStrength < -67)
*piSignalQuality = 3; // Good
else if(*piSignalStrength < -57)
*piSignalQuality = 4; // Very good
else
*piSignalQuality = 5; // Excellent
}
else
{
hr = E_FAIL;
}
CloseHandle( ndisAccess );
return hr;
}
static TCHAR wName[ MAX_ADAPTER_NAME_LENGTH + 4 ];
BOOL GetFirstRFEthernetSignalStrength(int* pSignalStrength, int* pSignalQuality)
{
BOOL retval = FALSE;
int nRet;
// Get the size of the adapters list.
DWORD size = 0;
GetAdaptersInfo( NULL, &size );
// Allocate space for the list.
IP_ADAPTER_INFO *info =
(IP_ADAPTER_INFO*)new char[ size ];
DWORD err;
if ((err = GetAdaptersInfo(info, &size )) == NO_ERROR )
{
IP_ADAPTER_INFO *cinfo = info;
while ( cinfo )
{
// Check the interface media type for
// Ethernet, which both
// standard Ethernet and RF Ethernet will return.
if ( cinfo->Type == MIB_IF_TYPE_ETHERNET )
{
MultiByteToWideChar( CP_ACP, 0, cinfo->AdapterName, -1,
wName, sizeof( wName ) / sizeof( wName[ 0 ] ) );
// Try to get the signal strength.
//If it works, we
// return the information.
//If not, we move on.
if (wcscmp(wName, TEXT("NETWLAN1")) == 0)// || // standard name for Symbol driver
// (wcscmp(wName, TEXT("Wireless 802.11g")) == 0))
{
if (hLib == NULL)
hLib = LoadLibrary(L"mudll.dll"); // load the symbol library
if (hLib == NULL) // if the library isn't loaded
hLib = LoadLibrary(TEXT("s24mudll.dll")); // load it
if (hLib == NULL) // if it failed to load...
return 0; // close
nRet = GetSymbolSignalStrength(wName, pSignalQuality);
}
else
nRet = GetSignalStrength(wName, pSignalStrength, pSignalQuality);
if (nRet == S_OK )
{
retval = TRUE;
break;
}
}
// Go to the next adapter in the list.
cinfo = cinfo->Next;
}
}
// Don't forget to delete the allocation.
delete [] info;
return retval;
}
Besten Dank
Dirk
[Hinweis] Wie poste ich richtig? Punkt 4
Das Stichwort nennt sich P/Invoke
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hallo Dirk,
das Beste ist, Du erstellst Dir aus dem Code ne C++ Dll. Dazu kannst Du ein neues VS C++ Projekt erstellen (Library), diesen Code einfügen, einen Header dazu bauen und Kompilieren lassen.
Danach kannst Du die Dll in Dein C# Projekt einbinden und benutzen. Alles andere scheint mir zu kompliziert (auf den ersten Blick).
Ein Portieren wäre der Königsweg (also den C++ Code manuell in C# neu schreiben), aber ich weiß nicht mit welchen Abhängigkeiten der Code arbeitet, und ob diese dann so einwandfrei sich in einem C# Projekt verwenden lassen.
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Oder, falls du schon eine DLL schreibst, kannst du sie auch gleich als managed C++ schreiben, damit auf deinen alten C++ Code zugreifen und im Visual Studio das C++ Projekt einfach als Projekt-Referenz im C# Code mit einbindest und ganz normal verwendest.
Hallo,
danke für die Antworten. Leider kenne ich mich mit C++ nicht aus. Ich hebe nun probiert eine DLL zu kompilieren, aber habe keinen blassen schimmer. kann mir denn jemand diese mit dem Code erstellen?
Besten Dank Dirk
Hallo dimuwe,
kann mir denn jemand diese mit dem Code erstellen?
Das werden einige hier im Forum können (ich auch), aber es wird wohl keiner realisieren. Ich muss ehrlich sagen, es ist nicht sonderlich schwer, da wirklich nur C++ Grundkenntnisse gefordert sind, und wenn Du schon Programmierkenntnisse hast wirst Du Dich relativ schnell in solch eine Materie einarbeiten können.
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo, ich habe mich etwas verkehrt ausgedrückt. Ich benötige nur etwas hilfe, wie man den header erstellt und was man includen muss. Besten Dank Dirk
Sicher, dass das C++ ist? Für mich sieht das eher nach C aus... Keinerlei Objektorientierung erkenntlich.
Für mich sieht das eher nach C aus... Keinerlei Objektorientierung erkenntlich.
Dann mach nochmal die Augen auf 🙂
Da sind einige Dinge drin, die in C nicht möglich sind. Ansonsten ist die Syntax der beiden Sprachen eh gleich, wie C# auch, nur etwas abgewandelt. Aber das hat C-Dialekt nun mal so an sich 🙂
> Codejunky <
Für mich sieht das eher nach C aus... Keinerlei Objektorientierung erkenntlich.
Dann mach nochmal die Augen auf 🙂Da sind einige Dinge drin, die in C nicht möglich sind. Ansonsten ist die Syntax der beiden Sprachen eh gleich, wie C# auch, nur etwas abgewandelt. Aber das hat C-Dialekt nun mal so an sich 🙂
Dann hilf mir doch mal auf die Sprünge...
edit: Nicht falsch verstehen.. möchte nur gerne wissen, was es ist^
Delete[] beispielsweise gibts nur in C++
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
GetAdaptersInfo( NULL, &size );
...
DWORD err;
geht ebenfalls in C nicht. (Erst Variablen deklarieren, dann den rest)
Okay... Danke... hatte ich übersehen^^
Aber trotzdem fällt mir dabei die fehlende Objektorientierung auf, was C++ ja eigentlich den "Vorteil" gegenüber C verleiht.
Für mich sieht das aus, wie ein paar hilfsfunktionen um die Signalstärke einer WLan verbindung zu lesen.
Wozu da OOP?
Aber unter .NET wäre das mit WMI natürlich deuutlich einfacher zu lösen.
Wozu da OOP?
Weil das der Sinn einer OOP fähigen Sprache ist.
Nein.
Schon mal von KISS gehört?
Man sollte seine Werkzeuge immer so einsetzen, das sie maximalen Nutzen bringen,
nicht das sie Maximal benutzt werden.
Naja... das ist jetzt wieder eine Sache über die man sich streiten kann. Meiner Meinung nach sollte man eine Objektorientierte Sprache auch dementsprechend nutzen.
Bin ich deiner Meinung, aber man muss es nicht übertreiben.
Naja... mit übertreiben hat das weniger zu tun. Eher mit konsequentem durchführen eines Konzepts.
Irgendwo ist auch gut mit dem Thema.
Interessiert hier keinen was du kennst, da es um was ganz anderes in dem Topic geht.
Für kleinere Sachen muss nicht immer der volle OO Weg eingeschlagen werden, wenn es sich auch anders einfach löst.
Du nimmst dir auch nicht extra einen Wasserkasten, nur um 2 Flaschen zu transportieren, falls du verstehst.
> Codejunky <
Da hat sich aber einer unter Kontrolle... Ich entschuldige mich dafür, dass ich hier Offtopic gepostet habe, aber bestimmt nicht dafür, dass ich meine Meinung gesagt habe. Das hier ist ein Forum und dazu da um zu diskutieren, wenn du ein Problem damit hast, dann ignoriere meine Beiträge, aber fang nicht an mich anzugreifen.
Hallo FZelle,
genau darum geht es. Ich hatte folgendes Code für ein Gerät mit WLAN, CE, CF2 benutzen wollen.
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
WirelessZeroConfigNetworkInterface wzcInterface = null;
foreach ( NetworkInterface ni in interfaces )
{
System.Console.WriteLine( string.Format( "===========\r\nInterface {0}\r\n===========", ni.Id ) );
System.Console.WriteLine( string.Format( " Type: {0}", ni.GetType().Name ) );
System.Console.WriteLine( string.Format( " Name: {0}", ni.Name ) );
System.Console.WriteLine( string.Format( " Description: {0}", ni.Description ) );
System.Console.WriteLine( string.Format( " Network Interface Type: {0}", ni.NetworkInterfaceType.ToString() ) );
PhysicalAddress address = ni.GetPhysicalAddress();
System.Console.WriteLine( string.Format( " MAC: {0}", address == null ? "{none}" : address.ToString() ) );
System.Console.WriteLine( string.Format( " Operational Status: {0}", ni.OperationalStatus.ToString() ) );
System.Console.WriteLine( string.Format( " Speed: {0}bps", ni.Speed ) );
System.Console.WriteLine( string.Format( " *Interface Operational Status: {0}", ni.InterfaceOperationalStatus.ToString() ) );
System.Console.WriteLine( string.Format( " *Current IP: {0}", ni.CurrentIpAddress.ToString() ) );
System.Console.WriteLine( string.Format( " *Current Subnet: {0}", ni.CurrentSubnetMask.ToString() ) );
IPInterfaceProperties ipProps = ni.GetIPProperties();
System.Console.WriteLine( "\r\n IP Properties\r\n -------------" );
#region --- Server Lists ---
if ( ipProps.DhcpServerAddresses.Count > 0 )
{
for ( int i = 0; i < ipProps.DhcpServerAddresses.Count; i++ )
{
System.Console.WriteLine( string.Format( " DHCP Server {0}: {1}", i, ipProps.DhcpServerAddresses[i].ToString() ) );
}
}
else
{
System.Console.WriteLine( " No DHCP Servers" );
}
if ( ipProps.DnsAddresses.Count > 0 )
{
for ( int i = 0; i < ipProps.DnsAddresses.Count; i++ )
{
System.Console.WriteLine( string.Format( " DNS Server {0}: {1}", i, ipProps.DnsAddresses[i].ToString() ) );
}
}
else
{
System.Console.WriteLine( " No DNS Servers" );
}
if ( ipProps.GatewayAddresses.Count > 0 )
{
for ( int i = 0; i < ipProps.GatewayAddresses.Count; i++ )
{
System.Console.WriteLine( string.Format( " Gateway {0}: {1}", i, ipProps.GatewayAddresses[i].Address.ToString() ) );
}
}
else
{
System.Console.WriteLine( " No Gateways" );
}
if ( ipProps.WinsServersAddresses.Count > 0 )
{
for ( int i = 0; i < ipProps.WinsServersAddresses.Count; i++ )
{
System.Console.WriteLine( string.Format( " WINS Server {0}: {1}", i, ipProps.WinsServersAddresses[i].ToString() ) );
}
}
else
{
System.Console.WriteLine( " No WINS Servers" );
}
#endregion
#region --- Unicast Addresses ---
if ( ipProps.UnicastAddresses.Count > 0 )
{
for ( int i = 0; i < ipProps.UnicastAddresses.Count; i++ )
{
System.Console.WriteLine( string.Format( " Unicast address {0}: {1}", i, ipProps.UnicastAddresses[i].Address.ToString() ) );
System.Console.WriteLine( string.Format( " Address Family: {0}", ipProps.UnicastAddresses[i].Address.AddressFamily ) );
if ( ipProps.UnicastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6 )
{
System.Console.WriteLine( string.Format( " Scope ID: {0}", ipProps.UnicastAddresses[i].Address.ScopeId ) );
}
else // ipv4
{
System.Console.WriteLine( string.Format( " IPv4 Mask: {0}", ipProps.UnicastAddresses[i].IPv4Mask == null
? "{none}" : ipProps.UnicastAddresses[i].IPv4Mask.ToString() ) );
}
System.Console.WriteLine( string.Format( " Preferred Limetime: {0}", ipProps.UnicastAddresses[i].AddressPreferredLifetime ) );
System.Console.WriteLine( string.Format( " Valid Limetime: {0}", ipProps.UnicastAddresses[i].AddressValidLifetime ) );
System.Console.WriteLine( string.Format( " DHCP Lease Limetime: {0}", ipProps.UnicastAddresses[i].DhcpLeaseLifetime ) );
System.Console.WriteLine( string.Format( " DAD State: {0}", ipProps.UnicastAddresses[i].DuplicateAddressDetectionState ) );
System.Console.WriteLine( string.Format( " {0} DNS Eligible", ipProps.UnicastAddresses[i].IsDnsEligible ? "IS" : "IS NOT" ) );
System.Console.WriteLine( string.Format( " {0} Transient", ipProps.UnicastAddresses[i].IsTransient ? "IS" : "IS NOT" ) );
System.Console.WriteLine( string.Format( " Prefix Origin: {0}", ipProps.UnicastAddresses[i].PrefixOrigin.ToString() ) );
System.Console.WriteLine( string.Format( " Suffix Origin: {0}", ipProps.UnicastAddresses[i].SuffixOrigin.ToString() ) );
}
}
else
{
System.Console.WriteLine( " No Unicast addresses" );
}
#endregion
#region --- Anycast Addresses ---
if ( ipProps.AnycastAddresses.Count > 0 )
{
for ( int i = 0; i < ipProps.AnycastAddresses.Count; i++ )
{
System.Console.WriteLine( string.Format( " Anycast address {0}: {1}", i, ipProps.AnycastAddresses[i].Address.ToString() ) );
System.Console.WriteLine( string.Format( " Address Family: {0}", ipProps.AnycastAddresses[i].Address.AddressFamily ) );
if ( ipProps.AnycastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6 )
{
System.Console.WriteLine( string.Format( " Scope ID: {0}", ipProps.AnycastAddresses[i].Address.ScopeId ) );
}
System.Console.WriteLine( string.Format( " {0} DNS Eligible", ipProps.UnicastAddresses[i].IsDnsEligible ? "IS" : "IS NOT" ) );
System.Console.WriteLine( string.Format( " {0} Transient", ipProps.UnicastAddresses[i].IsTransient ? "IS" : "IS NOT" ) );
}
}
else
{
System.Console.WriteLine( " No Anycast addresses" );
}
#endregion
#region --- Multicast Addresses ---
if ( ipProps.MulticastAddresses.Count > 0 )
{
for ( int i = 0; i < ipProps.MulticastAddresses.Count; i++ )
{
System.Console.WriteLine( string.Format( " Anycast address {0}: {1}", i, ipProps.MulticastAddresses[i].Address.ToString() ) );
System.Console.WriteLine( string.Format( " Address Family: {0}", ipProps.MulticastAddresses[i].Address.AddressFamily ) );
if ( ipProps.MulticastAddresses[i].Address.AddressFamily == AddressFamily.InterNetworkV6 )
{
System.Console.WriteLine( string.Format( " Scope ID: {0}", ipProps.MulticastAddresses[i].Address.ScopeId ) );
}
System.Console.WriteLine( string.Format( " {0} DNS Eligible", ipProps.MulticastAddresses[i].IsDnsEligible ? "IS" : "IS NOT" ) );
System.Console.WriteLine( string.Format( " {0} Transient", ipProps.MulticastAddresses[i].IsTransient ? "IS" : "IS NOT" ) );
}
}
else
{
System.Console.WriteLine( " No Multicast addresses" );
}
#endregion
#region --- IPv4 Stats ---
IPv4InterfaceStatistics ipstats = ni.GetIPv4Statistics();
System.Console.WriteLine( "\r\n IPv4 Statistics\r\n -------------" );
System.Console.WriteLine( string.Format( " Bytes Received: {0}", ipstats.BytesReceived ) );
System.Console.WriteLine( string.Format( " Bytes Sent: {0}", ipstats.BytesSent ) );
System.Console.WriteLine( string.Format( " Incoming Packets Discarded: {0}", ipstats.IncomingPacketsDiscarded ) );
System.Console.WriteLine( string.Format( " Incoming Packets with errors: {0}", ipstats.IncomingPacketsWithErrors ) );
System.Console.WriteLine( string.Format( " Incoming Packets Unk. Protocol: {0}", ipstats.IncomingUnknownProtocolPackets ) );
System.Console.WriteLine( string.Format( " Non Unicast Packets Received: {0}", ipstats.NonUnicastPacketsReceived ) );
System.Console.WriteLine( string.Format( " Non Unicast Packets Sent: {0}", ipstats.NonUnicastPacketsSent ) );
System.Console.WriteLine( string.Format( " Outgoing Packets Discarded: {0}", ipstats.OutgoingPacketsDiscarded ) );
System.Console.WriteLine( string.Format( " Outgoing Packets With Errors: {0}", ipstats.OutgoingPacketsWithErrors ) );
System.Console.WriteLine( string.Format( " Output Queue Length: {0}", ipstats.OutputQueueLength ) );
System.Console.WriteLine( string.Format( " Unicast Packets Received: {0}", ipstats.UnicastPacketsReceived ) );
System.Console.WriteLine( string.Format( " Unicast Packets Sent: {0}", ipstats.UnicastPacketsSent ) );
#endregion
#region --- IPv4 Properties ---
IPv4InterfaceProperties ipv4props = ipProps.GetIPv4Properties();
System.Console.WriteLine( "\r\n IPv4 Properties\r\n -------------" );
System.Console.WriteLine( string.Format( " Index: {0}", ipv4props.Index ) );
System.Console.WriteLine( string.Format( " Auto Addressing {0}", ipv4props.IsAutomaticPrivateAddressingActive
? "ACTIVE" : "INACTIVE" ) );
System.Console.WriteLine( string.Format( " Auto Addressing {0}", ipv4props.IsAutomaticPrivateAddressingEnabled
? "ENABLED" : "DISABLED" ) );
System.Console.WriteLine( string.Format( " DHCP {0}", ipv4props.IsDhcpEnabled ? "ENABLED" : "DISABLED" ) );
System.Console.WriteLine( string.Format( " MTU: {0}", ipv4props.Mtu ) );
System.Console.WriteLine( string.Format( " {0} use WINS", ipv4props.UsesWins ? "DOES" : "DOES NOT" ) );
#endregion
if ( ni is WirelessZeroConfigNetworkInterface )
{
WirelessZeroConfigNetworkInterface wzc = ( WirelessZeroConfigNetworkInterface )ni;
// save for later operations
wzcInterface = wzc;
System.Console.WriteLine( "\r\n *WZC Properties\r\n -------------" );
System.Console.WriteLine( string.Format( " *Associated AP: {0}", wzc.AssociatedAccessPoint ) );
System.Console.WriteLine( string.Format( " *Associated AP MAC: {0}", wzc.AssociatedAccessPointMAC ) );
System.Console.WriteLine( string.Format( " *Authentication Mode: {0}", wzc.AuthenticationMode.ToString() ) );
System.Console.WriteLine( string.Format( " *WZC Fallback Enabled: {0}", wzc.FallbackEnabled ) );
System.Console.WriteLine( string.Format( " *WEP Status: {0}", wzc.WEPStatus ) );
System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", wzc.SignalStrength.Decibels,
wzc.SignalStrength.Strength.ToString() ) );
System.Console.WriteLine( string.Format( " *Authentication Mode: {0}", wzc.AuthenticationMode.ToString() ) );
System.Console.WriteLine( string.Format( " *Infrastructure Mode: {0}", wzc.InfrastructureMode.ToString() ) );
System.Console.WriteLine( string.Format( " *WEP Status: {0}", wzc.WEPStatus.ToString() ) );
foreach ( int rate in wzc.SupportedRates )
{
System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
}
System.Console.WriteLine( string.Format( " *Radio ATIM Window: {0}Kµsec", wzc.RadioConfiguration.ATIMWindow ) );
System.Console.WriteLine( string.Format( " *Radio beacon Period: {0}Kµsec", wzc.RadioConfiguration.BeaconPeriod ) );
System.Console.WriteLine( string.Format( " *Radio Frequency: {0}kHz", wzc.RadioConfiguration.Frequency ) );
System.Console.WriteLine( string.Format( " *Radio Frequency Hop Dwell Time: {0}Kµsec",
wzc.RadioConfiguration.FrequencyHopDwellTime ) );
System.Console.WriteLine( string.Format( " *Radio Frequency Hop Pattern: {0}", wzc.RadioConfiguration.FrequencyHopPattern ) );
System.Console.WriteLine( string.Format( " *Radio Frequency Hop Set: {0}", wzc.RadioConfiguration.FrequencyHopSet ) );
#region --- Preferred APs ---
if ( wzc.PreferredAccessPoints.Count > 0 )
{
System.Console.WriteLine( "\r\n *Preferred APs\r\n -------------" );
foreach ( AccessPoint ap in wzc.PreferredAccessPoints )
{
System.Console.WriteLine( string.Format( " *SSID: {0}", ap.Name ) );
System.Console.WriteLine( string.Format( " *MAC {0}", ap.PhysicalAddress.ToString() ) );
System.Console.WriteLine( string.Format( " *Mode {0}", ap.InfrastructureMode.ToString() ) );
System.Console.WriteLine( string.Format( " *Network Type {0}", ap.NetworkTypeInUse.ToString() ) );
System.Console.WriteLine( string.Format( " *Privacy {0}", ap.Privacy ) );
System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels,
ap.SignalStrength.Strength.ToString() ) );
// supported rates
foreach ( int rate in ap.SupportedRates )
{
System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
}
}
}
else
{
System.Console.WriteLine( "\r\n *No Preferred APs" );
}
#endregion
#region --- Nearby APs ---
if ( wzc.NearbyAccessPoints.Count > 0 )
{
System.Console.WriteLine( "\r\n *Nearby APs\r\n -------------" );
foreach ( AccessPoint ap in wzc.NearbyAccessPoints )
{
System.Console.WriteLine( string.Format( " *SSID: {0}", ap.Name ) );
System.Console.WriteLine( string.Format( " *MAC {0}", ap.PhysicalAddress.ToString() ) );
System.Console.WriteLine( string.Format( " *Mode {0}", ap.InfrastructureMode.ToString() ) );
System.Console.WriteLine( string.Format( " *Network Type {0}", ap.NetworkTypeInUse.ToString() ) );
System.Console.WriteLine( string.Format( " *Privacy {0}", ap.Privacy ) );
System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels,
ap.SignalStrength.Strength.ToString() ) );
// supported rates
foreach ( int rate in ap.SupportedRates )
{
System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
}
}
}
else
{
System.Console.WriteLine( "\r\n *No Nearby APs" );
}
#endregion
#region --- Preferred APs ---
if ( wzc.NearbyPreferredAccessPoints.Count > 0 )
{
System.Console.WriteLine( "\r\n *Preferred Nearby APs\r\n -------------" );
foreach ( AccessPoint ap in wzc.NearbyPreferredAccessPoints )
{
System.Console.WriteLine( string.Format( " *SSID: {0}", ap.Name ) );
System.Console.WriteLine( string.Format( " *MAC {0}", ap.PhysicalAddress.ToString() ) );
System.Console.WriteLine( string.Format( " *Mode {0}", ap.InfrastructureMode.ToString() ) );
System.Console.WriteLine( string.Format( " *Network Type {0}", ap.NetworkTypeInUse.ToString() ) );
System.Console.WriteLine( string.Format( " *Privacy {0}", ap.Privacy ) );
System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", ap.SignalStrength.Decibels,
ap.SignalStrength.Strength.ToString() ) );
// supported rates
foreach ( int rate in ap.SupportedRates )
{
System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
}
}
}
else
{
System.Console.WriteLine( "\r\n *No Nearby Preferred APs" );
}
#endregion
}
else if ( ni is WirelessNetworkInterface )
if ( ni is WirelessNetworkInterface )
{
WirelessNetworkInterface wni = ( WirelessNetworkInterface )ni;
System.Console.WriteLine( "\r\n *Wireless Properties\r\n -------------" );
System.Console.WriteLine( string.Format( " *Associated AP: {0}", wni.AssociatedAccessPoint ) );
System.Console.WriteLine( string.Format( " *Associated AP MAC: {0}", wni.AssociatedAccessPointMAC ) );
System.Console.WriteLine( string.Format( " *Signal Strength: {0}db ({1})", wni.SignalStrength.Decibels,
wni.SignalStrength.Strength.ToString() ) );
System.Console.WriteLine( string.Format( " *Authentication Mode: {0}", wni.AuthenticationMode.ToString() ) );
System.Console.WriteLine( string.Format( " *Infrastructure Mode: {0}", wni.InfrastructureMode.ToString() ) );
System.Console.WriteLine( string.Format( " *WEP Status: {0}", wni.WEPStatus.ToString() ) );
foreach ( int rate in wni.SupportedRates )
{
System.Console.WriteLine( string.Format( " *Supports {0}kbps", rate ) );
}
System.Console.WriteLine( string.Format( " *Radio ATIM Window: {0}Kµsec", wni.RadioConfiguration.ATIMWindow ) );
System.Console.WriteLine( string.Format( " *Radio beacon Period: {0}Kµsec", wni.RadioConfiguration.BeaconPeriod ) );
System.Console.WriteLine( string.Format( " *Radio Frequency: {0}kHz", wni.RadioConfiguration.Frequency ) );
System.Console.WriteLine( string.Format( " *Radio Frequency Hop Dwell Time: {0}Kµsec",
wni.RadioConfiguration.FrequencyHopDwellTime ) );
System.Console.WriteLine( string.Format( " *Radio Frequency Hop Pattern: {0}", wni.RadioConfiguration.FrequencyHopPattern ) );
System.Console.WriteLine( string.Format( " *Radio Frequency Hop Set: {0}", wni.RadioConfiguration.FrequencyHopSet ) );
}
} // foreach (NetworkInterface ni in interfaces)
if ( wzcInterface != null )
{
byte[] key = null;
bool b = wzcInterface.AddPreferredNetwork( "MyOpenNetwork1", true, key, 1, AuthenticationMode.Open,
WEPStatus.WEPDisabled, null );
b = wzcInterface.AddPreferredNetwork( "MyOpenNetwork2", true, key, 1, AuthenticationMode.Open,
WEPStatus.WEPDisabled, null );
b = wzcInterface.AddPreferredNetwork( "MyOpenNetwork3", true, key, 1, AuthenticationMode.Open,
WEPStatus.WEPDisabled, null );
}
nun gib es aber das Problem das kein WLAN Adapter erkannt wird. Auf Grund dessen habe ich von dem Entwickler des Gerätes den Code geschickt. Ob C oder C++, ich möchte diesen so verwenden oder vielleicht den C# Code so umschreiben das die WLAN Karte erkannt wird und ich die Signalstärke auslesen kann.
Besten dank
Dirk
Edit auf Norman_Timo`s Nachpost.
Wenn du unbedingt die Hersteller Dll nehmen willst oder sogar musst, kannst du P/Invoke (DllImport) zur Einbettung der Dll nutzen. Die Funktionsrümpfe sehen alle nach (standard) C aus.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Hallo dimuwe,
manchmal hilft es allerdings, wenn man zunächst das eigentliche Problem beschreibt, nämlich, dass Du versuchst die Signalstärke für WLan zu ermitteln, denn dann könnte man Dir auch Alternativen vorschlagen.
Ich denke, ähnlich wie FZelle, und meine, dass es einfacher gehen muss eine Signalstärke zu ermitteln:
VB-Archiv - Signalstärke ermitteln
Der gepostete Link enthält zwar vb5/vb6 Code, allerdings ist das Kernstück eine WMI Abfrage, die wohl sehr leicht in C# zu portieren wäre. Der Rest des Codes ist lediglich die Anzeige der Signalstärke...
Also ich würde WMI einsetzen, so wie FZelle schon vorher geschrieben hatte.
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo,
danke für die Antworten. Ich gebe Euch natürlich recht.
Wenn es mit WMI so einfach geht, wäre ja nicht schlecht aber
was für mich wichtig ist wäre die tatsache das es mit dem CF2 funktioniert.
Gruß
Dirk
Hallo dimuwe,
was für mich wichtig ist wäre die tatsache das es mit dem CF2 funktioniert.
Ich kenne mich damit nicht aus, hast Du nun ausprobiert, obs funktioniert?
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo norman_timo,
ja habe ich. und es geht schon beim verweis los.
Set oWMI = Microsoft.VisualBasic.Interaction <- bis hierhin alles gut, aber GetObject gibt es nicht.
gruß
Dirk
Hallo dimuwe,
Du machst es einem wirklich nicht leicht, oder?
Hier findest Du einen WMI Code Generator
[Tipp] WMI Code Generator
Aus dem vorigen Beispiel wirst Du den Zugrifsschlüssel entnehmen können, und mit dem WMI Generator kannst Du dann fertigen C# Code generieren lassen.
Spaßeshalber kannst Du Dir dann auch den Unterschied zwischen dem Generator-Ergebnis und dem vb5/vb6 Code anschauen.
-> Es ist immer gut auch über den Tellerrand hinweg zu schauen, und zu wissen, was denn andere Technologien/Programmiersprachen so können. Denn man nimmt auch nicht unbedingt die Kneifzange um eine Schraube ins Metall zu drehen 😉
Grüße
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo norman_timo,
leider ist es auch nicht leicht. Mit diesem generator kann ich wunderbar Framework code generieren, aber nicht für das CF und das ist ja nun mal anders. Wie gesagt der C# Code oben funktioniert ja auf dem gerät nur der Adapter wird nicht als Wireless erkannt und somit auch keine Signalstärke.
Ich werde langsam reif für die Klapse, aber naja
Gruß
Dirk
Weder das WMI noch das Beispiel oben wird auf dem CF2 Funktionieren.
In zukunft solltest DU das auf gleich angeben, denn das ist schon ziemlich wichtig, da es eine ungeheure einschränkung darstellt.
Und wie (fast) immer gibt es im OpenNetCF eine lösung dazu:
http://blog.opennetcf.org/ctacke/binary/WiFiDiscovery.htm
Hallo FZelle,
da hast Du wohl Recht, aber der C# - Code oben ist auch ein beispiel in Verbindung mit OpenNETCF.
Der Link von Dir verweist aber auf alte namespaces von OpenNETCF.
Warnung 1 "OpenNETCF.Net.AdapterCollection" ist veraltet: "This class is obsolete and will be removed in a future version of the SDF. Consider using OpenNETCF.Net.NetworkInformation.NetworkInterface or one of its subclasses instead"
Der Code funktioniert, aber
if ( wireless )
{
gibt nur false wieder
Nun ist das wieder das Problem, das bei dem obigen Beispiel und bei dem Code von Dir halt der Adapter (CF-Karte) nicht als Wireless erkannt wird.
Ich drehe gleich durch.
Gruß
Dirk