私のDelphi(Windows Xp上)プログラムでは、利用可能なWiFiネットワークを確認したいと思います。どのようにそれを行うか考えていますか?最高のMS WlanScan API関数を使用することですが、私は例を見つけませんでした。誰か助けてくれますか?私はDelphiでWifiを使いたいと思っています。どうやって?
答えて
Native Wifi APIは、Windows VistaおよびWindows XP以降で使用できます。古いバージョンのWindowsはサポートされていません。
このlinkには、ヘッダーの翻訳があります。
私はこれらのヘッダーを使用してこのコードを書いています。 Delphi 2007および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
さようなら。
WlanAPI.zipダウンロードへのリンクが壊れています。ここに実用的なリンクがあります:http://www.delphibasics.info/home/delphibasicsprojects/wifiscanner – kobik
あなたは、WMIクエリを実行しても、これに得ることができます。
SELECT * FROM MSNdis_80211_ServiceSetIdentifier
あなたは、具体的Delphiの実装を探している場合は、完全なソースが含まれており、自由に使用することができるMagenta Systemsから利用できるWMIライブラリがあります。利用可能なダウンロードには、コンパイルされた実行可能ファイルが含まれています。この実行可能ファイルには、このクエリを使用して、探しているすべてのデータが含まれているかどうかを確認できます。この方法の唯一の欠点は、WMIサービスが実行されていなければならないことです(通常はこれで問題はありません)。
- 1. 私は基底クラスを使いたいと思っていますが、私はこれをどうやって行うのですか? c#
- 2. 私はwordpressで国固有のURLを作成したいと思います。どうやってするか?
- 3. コードオプションは、私がやりたいと思っています何のTextElement
- 4. 私が思っていた
- 5. C#の:あなたはたとえば持っているとき、私はちょうど思っていた
- 6. は、私は思っていた
- 7. 私は、彼らがやっていることを知っているが、私はまだスクリプトを学んでいる誰かのためだと思う
- 8. 私のuitableviewに2番目の列を追加したいと思います。どうやって?
- 9. 私は普通のブラウザの代わりにカールを使っていましたが、私はユーザー名とパスワードを持っていました!どうやって?
- 10. は私が思っていたC
- 11. 私はアタリブレイクアウトクローンを作っています。ボールがブロックの特定の面に当たったかどうかを知りたいと思っています
- 12. 親要素は、私がmouseleave()をやっていると思うと考えています
- 13. フックは、私が知っているしたいと思い
- 14. ホストでVMWareとEclispeでPHPを使用する。 Eclipse-BrowserでPHPページを見たいと思っています。どうやって?その場に続き
- 15. 私はbarchartを使って、javascriptのサウンドをビジュアル化したいと思っています。
- 16. 私はデータベースから2つの列をvb.netを使ってコンボボックスにバインドしたいと思っています
- 17. SQL - 私はMYSQLに知っていただきたいと思います
- 18. 私はコンテンツでスライドショーを作りたいと思っています
- 19. は "httpd-access.txt"というファイルを持っていて、私はPythonで行が '81'で始まる回数を数えたいと思っています
- 20. 私はPythonを学びたいと思っています。Pythonを学びたいと思っています。もし、elifなら、
- 21. グローバリゼーションとローカリゼーション:いつ?どうやって?
- 22. 使用は私がやっている
- 23. Javaは、私は、このコマンドを実行したいと思っています
- 24. string()はstrconv.Itoa()がやりたいと思ったことを行います
- 25. 私はこれに似たフォームを書こうと思っています。
- 26. RubyMineでWSLのgitをどうやって使いますか?
- 27. は、私はいつもこのことについて不思議に思っていました
- 28. 私はACTION_MOVEのビットマップをスケールしたいと思っています。
- 29. #PHP私はコードをより良くしたいと思っています
使用しているDelphiのバージョンを投稿することができます。 – TrueWill