Trong chương trình Delphi (trên Windows Xp) của tôi, tôi muốn kiểm tra các mạng WiFi có sẵn. Bạn có bất kỳ ý tưởng làm thế nào để làm điều đó? Tốt nhất là có thể sử dụng chức năng MS WlanScan API nhưng tôi không tìm thấy một ví dụ. Ai đó có thể giúp tôi?Tôi muốn làm việc với Wifi với Delphi. Làm sao?
Trả lời
Bạn có thể sử dụng Native Wifi API, có sẵn từ Windows Vista và Windows XP. Các phiên bản Windows cũ hơn không được hỗ trợ.
Trong số này link bạn có thể tìm thấy bản dịch rất đẹp của tiêu đề.
Tôi đã viết mã này bằng cách sử dụng các tiêu đề này. Thử nghiệm trong Delphi 2007 và 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.
Liên kết đến WlanAPI.zip tải xuống bị hỏng. Đây là một liên kết hoạt động: http://www.delphibasics.info/home/delphibasicsprojects/wifiscanner – kobik
Bạn có thể tới này cũng bằng cách thực hiện một truy vấn WMI:
SELECT * FROM MSNdis_80211_ServiceSetIdentifier
Nếu bạn đang tìm kiếm đặc biệt cho việc thực hiện delphi, có một thư viện WMI sẵn từ Magenta Systems trong đó bao gồm nguồn đầy đủ và có thể được sử dụng một cách tự do . Bản tải xuống có sẵn bao gồm tệp thực thi được biên dịch nơi bạn có thể thử truy vấn này để xem nó có chứa tất cả dữ liệu mà bạn đang tìm kiếm hay không. Nhược điểm duy nhất của phương pháp này là dịch vụ WMI phải đang chạy (thông thường đây không phải là vấn đề lớn).
- 1. Tại sao tôi muốn làm git rebase?
- 2. Tôi muốn làm việc với trường hợp nhạy cảm trên OS X. Có thể không?
- 3. Delphi - Khung làm việc luồng
- 4. Làm việc với System.ComponentModel
- 5. Tại sao makecontext không làm việc với pthreads
- 6. Tại sao asort làm việc với các mảng đa chiều?
- 7. Ankhsvn Lỗi: Khách hàng quá cũ để làm việc với bản sao làm việc
- 8. Khách hàng này quá cũ để làm việc với bản sao làm việc
- 9. Tại sao Rails không thể làm việc với mod_ruby?
- 10. Tại sao không Tabindex làm việc với Firefox?
- 11. Làm việc với WSDL.How to?
- 12. Làm việc với WTForms FieldList
- 13. tìm nạp so với [] khi làm việc với băm?
- 14. Làm việc với python OAuth
- 15. Làm việc với Ogg Vorbis
- 16. Làm việc Android với Arduino
- 17. Kết hợp máy tính Windows của tôi với một AP wifi với Python
- 18. HibernateException với setTimestamp nhưng làm việc với setParameter
- 19. F # làm việc với vòng lặp while
- 20. HashMap không làm việc với int, char
- 21. ReferenceEquals làm việc sai với dây
- 22. Làm thế nào tôi có thể làm cho deleteRowsAtIndexPaths: làm việc với GenericTableViewController?
- 23. Tại sao RegistraitonID không hợp lệ với GCM - làm việc với phonegap cho android?
- 24. Làm việc với set_index trong Pandas DataFrame
- 25. JSLint báo cáo việc sử dụng bất ngờ '&' và '|' - Tôi muốn làm sạch
- 26. AsyncCall với Delphi 2007
- 27. GIT_EDITOR không làm việc với MacVim
- 28. Có thể làm việc Massive với MySql?
- 29. C# ToCharArray không làm việc với char *
- 30. XElement.Descendants không làm việc với namespace
Bạn có thể muốn đăng phiên bản Delphi nào bạn đang sử dụng. – TrueWill