首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用c# wpf获取网络上所有已连接设备的操作系统名称

使用C# WPF获取网络上所有已连接设备的操作系统名称可以通过以下步骤实现:

  1. 获取本地网络的IP地址范围:可以使用System.Net.NetworkInformation命名空间下的NetworkInterface类和IPAddress类,通过遍历本地网络接口获取本地IP地址范围。
  2. 扫描IP地址范围内的设备:使用System.Net.NetworkInformation.Ping类,向每个IP地址发送Ping请求,通过判断是否有响应来确定设备是否在线。
  3. 获取在线设备的操作系统名称:可以通过使用System.Management命名空间下的ManagementObjectSearcherManagementObject类,利用WMI(Windows Management Instrumentation)查询操作系统相关信息。具体可以通过查询Win32_OperatingSystem类的Caption属性来获取操作系统名称。

以下是一种实现方式的示例代码:

代码语言:txt
复制
using System;
using System.Collections.Generic;
using System.Net;
using System.Net.NetworkInformation;
using System.Management;

namespace GetConnectedDevicesOS
{
    public class DeviceInfo
    {
        public string IpAddress { get; set; }
        public string OsName { get; set; }
    }

    public class DeviceScanner
    {
        public List<DeviceInfo> GetConnectedDevicesOS()
        {
            List<DeviceInfo> connectedDevices = new List<DeviceInfo>();

            // 获取本地网络的IP地址范围
            List<IPAddress> localIpAddresses = GetLocalIpAddresses();
            foreach (IPAddress localIpAddress in localIpAddresses)
            {
                // 扫描IP地址范围内的设备
                List<IPAddress> connectedIpAddresses = GetConnectedIpAddresses(localIpAddress);
                foreach (IPAddress connectedIpAddress in connectedIpAddresses)
                {
                    // 获取在线设备的操作系统名称
                    string osName = GetDeviceOsName(connectedIpAddress);

                    // 构造设备信息对象
                    DeviceInfo deviceInfo = new DeviceInfo
                    {
                        IpAddress = connectedIpAddress.ToString(),
                        OsName = osName
                    };

                    connectedDevices.Add(deviceInfo);
                }
            }

            return connectedDevices;
        }

        private List<IPAddress> GetLocalIpAddresses()
        {
            List<IPAddress> localIpAddresses = new List<IPAddress>();

            NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
            foreach (NetworkInterface networkInterface in networkInterfaces)
            {
                if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
                    networkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
                {
                    IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
                    foreach (IPAddressInformation ipInformation in ipProperties.UnicastAddresses)
                    {
                        if (ipInformation.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            localIpAddresses.Add(ipInformation.Address);
                        }
                    }
                }
            }

            return localIpAddresses;
        }

        private List<IPAddress> GetConnectedIpAddresses(IPAddress localIpAddress)
        {
            List<IPAddress> connectedIpAddresses = new List<IPAddress>();

            Ping pingSender = new Ping();
            string baseIpAddress = localIpAddress.ToString();
            baseIpAddress = baseIpAddress.Substring(0, baseIpAddress.LastIndexOf('.') + 1);

            for (int i = 1; i < 255; i++)
            {
                string ipAddress = baseIpAddress + i.ToString();
                PingReply reply = pingSender.Send(ipAddress, 200);

                if (reply.Status == IPStatus.Success)
                {
                    connectedIpAddresses.Add(IPAddress.Parse(ipAddress));
                }
            }

            return connectedIpAddresses;
        }

