Skip to content
The Road to Delphi — Delphi, VCL, VCL Styles, UxTheme and WinAPI

Access Point detection using Delphi Prism and ManagedWifi.

,

Detect  the AP availables using the Native Wifi API library is really simple. to do this we need to use GetNetworkBssList function which is a wrapper for the function WlanGetNetworkBssList.

This source code uses the Managed Wifi API, The library uses the Native Wifi API, available since Windows Vista and Windows XP SP2 (in a limited fashion, and only after applying a hotfix provided in KB article 918997). Older versions of Windows are not supported.
Before running the code you need to download the library from this location. Build the project “ManagedWifi.csproj” and then add the reference to the source code listed below.

[sourcecode language=”delphi” wraplines=”false”]
namespace DelphiPrismAPWifidetection;
//Author : Rodrigo Ruz. 2009-10-15
//Shine Your crazy Diamond.

interface

uses
NativeWifi,//You must add the reference to the library ManagedWifi.dll
System.Text;

type
ConsoleApp = class
private
class method GetStringForSSID(ssid : Wlan.Dot11Ssid ) : string;
class method FrequencyToChannel(freq:Longint) : Integer;
public
class method Main;
end;

implementation

class method ConsoleApp.FrequencyToChannel(freq:Longint) : Integer;
var
tmpval1,tmpval2 : Longint;
begin
tmpval1 := (freq mod 2412000) div 1000;
tmpval2 := tmpval1 div 5;
Result := tmpval2 + 1;
end;

class method ConsoleApp.GetStringForSSID(ssid : Wlan.Dot11Ssid ) : string;
begin
Result:= Encoding.ASCII.GetString( ssid.SSID, 0, Int32( ssid.SSIDLength) );
end;

class method ConsoleApp.Main;
begin
var client : WlanClient := new WlanClient();
for each wlanIface in client.Interfaces do
begin
Console.WriteLine( "┌—————————————————————¬");
Console.WriteLine( "|{0,-15} {1,-45} |",’Interface’, wlanIface.InterfaceDescription);
Console.WriteLine( "├—————————————————————┤");
Console.WriteLine( "|{0,-15} {1,-45} |",’GUID’, wlanIface.InterfaceGuid);
Console.WriteLine( "|{0,-15} {1,-45} |",’Name’, wlanIface.InterfaceName);
Console.WriteLine( "|{0,-15} {1,-45} |",’State’, wlanIface.InterfaceState.ToString());
Console.WriteLine( "└—————————————————————┘");

var BssList : Array of Wlan.WlanBssEntry:= wlanIface.GetNetworkBssList();
for each BssItem in BssList do
begin
// for more info goto http://msdn.microsoft.com/en-us/library/ms706735%28VS.85%29.aspx
Console.WriteLine( "┌—————————————————————¬");
Console.WriteLine( "|Network SSID {0,-40} |", GetStringForSSID(BssItem.dot11Ssid));
Console.WriteLine( "├—————————————————————┤");
Console.WriteLine( "| Channel Freq. (Khz) {0,-40} |", BssItem.chCenterFrequency.ToString());
Console.WriteLine( "| Channel {0,-40} |", FrequencyToChannel(BssItem.chCenterFrequency).ToString());
Console.WriteLine( "| Rssi (dBm) {0,-40} |", BssItem.rssi.ToString());
Console.WriteLine( "| LinkQuality (%) {0,-40} |", BssItem.linkQuality.ToString());
Console.WriteLine( "| MAC {0,-40} |", BitConverter.ToString(BssItem.dot11Bssid));
Console.WriteLine( "| dot11PhyType {0,-40} |", BssItem.dot11BssPhyType.ToString());
Console.WriteLine( "| network type {0,-40} |", BssItem.dot11BssType.ToString());
Console.WriteLine( "└—————————————————————┘");
end;
end;

Console.ReadLine();
end;

end.
[/sourcecode]

One response

  1. […] Access Point detection using Delphi Prism and ManagedWifi. […]

Leave a Reply