powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сверить сетевую по маку
8 сообщений из 8, страница 1 из 1
Сверить сетевую по маку
    #38943426
2viper2viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хочу отследить подкл/отключ сетевого кабеля. но есть и другие сетевые адаптеры. их статус отслеживать не нужно
так вроде можно получить маки
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        public string GetMACAddress()
        {
            NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
            String sMacAddress = string.Empty;
            foreach (NetworkInterface adapter in nics)
            {
                if (sMacAddress == String.Empty)// only return MAC Address from first card  
                {
                    IPInterfaceProperties properties = adapter.GetIPProperties();
                    sMacAddress = adapter.GetPhysicalAddress().ToString();
                }
            } return sMacAddress;
        }


а так событие
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 void NetAvailability(object sender, NetworkAvailabilityEventArgs e)
        {
            RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
            ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");
            foreach (ManagementObject item in searchProcedure.Get())
            {
                if (((string)item["NetConnectionId"]) == "Realtek PCIe FE Family Controller") //textBox1.Text)
                {
                    if (e.IsAvailable) 
                    {
                        b = true;
                    }
                    else 
                    {
                        b = false;
                    }
                }
            }
        }



Но как сверить событие для определенной сетевухи (по NetConnectionId почему-то не получается)?
...
Рейтинг: 0 / 0
Сверить сетевую по маку
    #38943443
2viper2viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то есть, как подвязать событие к определенной сетевой карте?
...
Рейтинг: 0 / 0
Сверить сетевую по маку
    #38943480
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А куда событие цепляется? sender кто?
...
Рейтинг: 0 / 0
Сверить сетевую по маку
    #38943537
2viper2viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, срабатывает при актив/деактив любого из сетевых адаптеров
...
Рейтинг: 0 / 0
Сверить сетевую по маку
    #38943809
2viper2viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел такой код но что-то не сростается..
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 void NetAvailability(object sender, NetworkAvailabilityEventArgs e)
        {
            //ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");

            ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");
            foreach (ManagementObject mo in searchProcedure.Get())
            {
                if (mo["MacAddress"].ToString() == "88:51:FB:C6:3C:4B")
                {
                    if (e.IsAvailable)
                    {
                        b = true; label3.Text = "mac найден, доступен";
                    }
                    else
                    {
                        b = false; label3.Text = "mac найден, не доступен";
                    }
                }
                else { label3.Text = "mac не найден"; }
                }
            }




может у кого-то есть текст метода события на событие смены доступности определенного адаптера?.. буду очень признателен
...
Рейтинг: 0 / 0
Сверить сетевую по маку
    #38943833
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2viper2viperAntonariy, срабатывает при актив/деактив любого из сетевых адаптеровпостарайся ответить на тот вопрос, который задавал я, а не тот, который выдумал ты.
...
Рейтинг: 0 / 0
Сверить сетевую по маку
    #38943931
