この目的のために、Network List Manager APIを使用して、C#インポートネットワークリストマネージャタイプライブラリから使用することができます(この例を直接コンパイルして参照プロパティに埋め込みます)。
次に、複数のネットワークが存在する可能性があるため、接続されているすべてのネットワークを列挙する必要があります。たとえば、現在インターネットとVPNに接続しています。接続されたすべてのネットワークでGetCategory() APIを呼び出すと、NLM_NETWORK_CATEGORY(プライベート、パブリックまたはドメイン)が返されます。
var manager = new NetworkListManagerClass();
var connectedNetworks = manager.GetNetworks(NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_CONNECTED).Cast<INetwork>();
foreach (var network in connectedNetworks)
{
Console.Write(network.GetName() + " ");
var cat = network.GetCategory();
if (cat == NLM_NETWORK_CATEGORY.NLM_NETWORK_CATEGORY_PRIVATE)
Console.WriteLine("[PRIVATE]");
else if (cat == NLM_NETWORK_CATEGORY.NLM_NETWORK_CATEGORY_PUBLIC)
Console.WriteLine("[PUBLIC]");
else if (cat == NLM_NETWORK_CATEGORY.NLM_NETWORK_CATEGORY_DOMAIN_AUTHENTICATED)
Console.WriteLine("[DOMAIN]");
}
Console.ReadKey();
ネットワーク探索のためにあなたがして、ファイアウォールAPIリファレンスCOMライブラリNetFwTypeLibを使用して、アクティブなプロファイルのINetFwProfileを取得する必要がサービスにおけるファイル共有、ネットワーク探索とリモートがあります。ここでは
は、サンプルコードですデスクトップサービスであり、これらが有効の場合はboolフラグがあります。 (ちょうどあなたを警告するために、私はちょうどこのAPIを模索した生産のコードの下に使用していませんでした)
Type objectType = Type.GetTypeFromCLSID(new Guid("{304CE942-6E39-40D8-943A-B913C40C9CD4}"));
var man = Activator.CreateInstance(objectType) as INetFwMgr;
/// get current profile
INetFwProfile prof = man.LocalPolicy.CurrentProfile;
Console.WriteLine("Current profile ");
ShowProfileServices(prof);
とプロファイルサービスを示し方法:ここではサンプルコードです。
private static void ShowProfileServices(INetFwProfile prof)
{
var services = prof.Services.Cast<INetFwService>();
var sharing = services.FirstOrDefault(sc => sc.Name == "File and Printer Sharing");
if (sharing != null)
Console.WriteLine(sharing.Name + " Enabled : " + sharing.Enabled.ToString());
else
Console.WriteLine("No sharing service !");
var discovery = services.FirstOrDefault(sc => sc.Name == "Network Discovery");
if (discovery != null)
Console.WriteLine(discovery.Name + " Enabled : " + discovery.Enabled.ToString());
else
Console.WriteLine("No network discovery service !");
var remoteDesktop = services.FirstOrDefault(sc => sc.Name == "Remote Desktop");
if (remoteDesktop != null)
Console.WriteLine(remoteDesktop.Name + " Enabled : " + remoteDesktop.Enabled.ToString());
else
Console.WriteLine("No remote desktop service !");
}
これはまったく役に立ちますか? http://stackoverflow.com/questions/6578480/unable-to-obtain-profile-of-connected-network-in-vista-7 –
@JunWeiLeeありがとう、それは直接助けません。これは、[ネイティブWifi API](http://msdn.microsoft.com/en-us/library/)をラップする[Managed Wifi API](http://managedwifi.codeplex.com/)を使用するコードスニペットです。 ms705969.aspx)。 – slugster