        private string GetDeviceOsName(IPAddress ipAddress)
        {
            string osName = string.Empty;

            try
            {
                ConnectionOptions connectionOptions = new ConnectionOptions();
                ManagementScope managementScope = new ManagementScope($"\\\\{ipAddress}\\root\\CIMv2", connectionOptions);
                ObjectQuery objectQuery = new ObjectQuery("SELECT Caption FROM Win32_OperatingSystem");
                ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(managementScope, objectQuery);
                ManagementObjectCollection managementObjectCollection = managementObjectSearcher.Get();

                foreach (ManagementObject managementObject in managementObjectCollection)
                {
                    osName = managementObject["Caption"].ToString();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return osName;
        }
    }
}

这是一个简单的C# WPF应用程序,通过调用GetConnectedDevicesOS方法可以获取所有已连接设备的IP地址和操作系统名称。注意,该示例代码中未涉及腾讯云的产品和链接地址,如需添加相关推荐,可以根据实际需求自行添加。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

尝新体验ASP.NET Core 6预览版本中最小Web API(minimal APIS)新特性

与之前ASP.NET Core Web API相比,最小Web API在启动模板和框架结构都有些不同。...准备工作 在开始创建最小Web API之前,请确保开发环境中安装了.NET SDK 6.0.100-preview.7.21379.14(当前最新.NET SDK版本),在Windows操作系统中,...你可以使用.NET Cli命令来查看,比如: dotnet --info 运行结果如下图: 如果需要查看当前环境安装.NET模板,运行如下命令: dotnet new -l 运行结果如下: Template...[C#],F#,VB Test/xUnit 创建最小API程序项目 在.NET Core中创建程序方式有多种,可以使用命令行工具执行dotnet new 创建,也可以使用IDE...使用Visual Studio创建最小API项目 使用Visual Studio创建最小API项目,请确保安装Visual Studio 2022 17.0.0 Preview 3.0(当前最新版本)

5.1K30

.NET Core.NET5.NET6 开源项目汇总9:客户端跨平台UI框架

系列目录 【更新最新开发文章,点击查看详细】 .NET Core 实现了跨平台,支持在 Windwos、Linux、macOS开发与部署,但是也仅限于Web应用程序。...因为它们UI与Windwos操作系统底层技术紧密关联,所以在Linux、macOS无法实现相同UI功能。目前对于跨平台桌面端UI需求,.NET还没有统一完整解决方案。...产品特征 针对所有操作系统和浏览器 UNO是唯一用于创建真正单一来源、多平台应用程序开放源代码平台。跨本机移动、web和桌面重用99%业务逻辑和UI层。...C#和XAML提高生产率 使用C#和XAML熟悉性和丰富性,以及热重新加载、热重启、编辑和继续等方面的生产力提升开发效率。 ? 强大IDE支持。...简洁、直观、强悍netcore跨平台UI开发框架。框架理念和WPF类似,但是没有Xaml,直接用CSS和C#代码描述。

10.6K21

WPF入门到放弃(二) | 初识XAML

WPF入门到放弃(一) | 安装与创建 说明: 本文主要介绍WPF(Windows Presentation Foundation),是微软推出一项基于windows操作系统、.NET平台C/S客户端构建技术...下面来具体学习一下,一节结束时建项目: 上面一段代码是自动生成,让我们来分解此XAML代码,以便更好地了解它。...xmlns是xml-namespace缩写,是用来定义名称空间,当来源不同类重名时,可以使用名称空间加以区分。xmlns后可以跟一个可选映射前缀,之间用冒号分割。...下面看一下如何将C#类如何在xaml中使用。...好了这期xaml学习就到这里,主要是对命名空间一些理解。需要反编译工具ILSpy可以联系管理员获取,以下是WPF按照功能分类控件,后期会做个串口调试助手实战来学习。

1.7K30

dotnet 从入门到放弃 500 篇文章合集

本文是记录我从入门到放弃写博客 博客包括 C#WPF、UWP、dotnet core 、git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到放弃...,求距离C# 强转会不会抛出异常 C# 很少人知道科技 C# 快速释放内存大数组 C# 搜索算法 C# 获得设备usb信息 C# 转换类型和字符串 C# 遍历枚举 C# 金额转中文大写 C#将...win10 uwp 绑定密码 win10 uwp 绑定静态属性 win10 uwp 自定义控件初始化 win10 uwp 获取指定文件 win10 uwp 获取按钮鼠标左键按下 win10 uwp...DataGridTextColumn wpf 绑定 TextLength WPF 编译为 AnyCPU 和 x86 有什么区别 WPF 获得触摸精度和触摸点 WPF 获得触笔悬停元素 WPF 解决...解决 VS 跳转定义和 Resharper 重复 解决 Win10 UWP 无法使用 ss 连接 让 AE 输出 MPEG 调试 ms 源代码 贡献自己服务器搭建tor中转 软件设计 白话依赖注入

10.4K20

.NET周刊【2月第1期 2024-02-04】

【OpenVINO™】在 Windows 使用 OpenVINO™ C# API 部署 Yolov8-obb 实现任意方向目标检测 https://www.cnblogs.com/guojin-blogs...,特别适合于硬件性能低、网络环境差远程设备和应用场景。...广泛应用于物联网设备之间通信,如卫星通信传感器、医疗设备和家居自动化。...文章详细说明了在Linux使用C#和Visual Studio Code设置项目环境,创建控制台项目,添加Nuget包,以及安装依赖项目的步骤。...加速内循环生产力 断点组 增强文本可视化工具 非模态可视化工具 调用堆栈搜索 改进并行堆栈窗口 永久重新连接到调试器进程 CMake调试器 使外部源代码更智能、更快速 跨平台调试支持 使用 Visual

14910

.NET Core.NET5.NET6 开源项目汇总12:WPF组件库2

系列目录 【更新最新开发文章,点击查看详细】 WPF(Windows Presentation Foundation)是微软推出基于Windows 用户界面框架,属于.NET Framework...1、Fluent.Ribbon   Fluent/Ribbon是微软在其最新桌面操作系统Windows 7中使用图形用户界面。 Windows平台进化,伴随着系统图形界面的重新设计。...它是SharpDevelop 4.x“Mirador”及更高版本中基于WPF文本编辑器名称。它也被用于ILSpy和许多其他项目。 ?...使用它来构建外观专业、现代且易于使用WPF应用程序。它已经在这里、Codeplex和NuGet上下载了100多万次。 ? 包含以下控件 ? Plus版本中其他控件和功能 ?...CefSharp采用现代网络标准,支持HTML5、JavaScript、CSS3和HTML5音频/视频元素。通过WebGL支持3D内容,WebGL使用OpenGL/DirectX进行硬件加速渲染。

2.4K10

dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用

本文来安利大家一个有趣而且强大库,通过 F# 和 C# 混合编程编写 WPF 应用,可以在 WPF使用到 F# 强大数据处理能力 在 GitHub 完全开源 Elmish.WPF 库,请看 https...://github.com/elmish/Elmish.WPF 在阅读本文之前,我期望大家了解部分 F# 知识。...这个例子代码完全放在 Elmish.WPF 库里,可以通过 https://github.com/elmish/Elmish.WPF 获取所有代码 咱依然通过 VS 创建一个空白 C# 空白 WPF...程序,在此例子里面,几乎没有 C# 多少戏份,只是为了使用 C# 更好驱动 WPF 程序而已,因为部分初始化方法和类型等在 F# 写起来代码量可不少。...Program 类是在 F# 项目里面编写,也就是说 C# 语言只是胶水,用来做初始化连接 接下来咱来创建一个简单界面,这个界面如下 ?

1.8K20

.NET 体系概览图集- 2024 最全总结

最后4.8.*版本依然还在维护,还是可以使用,支持最低操作系统是Windows 7。...同时,.NET Framework也作为Windows操作系统组件内置在操作系统中。 同一台电脑可以同时安装多个版本 .NET Framework 版本。....NET 7 统一了所有不同 .NET 开发工具组件,使开发人员能够在相同基础类库 (BCL)、运行时和编译器构建所有类型应用(桌面、移动、Web 等)。...如果你想要一个命令行界面(CLI)控制,那么.NET core是最好选择。 仅在Windows平台上运行。好像不算理由。基于 WinForms 或 WPF 应用程序,.NET7支持。...DLL:Dynamic Link Library,动态链接库,包含了编译C#代码、元数据和资源,可以在多个应用程序之间共享和重用。

90510

C#.NET.NET Core优秀项目和框架精选(23年10月更新,欢迎大家踊跃提交PR一起完善让优秀项目和框架不被埋没)

挖,欢迎大家踊跃提交PR或者在该️C#/.NET/.NET Core优秀项目和框架Issues中留言(让优秀项目和框架不被埋没),我会定期收录、公众号推广和分享。...它设计目标是简单易用、高性能、可扩展性强,并支持大规模并发连接。BeetleX基于.NET Core实现,支持跨平台运行,可以运行在Windows、Linux和macOS等系统。...通过 Keras.NET,您可以在 .NET 应用程序中使用 Keras 高级 API 构建和训练神经网络模型。...是一款在Windows操作系统实用工具,它提供了一种快速预览文件内容方式。...FFMpegCore 具有跨平台支持,可以在 Windows、Linux 和 macOS 等操作系统运行。

3.2K01

.NET周刊【5月第3期 2024-05-19】

国内文章 WPF 使用 Shape 实现复杂线条动画 https://www.cnblogs.com/czwy/p/18192720 文章介绍了利用 WPF Shape 和动画功能,模仿 CSS/SVG...通讯调试工具使用 C#WPF 等技术开发,支持 Modbus RTU 和 MQTT 调试,界面色彩丰富。...项目源码和使用文档开源在 GitHub,且被收录至 C#/.NET/.NET Core 优秀项目和框架精选。...Mono 框架是跨平台,支持 Linux、macOS、Windows 等操作系统,包含 C#编译器、.NET 运行环境和类库。...泛型基本语法包括泛型方法与类定义及实例化,泛型接口、委托声明和泛型约束使用。泛型在集合类、数据结构、算法、数据库操作和网络编程等多个场景下都有广泛应用。

9500

WPF 像素着色器入门:使用 Shazzam Shader Editor 编写 HLSL 像素着色器代码

PS_3 带来了比 PS_2 更多功能,但需要注意,不是所有的显卡设备都支持 PS_3,这其中就包括了至今仍在广泛使用 Windows 远程桌面(RDP)。...所以,如果希望让你着色器代码能在目前所有设备正常运行,建议使用 PS_2;如果不在乎这一点,或者你有其他低性能方法(例如用 CPU 画位图)来替代 PS_3,那么还是可以继续用。...生成 C# 代码 继续切换一个标签,你可以看到 Shazzam 为你生成 C# 代码。实际稍后你就可以直接使用这份代码驱动起你刚刚编写特效。 代码风格使用了我们刚刚设置一些全局参数。...留意你 C# 代码,里面是编写了像素着色器路径: 如果你程序集名称是其他名称,需要修改下面 Walterlv.Effects 部分改成你程序集名称; 如果你放到了其他子文件夹中,你也需要在下面...程序中使用这个特效 要在 WPF 程序中使用这个特效,则设置控件 Effect 属性,将我们刚刚生成像素着色器对应 C# 代码类名写进去即可。

72420

☀️苏州程序大白用万字解析Python网络编程与Web编程☀️《❤️记得收藏❤️》

IP地址作用: ​ IP 地址作用是标识网络中唯一一台设备,也就是说通过IP地址能够找到网络中某台设备。...网络套接字(英语:Network socket;又译网络套接字、网络接口、网络插槽)在计算机科学中是电脑网络中进程间数据流端点,是一种操作系统提供进程间通信机制。...A:不是,应用软件是无法直接通过网卡接收数据,它需要调用操作系统接口,由操作系统通过网卡接收数据,把接收数据写入到接收缓冲区(内存中一片空间),应用程序再从接收缓存区获取客户端发送数据。...C# Modbus TCP 源代码 C# 仓库管理系统源码 C# 欧姆龙通讯Demo C#+WPF+SQL目前在某市上线车管所摄像系统 2021C#与Halcon...集成Halcon深度学习软件 C#集成Halcon深度学习软件,带[MNIST例子]数据集 C#支持等比例缩放拖动halcon WPF开源窗体控件 2021年Labview

82720

.NET周刊【7月第2期 2024-07-14】

其优势包括开源、与visual studio兼容、与C#原生控件兼容、支持.NET控制台和GTK、支持多种操作系统、主题界面定制、多种控件及布局方式,以及扩展控件功能。...通过在OnStartup事件中获取文件名并处理,解决了软件启动后参数传递问题。使用窗口句柄实现跨进程通信。...文章提及FastReport可以在Winform、VueBS端和WPF应用程序使用,方便多终端复用。...Redis Copy .NET8 是一个基于.NET 8控制台工具,通过修改AppSetting.json文件或使用命令参数来设置源和目标Redis连接。...Simple WPF: WPF实现一个MINIO等S3兼容对象存储上传文件小工具 https://www.cnblogs.com/mrchip/p/18293111 该文章讲述了在阿里云ECS搭建MINIO

11710

.NET周刊【6月第3期 2024-06-23】

作者以GitLab流水线为例,使用C#和PowerShell实现了这一需求。随后给出了具体代码示例,包括如何获取当前活动会话用户令牌,复制令牌,以及设置程序启动参数。...WPF/C#:在DataGrid中显示选择框 https://www.cnblogs.com/mingupupu/p/18258249 该文章介绍了在WPFDataGrid中添加选择框列实现方法。...尽管如此,作者认为 UNO 专业性和管理更强,并选择在基础库使用 UNO,在上层应用使用 Avalonia,以结合两者优势。...第一种方法使用图片编辑工具如Photoshop修改背景图片并替换。第二种方法通过GDI+动态绘制系统名称,利用配置文件中系统名称信息,在窗口Paint事件中绘制。...WPF/C#:显示分组数据两种方式 https://www.cnblogs.com/mingupupu/p/18256035 本文介绍了WPF数据分组两种实现方案: ICollectionView和

9110

什么是.NET?什么是.NET Core?.NET和.NET Core区别又是什么呢?

如果要运行在其他操作系统,需要借助第三方框架,比如: Mono—一个开源第三方.NET Framework框架,它可以运行在Linux和Mac OS操作系统。...2011年5月,Mono开发者为了使用C#开发跨平台移动设备应用,成立并发布了Xamarin后于2016年被微软收购,但这只是微软跨平台第一步,毕竟Xamarin只适合开发移动端应用。....NET Core是一种模块化实现,可用于各种垂直领域,从数据中心扩展到基于触摸设备,它是开源,跨平台,能在Windows、LinuxMac OSX等操作系统运行,同时还支持Docker等容器化环境安装和部署....NET 5 微软为了统一.NET平台,计划将所有的.NET运行时统一为一个.NET平台,并为所有应用程序模型(如:.NET Core, Windows Forms, WPF, UWP, Xamarin...API应用,微服务; 跨平台游戏开发Unity,目前应用得非常广泛,像【王者荣耀】这类大型手游都是使用Unity开发出来; 基于WPF桌面应用程序,使用WPF你可以自定义完成超酷用户交互界面

3.7K30
领券