आप उस उद्देश्य के लिए Network List Manager API का उपयोग कर सकते हैं, इसे सी # आयात नेटवर्क सूची प्रबंधक प्रकार लाइब्रेरी से उपयोग करने के लिए (संदर्भित गुणों में एम्बेड इंटरप प्रकारों को अनचेक करने के नीचे इस उदाहरण को सीधे संकलित करने के लिए)।
फिर आपको सभी जुड़े नेटवर्कों का आकलन करना चाहिए, क्योंकि एक से अधिक हो सकते हैं, उदाहरण के लिए अभी मैं इंटरनेट और वीपीएन से जुड़ा हूं। फिर सभी जुड़े नेटवर्कों के लिए GetCategory() एपीआई कॉल करें, यह 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();
आप तो फ़ायरवॉल एपीआई और संदर्भ COM पुस्तकालय NetFwTypeLib का उपयोग करें और सक्रिय प्रोफ़ाइल के लिए INetFwProfile प्राप्त करने के लिए, है सेवाओं में फ़ाइल साझा, नेटवर्क डिस्कवरी और रिमोट देखते हैं:
यहाँ नमूना कोड है डेस्कटॉप सेवाएं, और यदि यह सक्षम हैं तो एक बूल ध्वज है। (सिर्फ चेतावनी देने के लिए मैं उत्पादन में नीचे दिए गए कोड का उपयोग नहीं किया मैं तो बस इस एपीआई तलाश रहा है)
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 !");
}
स्रोत
2013-10-08 00:24:51
क्या यह मदद करता है? http://stackoverflow.com/questions/6578480/unable-to-obtain-profile-of-connected-network-in-vista-7 –
@JunWeiLee धन्यवाद, यह सीधे मदद नहीं करता है। यह एक कोड स्निपेट है जो उपयोगकर्ता [प्रबंधित वाईफ़ाई एपीआई] (http://managedwifi.codeplex.com/) जो [मूल वाईफ़ाई एपीआई] को लपेटता है (http://msdn.microsoft.com/en-us/library/ ms705969.aspx)। – slugster