C#开发纽曼USB来电小秘书客户端总结

C#开发纽曼USB来电小秘书客户端总结

本文基于C#语言开发一个针对Windows系统的小型应用程序——纽曼USB来电小秘书客户端。该程序能够通过识别USB来电设备实现来电提醒、号码白名单管理等功能。

技术要点

本程序使用的技术栈主要包括:

  • C#语言
  • .NET框架
  • FTDI USB驱动
  • WPF UI框架

步骤

1. 准备工作

在开始开发之前,我们需要准备好以下资源:

  • Visual Studio:本程序使用Visual Studio 2019开发,因此需要安装该软件。
  • FTDI驱动:FTDI提供USB转串口芯片的驱动,我们的程序需要使用FTDI的驱动来识别USB来电设备。
  • C#类库文件:我们需要使用FTDI的C#类库文件来与FTDI驱动进行通信。
  • WPF UI框架:我们使用WPF UI框架来实现程序的界面。

2. 识别USB设备

我们需要使用FTDI的C#类库文件来识别USB来电设备,并将其作为COM口进行通讯。下面是代码示例:

using FTD2XX_NET;

// ...

FTDI myFtdiDevice = new FTDI();

// Create device list
myFtdiDevice.GetNumberOfDevices(ref numDevices);

// Check if no devices available
if (numDevices == 0)
{
    Console.WriteLine("No devices found.");
    return;
}

// Open first device
myFtdiDevice.OpenByIndex(0);

// Set communication settings
myFtdiDevice.SetBaudRate(9600);
myFtdiDevice.SetDataCharacteristics(FTDI.FT_DATA_BITS.FT_BITS_8, FTDI.FT_STOP_BITS.FT_STOP_BITS_1, 
    FTDI.FT_PARITY.FT_PARITY_NONE);
myFtdiDevice.SetFlowControl(FTDI.FT_FLOW_CONTROL.FT_FLOW_NONE, 0, 0);

// Set read timeout
myFtdiDevice.SetTimeouts(5000, 5000);

3. 接收串口数据

我们需要使用myFtdiDevice对象的Read方法来接收串口数据。在本程序中,我们使用异步方式来接收数据。下面是代码示例:

while (true)
{
    // Check if device is open
    if (!myFtdiDevice.IsOpen)
        break;

    byte[] readBuffer = new byte[128];
    uint numBytesRead = 0;
    uint numBytesAvailable = 0;
    uint totalBytesRead = 0;

    // Check number of bytes available
    myFtdiDevice.GetRxBytesAvailable(ref numBytesAvailable);

    // Read data if available
    if (numBytesAvailable > 0)
    {
        // Read data from device
        myFtdiDevice.Read(readBuffer, numBytesAvailable, ref numBytesRead);

        // Process received data
        ProcessData(readBuffer, (int)numBytesRead);
    }
    else
    {
        // Sleep to reduce CPU usage
        Thread.Sleep(100);
    }
}

4. 处理数据

我们需要编写ProcessData方法来处理接收到的串口数据。在本程序中,如果接收到的数据是来电号码,我们将通过界面通知用户。

private void ProcessData(byte[] data, int length)
{
    string dataString = Encoding.ASCII.GetString(data, 0, length);

    // Check if data is phone number
    if (Regex.IsMatch(dataString, @"^\d{11}$"))
    {
        // Notify user if phone number is not in whitelist
        if (!IsInWhitelist(dataString))
        {
            MessageBox.Show("收到新来电:" + dataString);
        }
    }
}

5. 界面设计

我们使用WPF框架来设计窗口界面。下面是代码示例:

<Window x:Class="NewmanUSBCallerID.MainWindow"
        ...
        xmlns:local="clr-namespace:NewmanUSBCallerID">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Button Grid.Row="0" Click="OnAddNumberButtonClick">添加到白名单</Button>
        <ListView Grid.Row="1" ItemsSource="{Binding Numbers}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="号码" DisplayMemberBinding="{Binding}" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

6. 号码白名单管理

我们需要编写Whitelist类来管理白名单,例如添加、删除等操作。下面是代码示例:

public class Whitelist
{
    private List<string> _numbers;

    public List<string> Numbers
    {
        get { return _numbers; }
        set { _numbers = value; }
    }

    public Whitelist()
    {
        _numbers = new List<string>();
    }

    public bool IsInWhitelist(string number)
    {
        return _numbers.Contains(number);
    }

    public void Add(string number)
    {
        _numbers.Add(number);
    }

    public void Remove(string number)
    {
        _numbers.Remove(number);
    }