2viper2viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот весь текст класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
 public partial class Form1 : Form
    {
        Timer timer;
        public bool b;
        public string mac;
        [DllImport(@"C:\Windows\winsxs\x86_microsoft-windows-i..tocolimplementation_31bf3856ad364e35_11.2.9600.17501_none_88153be5fe8d0559\wininet.dll")]
        public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
        public const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
        public const int INTERNET_OPTION_REFRESH = 37;
        static bool settingsReturn, refreshReturn;
        public Form1()
        {
            InitializeComponent();
            fillcombo();
            startconf();
            NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetAvailability);
            button1.Visible = true;
        }

        private void startconf()
        {
            if (Properties.Settings.Default.autodtc == true)
            {
                textBox1.Visible = false;
                label2.Visible = false;
                comboBox1.Enabled = false;
                checkBox2.Checked = true;
                textBox1.Text = Properties.Settings.Default.mac;
            }
            else
            {
                textBox1.Visible = false;
                label2.Visible = false;
                checkBox2.Checked = false;
            }
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked == true)
            {
                textBox1.Visible = true;
                comboBox1.Enabled = false;
                label2.Visible = true;
              //  comboBox1.Text = "Активировано автоопределение";
            }
            else
            {
                textBox1.Visible = false;
                label2.Visible = false;
                comboBox1.Enabled = true;
            }
            button1.Visible = true;
        } 
        
              
        public void fillcombo()
        {
            this.comboBox1.Items.Add("Работа");
            this.comboBox1.Items.Add("Без прокси");
            this.comboBox1.Text = "Работа";
        }

        
        public  void setpr()
        {
            RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
            if (comboBox1.Text == "Работа")
            {
                registry.SetValue("ProxyEnable", 1);
                registry.SetValue("ProxyServer", "192.168.1.1:3128");
            }
            else
            {
                registry.SetValue("ProxyEnable", 0);
            }
            settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
            refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);          
        }

        public void setprmac()
        {
            RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
            if (b == true)
            {
                registry.SetValue("ProxyEnable", 1);
                registry.SetValue("ProxyServer", "192.168.1.1:3128");
            }
            else
            {
                registry.SetValue("ProxyEnable", 0);
            }
            settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
            refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);    
        }

        void timer_Tick(object sender, EventArgs e)
        {
            NetAvailability();
        }

        void NetAvailability(object sender, NetworkAvailabilityEventArgs e)
        {
            //ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");

            ManagementObjectSearcher searchProcedure = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionId != NULL");
            foreach (ManagementObject mo in searchProcedure.Get())
            {
                if (mo["MacAddress"].ToString() == "88:51:FB:C6:3C:4B")
                {
                    if (e.IsAvailable)
                    {
                        b = true; label3.Text = "mac найден, доступен";
                    }
                    else
                    {
                        b = false; label3.Text = "mac найден, не доступен";
                    }
                }
                else { label3.Text = "mac не найден"; }
                }
            }
        


        
        private void button1_Click(object sender, EventArgs e)
        {
            var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run\", true);
            if (checkBox1.Checked == true)
            {
                key.SetValue("ProxySwitcher", Application.ExecutablePath);
            }
            else
            {
                try { key.DeleteValue("ProxySwitcher"); }
                catch (Exception ex) { } 
            }

            timer = new Timer();
            timer.Interval = 100;
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();

            if (checkBox2.Checked == true) 
            {
                setprmac();
                Properties.Settings.Default.mac = textBox1.Text;
                Properties.Settings.Default.autodtc = true;
                Properties.Settings.Default.Save();
            }
            if (checkBox2.Checked == false)
            {
                setpr();            
                Properties.Settings.Default.mac = null;
                Properties.Settings.Default.autodtc = false;
                Properties.Settings.Default.Save();                
            }
            button1.Visible = false;
        }



        private void Form1_Deactivate(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized) 
            { 
                  this.ShowInTaskbar = false; 
                  notifyIcon1.Visible = true;
            }
        
        }

        private void notifyIcon1_Click(object sender, EventArgs e)
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.WindowState = FormWindowState.Normal;
                this.ShowInTaskbar = true;
                notifyIcon1.Visible = false;
            }
        }

        private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            button1.Visible = true;
        } 
        
    }



добавил таймер, но ругается на
Код: c#
1.
2.
3.
4.
void timer_Tick(object sender, EventArgs e)
        {
            NetAvailability();
        }


Ни одна из перегрузок метода "NetAvailability" не принимает "0" аргументов
Antonariy, я не силен в этой части, но так понял, сендер в этом случае - таймер (и ошибку допустил в том, что ничем не вызывал метод NetAvailability)
Что нужно исправить в методе timer_Tick?
...
Рейтинг: 0 / 0
Сверить сетевую по маку
    #38943986
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкинуть его нахрен, он не нужен.

Сендер - NetworkChange, но он не обладает, как я надеялся, информацией об интефейсе, статус которого изменился.

Единственный видимый мной вариант следующий: при запуске программы запоминать состояние всех интерфейсов, а в событии сравнивать с запомненным. Ну и обновлять запомненное. Шанс на то, что статус изменится одновременно у обоих адаптеров, довольно низок, и скорее всего, даже если вырубить роутер, в который воткнуты оба кабеля, произойдут два события одно за другим.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сверить сетевую по маку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]