首页
学习
活动
专区
工具
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地址和操作系统名称。注意,该示例代码中未涉及腾讯云的产品和链接地址,如需添加相关推荐,可以根据实际需求自行添加。

相关搜索:使用iOS应用程序获取所有已连接的mac设备信息使用RxAndroidBle从已连接的设备获取订阅如何使用libimobiledevice获取已连接设备的ECID?如何在Android上获取本地网络所有设备的IP地址和名称如何获取配对(在移动设置中已连接)蓝牙设备的名称?Xamarin形成了如何获取设备所连接的wi-fi网络的名称如何使用C++显示连接到网络的设备的名称和IP地址如何使用Flutter获取设备上已安装应用程序的大小?如何使用PowerShell获取所有已安装的Windows更新、名称和KB号?如何使用C#在xamarin.forms中获取所有已启用的键盘如何使用Python ScriptEngine获取C#中的所有局部变量名称和值?iOS 14:如何延迟“[应用程序名称]想要查找并连接到本地网络上的设备”通知?您是否可以使用macOS“日志流”或“日志显示”从已连接的iOS设备获取消息?使用C# Datastax CassandraCSharpDriver.Graph获取连接到已知折点的所有未知折点此递归函数用于返回所有已连接节点的列表,其中给定了使用python的网络图中的某个节点从C应用程序(Linux)获取已连接的USB摄像头(网络摄像头)的v4l2设备号如何在没有互联网连接的情况下在CN1设备上获取网络提供的日期和时间?是否可以使用adb命令通过wifi连接到同一网络上的任何android设备?在Windows Vista上获取我使用C#.Net连接的无线网络的SSID从2个不同的服务器上的2个不同的数据库中获取数据,并使用C#连接它们
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

尝新体验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.2K30

.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#代码描述。

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

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

    1.8K30

    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

    17010

    .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.5K10

    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#代码、元数据和资源,可以在多个应用程序之间共享和重用。

    1K10

    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.4K01

    .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 运行环境和类库。...泛型基本语法包括泛型方法与类定义及实例化,泛型接口、委托声明和泛型约束使用。泛型在集合类、数据结构、算法、数据库操作和网络编程等多个场景下都有广泛应用。

    10700

    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# 代码类名写进去即可。

    85220

    ☀️苏州程序大白用万字解析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

    83220

    .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

    14610

    什么是.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你可以自定义完成超酷用户交互界面

    4.1K30

    .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和

    10210
    领券