    public void Load()
    {
        // Load numbers from file or database
    }

    public void Save()
    {
        // Save numbers to file or database
    }
}

总结

本文总结了一个C#开发纽曼USB来电小秘书客户端的完整攻略,包括识别USB设备、接收串口数据、处理数据、界面设计、号码白名单管理等方面。本程序展示了C#语言和WPF框架的使用,也充分利用了.NET框架提供的各种工具和库。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#开发纽曼USB来电小秘书客户端总结 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#中的数组用法详解

    C#中的数组用法详解 在C#中,数组是一组相同类型的数据的子集合。它是一个容器,可以存储多个具有相同类型的元素。本文将详细讲解C#中数组的用法。 创建数组 创建数组可以使用以下两种方式: 方式一:使用new关键字 使用new关键字创建数组,语法如下: 数据类型[] 数组名 = new 数据类型[数组长度]; 示例代码: int[] arr1 = new in…

    C# 2023年5月15日
    00
  • 详解c# Emit技术

    当我们需要在C#中动态生成IL代码时,C# Emit技术就变得非常有用了。本文将详细介绍C# Emit技术,并提供两个示例来帮助您更好地理解它。 C# Emit技术 C# Emit技术是.NET框架提供的一项功能强大的动态代码生成技术。通过它,我们可以使用C#代码动态地生成并编译IL代码,实现很多与程序运行时生成代码有关的场景。 C# Emit技术一般用于以…

    C# 2023年5月15日
    00
  • .net 像hao123的快捷邮箱登陆的实现代码

    首先,要实现像Hao123那样的快捷邮箱登录,我们需要了解一些前提知识和技术: Cookies:Cookie是一种由服务器发送到用户Web浏览器的小型文本文件,存储在用户计算机中,主要用于记录用户的登录状态、浏览记录等信息。 Session:Session是服务器端一种基于Cookie的数据存储技术,用于存储服务器和客户端之间的登录状态和其他数据。 .NET…

    C# 2023年5月31日
    00
  • C#使用NPOI对word进行读写

    我来讲解一下“C#使用NPOI对word进行读写”的完整攻略。 1. NPOI简介 NPOI是一款开源的.NET控件库,用于读写Excel、Word和PowerPoint文档。它是兼容OOXML格式文档的,并使用了一套高效的处理方式,使得在.NET平台上读写Office文档的效率得到大幅提升。 2. 安装NPOI 首先需要在Visual Studio中安装N…

    C# 2023年5月31日
    00
  • c#中的扩展方法学习笔记

    下面我将详细讲解C#中的扩展方法学习笔记的完整攻略: 扩展方法简介 扩展方法是一种特殊的静态方法,它可以在不改变原有类的基础上,给该类添加新的方法。扩展方法的定义必须在一个静态类中,并且这个静态类必须是非泛型类,这个类的方法必须是静态且必须使用 this 关键字作为第一个参数。扩展方法的使用方式和实例方法一样,但注意一定要引用命名空间。 扩展方法的定义 扩展…

    C# 2023年6月7日
    00
  • C#判断字符串中内容是否为纯数字的详细教程

    下面是关于如何判断字符串中内容是否为纯数字的详细教程: 步骤一:准备工作 在C#中,我们可以使用int.TryParse()方法来判断一个字符串是否为纯数字,该方法会尝试将指定的字符串转换为数字类型,如果转换成功,则返回true,否则返回false。 步骤二:判断字符串是否为纯数字 接下来,我们可以编写代码来判断字符串是否为纯数字: string input…

    C# 2023年6月8日
    00
  • C# char类型字符转换大小写的实现代码

    下面是详细的讲解“C# char类型字符转换大小写的实现代码”的完整攻略。 问题说明 在 C#中,char 类型表示一个 Unicode 字符。有时候我们需要将字符转换为大写或小写形式。C# 语言提供了相应的方法供我们实现。 解决方案 C# 中,char 类型本身包含了 ToUpper 和 ToLower 两个方法,分别用于将字符转换为大写和小写形式。使用这…

    C# 2023年6月1日
    00
  • C# 小数位数保留的方法集锦

    C# 小数位数保留的方法集锦,这是一个非常实用的技能点,下面我将为大家详细讲解。 1. 保留小数位数的方法 在C# 中,一些数值类型都有自己的 ToString() 方法,这个方法可以用来将值转换为字符串并指定小数位数。在下面的示例中,我们使用 Double 类型,并设置 ToString() 方法来指定小数位数。 double num = 3.141592…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部