In meinem Delphi (auf Windows Xp) Programm möchte ich die verfügbaren WiFi-Netzwerke überprüfen. Hast du eine Idee, wie es geht? Am besten ist es wahrscheinlich die MS WlanScan API Funktion zu benutzen, aber ich habe kein Beispiel gefunden. Kann mir jemand helfen?Ich möchte mit Wifi mit Delphi arbeiten. Wie?
Antwort
Sie können die Native Wifi API verwenden, die seit Windows Vista und Windows XP verfügbar ist. Ältere Windows-Versionen werden nicht unterstützt.
In diesem link finden Sie eine sehr schöne Übersetzung der Header.
Ich schrieb diesen Code mit diesen Headern. Getestet in Delphi 2007 und Windows Vista.
program DetectWifiUsingDelphi;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils,
//TypInfo,
nduWlanAPI in 'nduWlanAPI.pas',
nduWlanTypes in 'nduWlanTypes.pas';
function DOT11_AUTH_ALGORITHM_To_String(Dummy :Tndu_DOT11_AUTH_ALGORITHM):String;
begin
Result:='';
case Dummy of
DOT11_AUTH_ALGO_80211_OPEN : Result:= '80211_OPEN';
DOT11_AUTH_ALGO_80211_SHARED_KEY : Result:= '80211_SHARED_KEY';
DOT11_AUTH_ALGO_WPA : Result:= 'WPA';
DOT11_AUTH_ALGO_WPA_PSK : Result:= 'WPA_PSK';
DOT11_AUTH_ALGO_WPA_NONE : Result:= 'WPA_NONE';
DOT11_AUTH_ALGO_RSNA : Result:= 'RSNA';
DOT11_AUTH_ALGO_RSNA_PSK : Result:= 'RSNA_PSK';
DOT11_AUTH_ALGO_IHV_START : Result:= 'IHV_START';
DOT11_AUTH_ALGO_IHV_END : Result:= 'IHV_END';
end;
End;
function DOT11_CIPHER_ALGORITHM_To_String(Dummy :Tndu_DOT11_CIPHER_ALGORITHM):String;
Begin
Result:='';
case Dummy of
DOT11_CIPHER_ALGO_NONE : Result:= 'NONE';
DOT11_CIPHER_ALGO_WEP40 : Result:= 'WEP40';
DOT11_CIPHER_ALGO_TKIP : Result:= 'TKIP';
DOT11_CIPHER_ALGO_CCMP : Result:= 'CCMP';
DOT11_CIPHER_ALGO_WEP104 : Result:= 'WEP104';
DOT11_CIPHER_ALGO_WPA_USE_GROUP : Result:= 'WPA_USE_GROUP OR RSN_USE_GROUP';
//DOT11_CIPHER_ALGO_RSN_USE_GROUP : Result:= 'RSN_USE_GROUP';
DOT11_CIPHER_ALGO_WEP : Result:= 'WEP';
DOT11_CIPHER_ALGO_IHV_START : Result:= 'IHV_START';
DOT11_CIPHER_ALGO_IHV_END : Result:= 'IHV_END';
end;
End;
procedure Scan();
const
WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES =$00000001;
var
hClient : THandle;
dwVersion : DWORD;
ResultInt : DWORD;
pInterface : Pndu_WLAN_INTERFACE_INFO_LIST;
i : Integer;
j : Integer;
pAvailableNetworkList: Pndu_WLAN_AVAILABLE_NETWORK_LIST;
pInterfaceGuid : PGUID;
SDummy : string;
begin
ResultInt:=WlanOpenHandle(1, nil, @dwVersion, @hClient);
if ResultInt<> ERROR_SUCCESS then
begin
WriteLn('Error Open CLient'+IntToStr(ResultInt));
Exit;
end;
ResultInt:=WlanEnumInterfaces(hClient, nil, @pInterface);
if ResultInt<> ERROR_SUCCESS then
begin
WriteLn('Error Enum Interfaces '+IntToStr(ResultInt));
exit;
end;
for i := 0 to pInterface^.dwNumberOfItems - 1 do
begin
Writeln('Interface ' + pInterface^.InterfaceInfo[i].strInterfaceDescription);
WriteLn('GUID ' + GUIDToString(pInterface^.InterfaceInfo[i].InterfaceGuid));
Writeln('');
pInterfaceGuid:= @pInterface^.InterfaceInfo[pInterface^.dwIndex].InterfaceGuid;
ResultInt:=WlanGetAvailableNetworkList(hClient,pInterfaceGuid,WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES,nil,pAvailableNetworkList);
if ResultInt<> ERROR_SUCCESS then
begin
WriteLn('Error WlanGetAvailableNetworkList '+IntToStr(ResultInt));
Exit;
end;
for j := 0 to pAvailableNetworkList^.dwNumberOfItems - 1 do
Begin
WriteLn(Format('Profile %s',[WideCharToString(pAvailableNetworkList^.Network[j].strProfileName)]));
SDummy:=PChar(@pAvailableNetworkList^.Network[j].dot11Ssid.ucSSID);
WriteLn(Format('NetworkName %s',[SDummy]));
WriteLn(Format('Signal Quality %d ',[pAvailableNetworkList^.Network[j].wlanSignalQuality])+'%');
//SDummy := GetEnumName(TypeInfo(Tndu_DOT11_AUTH_ALGORITHM),integer(pAvailableNetworkList^.Network[j].dot11DefaultAuthAlgorithm)) ;
SDummy:=DOT11_AUTH_ALGORITHM_To_String(pAvailableNetworkList^.Network[j].dot11DefaultAuthAlgorithm);
WriteLn(Format('Auth Algorithm %s ',[SDummy]));
SDummy:=DOT11_CIPHER_ALGORITHM_To_String(pAvailableNetworkList^.Network[j].dot11DefaultCipherAlgorithm);
WriteLn(Format('Auth Algorithm %s ',[SDummy]));
Writeln('');
End;
end;
WlanCloseHandle(hClient, nil);
end;
begin
try
Scan();
Readln;
except
on E:Exception do
Writeln(E.Classname, ': ', E.Message);
end;
end.
alt text http://i33.tinypic.com/2z83ubt.jpg
Bye.
Der Link zu WlanAPI.zip Download ist kaputt. Hier ist ein funktionierender Link: http://www.delphibasics.info/home/delphibasicsprojects/wifiscanner – kobik
Sie können auch dazu erhalten, indem eine WMI-Abfrage ausführen:
SELECT * FROM MSNdis_80211_ServiceSetIdentifier
Wenn Sie speziell für eine delphi Implementierung suchen sind, gibt es eine WMI-Bibliothek von Magenta Systems zur Verfügung, die vollständige Quelle enthält und frei verwendet werden können, . Der verfügbare Download enthält eine kompilierte ausführbare Datei, in der Sie diese Abfrage ausprobieren können, um festzustellen, ob sie alle gesuchten Daten enthält. Der einzige Nachteil dieses Ansatzes besteht darin, dass der WMI-Dienst ausgeführt werden muss (normalerweise ist dies kein großes Problem).
- 1. Arbeiten mit WordPress aus Delphi
- 2. Mit Unicode-Zeichenfolgen in Delphi 7 arbeiten
- 3. Können WIFI-Direkt- und WIFI-Station gleichzeitig arbeiten?
- 4. Arbeiten Sie mit Wifi in meiner iphone Anwendung
- 5. Wie verbinde ich mich mit versteckten Wifi-Netzwerk mit nmcli
- 6. Wifi mit GameKit
- 7. Verbinden mit Open WiFi
- 8. Wie bekomme ich den Gerätenamen meines Geräts mit Wifi p2p
- 9. Not-Wifi-Verbindung mit Telefonerkennungsprüfung
- 10. Wie kann ich mit ListView.Item.CurrentItem arbeiten
- 11. Wie beginne ich mit GwtQuery zu arbeiten?
- 12. Wie man mit Wifi verbindet Kamera ios
- 13. Arduino Wifi Passphrase mit \ 0
- 14. Ich möchte meine POST-Daten mit SESSIONS
- 15. Wie mit array_map arbeiten
- 16. Adafruit CC3000 wifi mit HTTPserver.ino
- 17. Wie kann ich mit RTTI auf Delphi Array-Eigenschaften zugreifen?
- 18. Arbeiten WorkAreas auf ListViews in Delphi?
- 19. Erreichbarkeit: Flugmodus mit Wifi ON
- 20. Client - Server auf lokalem Wifi Delphi XE7 Projekt VCL
- 21. Wie Skin Delphi-Komponenten mit Grafikdateien?
- 22. Wie mit AST mit Cofree Annotation arbeiten?
- 23. Ich möchte für Looping mit enter
- 24. Ich möchte Zickzack-Polylinie mit google map
- 25. Wie bekomme ich PNGs in D2009 arbeiten?
- 26. Ich möchte meine eigenen Tabellen erstellen und daran arbeiten
- 27. Ich möchte verwandtes Zeitfeld mit datetimepicker machen
- 28. Apache2 mit Python2.7 & Ich möchte Python3.4 verwenden
- 29. Ich möchte mit drei verschiedenen conditons
- 30. Ich möchte Benachrichtigung über signalR mit Thread
Vielleicht möchten Sie eine Version von Delphi veröffentlichen, die Sie verwenden. – TrueWill