WPF开发总结篇(一)

WPF 开发总结:

1、启用/禁用网络设备

通过调用win32 API hnetcfg.dll 具体索引路径为 :C:\Windows\System32,具体实现方法如下:

​ using NETCONLib;

         /// <summary>
        /// 禁用已连接的网络,重新启用连接
        /// </summary>
        public static void UpdateNetScan()
        {
            NetSharingManagerClass netSharingMgr = new NetSharingManagerClass();
            INetSharingEveryConnectionCollection connections = netSharingMgr.EnumEveryConnection;
            foreach (INetConnection connection in connections)
            {
                INetConnectionProps connProps = netSharingMgr.get_NetConnectionProps(connection);
                INetSharingConfiguration netSharingConfiguration = netSharingMgr.get_INetSharingConfigurationForINetConnection(connection);
            INetSharingPortMappingCollection objects = netSharingConfiguration.get_EnumPortMappings(tagSHARINGCONNECTION_ENUM_FLAGS.ICSSC_DEFAULT);
            Console.WriteLine(connProps.MediaType.ToString());
            string name = connProps.Name;
            string DeviceName = connProps.DeviceName;
            uint uinta = connProps.Characteristics;
            if (DeviceName.Equals("以太网"))
                if (connProps.MediaType == tagNETCON_MEDIATYPE.NCM_LAN || connProps.MediaType == tagNETCON_MEDIATYPE.NCM_PPPOE)
                {
                    try
                    {
                        if (connProps.Status == tagNETCON_STATUS.NCS_CONNECTED)
                            connection.Disconnect(); //禁用网络
                        if (connProps.Status == tagNETCON_STATUS.NCS_DISCONNECTED)
                            connection.Connect();    //启用网络
                    }
                    catch (Exception)
                    {
                    }
                }
        }
        //UpdataNetScan2();
    }

2、WPF 开发的软件,被远程桌面打开的一个问题:

​ 通过远程登录运行WPF应用程序的电脑,UserControl控件的Loaded事件会重复触发:仅限Win10系统,Win7的不会;类似的事情,多个加载事件,也会发生在TabControl中;

​ 官方解释:当连接到远程会话时,操作系统会向每个窗口发送主题更改通知 (WM_THEMECHANGE)。Win7没有这样做,但Win10却这样做了。

​ 解决方案:将loaded事件中的实现尽量放在初始化中;

官方回答过这个问题,可参考 https://github.com/dotnet/wpf/issues/4360;

https://learn.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.loaded?view=windowsdesktop-7.0&viewFallbackFrom=net-5.0#remarks

3、获取CPUID以及获取主板ID

​ ///
​ /// 获取CPUID
​ ///
​ ///
​ ///

  • ​ public static bool GetCpuID(string processorid)
  • ​ {
  • ​ System.Management.ManagementClass mc = new ManagementClass(“win32_processor”);
  • ​ ManagementObjectCollection moc = mc.GetInstances();
  • ​ foreach (ManagementObject mo in moc)
  • ​ {
  • ​ string cpuid = mo[“processorid”].ToString();
  • ​ if (cpuid.Equals(processorid)) return true;
  • ​ }
  • ​ return false;
  • ​ }

​ ///
​ /// 获取主板ID
​ ///
​ ///
​ ///

  • ​ public static bool GetSerialNumberID(string SerialNumber)
  • ​ {
  • ​ System.Management.ManagementObjectSearcher searcher = new System.Management.ManagementObjectSearcher(“SELECT * FROM Win32_PhysicalMedia”);
  • ​ foreach (ManagementObject mo in searcher.Get())
  • ​ {
  • ​ string result = mo[“SerialNumber”].ToString().Trim();
  • ​ if (SerialNumber.Equals(result)) return true;
  • ​ }
  • ​ return false;
  • ​ }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值