7

既に無効になっているカードを有効にする必要があり、WMI NetworkAdapter のサーチャーがオブジェクトを返さないという問題があります。

これを行う方法を考えることはできますが、それを機能させることができませんでした。つまり、これをコンストラクター名として使用して managementObject を作成することです。しかし、これは例外をスローするだけです

{\\.\root\CIMV2:Win32_NetworkAdapter.NetConnectionID='Wireless Network Connection'}

もう1つの方法は、netshをシェルしてデバイスを有効にすることでしたが、これはちょっと醜いです。または、shell32/dll "Enable"を使用して同じことを行い、両方とも名前だけを渡します。レジストリ スキャンから名前を取得しHKLM\SYSTEM\CurrentControlSet\Network、MediaType=2 を探して、ワイヤレス デバイスの文字列リストを取得しました。ワイヤレス デバイスの networkObject を取得できるため、アダプターが有効なときにアプリケーションを実行すれば問題ありませんが、ワイヤレス デバイスが無効なときにアプリケーションを起動すると、すべて失敗します。

ありがとう

編集:これは私が働きたいコードですが、行きません:(

using System;
using System.Management;
class Sample
{
    public static int Main(string[] args)
    {
        ManagementObject mObj = new ManagementObject("\\\\.\\root\\CIMV2:Win32_NetworkAdapter.NetConnectionID=\"Wireless Network Connection\"");
        mObj.InvokeMethod("Enable", null);
        return 0;
    }
}
4

2 に答える 2

1

Win32_NetworkAdapterこのメソッドは、基本的に C# を使用して WMI とクラスを活用しています。次のメソッドが組み込まれている必要があります。

  • 有効
  • 無効にする

したがって、選択したインターフェイスでコマンドを実行できます。

次の方法でそれを実現できます。

SelectQuery query = new SelectQuery("Win32_NetworkAdapter", "NetConnectionStatus=2");
ManagementObjectSearcher search = new ManagementObjectSearcher(query);
foreach(ManagementObject result in search.Get())
{
    NetworkAdapter adapter = new NetworkAdapter(result);

    // Identify the adapter you wish to disable here. 
    // In particular, check the AdapterType and 
    // Description properties.

    // Here, we're selecting the LAN adapters.
    if (adapter.AdapterType.Equals("Ethernet 802.3")) 
    {
        adapter.Disable();
    }
}

実際にそのような作業の概要を説明しているブログがあります。WMI クラスの周りにラッパーを作成する方法を定義します。

別の解決策として、(advapi32)も使用することがあります。ControlService

[DllImport("advapi32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool    ControlService(IntPtr hService, SERVICE_CONTROL dwControl, ref SERVICE_STATUS lpServiceStatus);

うまくいけば、それらの方法の1つが役立つ..

于 2013-04-01T20:44:33.250 に答える
0
            using System;
            using System.Collections.Generic;
            using System.ComponentModel;
            using System.Data;
            using System.Drawing;
            using System.Linq;
            using System.Text;
            using System.Windows.Forms;
            using System.Diagnostics;
            using System.Security.Principal;

            namespace WifiRouter
            {
                public partial class Form1 : Form
                {
                    bool connect = false;
                    public Form1()
                    {

                        InitializeComponent();
                    }

                    public static bool IsAdmin()
                    {
                        WindowsIdentity id = WindowsIdentity.GetCurrent();
                        WindowsPrincipal p = new WindowsPrincipal(id);
                        return p.IsInRole(WindowsBuiltInRole.Administrator);
                    }
                    public void RestartElevated()
                    {
                        ProcessStartInfo startInfo = new ProcessStartInfo();
                        startInfo.UseShellExecute = true;
                        startInfo.CreateNoWindow = true;
                        startInfo.WorkingDirectory = Environment.CurrentDirectory;
                        startInfo.FileName = System.Windows.Forms.Application.ExecutablePath;
                        startInfo.Verb = "runas";
                        try
                        {
                            Process p = Process.Start(startInfo);
                        }
                        catch
                        {

                        }

                        System.Windows.Forms.Application.Exit();
                    }
                    private void button1_Click(object sender, EventArgs e)
                    {
                        string ssid = textBox1.Text, key = textBox2.Text;
                        if (!connect)
                        {
                            if (String.IsNullOrEmpty(textBox1.Text))
                            {
                                MessageBox.Show("SSID cannot be left blank !",
                                "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            else
                            {

                                if (textBox2.Text == null || textBox2.Text == "")
                                {
                                    MessageBox.Show("Key value cannot be left blank !",
                                    "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                                else
                                {
                                    if (key.Length >= 6)
                                    {
                                        Hotspot(ssid, key, true);
                                        textBox1.Enabled = false;
                                        textBox2.Enabled = false;
                                        button1.Text = "Stop";
                                        connect = true;
                                    }
                                    else
                                    {
                                        MessageBox.Show("Key should be more then or Equal to 6 Characters !",
                                        "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    }
                                }
                            }
                        }
                        else
                        {
                            Hotspot(null, null, false);
                            textBox1.Enabled = true;
                            textBox2.Enabled = true;
                            button1.Text = "Start";
                            connect = false;
                        }
                    }
                    private void Hotspot(string ssid, string key,bool status)
                    {
                        ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd.exe");
                        processStartInfo.RedirectStandardInput = true;
                        processStartInfo.RedirectStandardOutput = true;
                        processStartInfo.CreateNoWindow = true;
                        processStartInfo.UseShellExecute = false;
                        Process process = Process.Start(processStartInfo);

                        if (process != null)
                        {
                            if (status)
                            {
                                process.StandardInput.WriteLine("netsh wlan set hostednetwork mode=allow ssid=" + ssid + " key=" + key);
                                process.StandardInput.WriteLine("netsh wlan start hosted network");
                                process.StandardInput.Close();
                            }
                            else
                            {
                                process.StandardInput.WriteLine("netsh wlan stop hostednetwork");
                                process.StandardInput.Close();
                            }
                        }
                    }

                    private void Form1_Load(object sender, EventArgs e)
                    {
                        if (!IsAdmin())
                        {
                            RestartElevated();
                        }
                    }

                    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
                    {
                        Hotspot(null, null, false);
                        Application.Exit();
                    }
                }
            }
于 2016-11-07T20:57:53.843 に答える