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#中abstract的用法详解

    C#中abstract的用法详解 简介 abstract 是C#中一个重要的关键字,表示抽象,它用于定义抽象类或抽象方法,是实现面向对象中重要的机制。一个抽象类不能被直接实例化,而只能作为基类被其他类继承。从抽象类继承的子类,必须实现该抽象类中的abstract方法,才能被实例化。在C#中,抽象类和抽象方法通常用于建立基础类和组件,使代码具有更强的可重用性。…

    C# 2023年5月15日
    00
  • C#字符串和Acsii码相互转换

    C#字符串和ASCII码的相互转换需要使用到System.Text.Encoding类中的ASCII编码器和解码器。下面是详细的操作步骤: 将字符串转换为ASCII码 步骤: 引入命名空间System.Text。 调用Encoding.ASCII.GetBytes()方法,将字符串转换为ASCII码字节数组。 代码示例: using System.Text;…

    C# 2023年6月8日
    00
  • .NET中lambda表达式合并问题及解决方法

    以下是“.NET中lambda表达式合并问题及解决方法”的完整攻略: 什么是lambda表达式 Lambda表达式是一种匿名函数,它可以不方法情况下创建一个委托。在.NET中,Lambda表达式通常用于LINQ查询和事件处理程序。 lambda表达式合并在中,当我们需要将多个Lambda表达式合并为一个时,可能会遇到一些问题。例如,我们可能需要将多个查询条件…

    C# 2023年5月12日
    00
  • C# 生成验证码取随机数字加字母(改进版)

    生成验证码是图片验证码的一种,常用于防止机器人恶意注册、登录等场景。在C#中生成验证码,可以使用System.Drawing类库,通过画布绘制字符、干扰线等实现。本攻略将讲解如何生成具有随机数字和字母的验证码,并介绍针对该实现方案的优化方案。 1. 实现随机数字和字母生成函数 首先,我们需要实现一个函数,用于生成指定长度的随机数字和字母组合。可以使用Rand…

    C# 2023年6月1日
    00
  • 详解c# 事件总线

    详解C#事件总线攻略 事件总线是一种让不同对象之间相互通信的方式。它可以让多个对象在程序运行时相互协作,轻松实现松耦合(loose coupling)和高内聚(high cohesion)的编程状态。 事件总线的基础知识 事件总线是一个对象,它处理应用程序中的所有事件,并将它们发送给已经订阅这些事件的对象。这些对象被称为“事件订阅者”。 事件总线的实现方式 …

    C# 2023年6月6日
    00
  • 使用C# Winform应用程序获取网页源文件的解决方法

    非常感谢您对我提出的问题。以下是使用C# Winform应用程序获取网页源文件的解决方法的完整攻略: 1. 确定需求 在开始之前,我们需要确定我们的需求,为什么要获取网页源文件。例如,我们可能希望: 分析网站结构和内容 检查特定页面的元素、标签、属性等 自动化爬取网站数据 不管我们的需求是什么,获取网页源文件都是必不可少的第一步。下面将介绍基于C# Winf…

    C# 2023年6月1日
    00
  • 提供一个可以将DocX转为doc的文档转换器 地址

    首先需要明确的是,DocX是Word 2007以后版本才有的文件格式,而doc则是早期的版本格式,因此需要将DocX转换为doc格式的情况还是比较常见的。以下是一个可以将DocX转为doc的文档转换器的详细攻略。 1. 确定文档转换器类型 首先需要选择一个可以将DocX转为doc的文档转换器。当前比较常用的转换器有在线转换器和桌面软件两种,我们可以根据实际需…

    C# 2023年5月31日
    00
  • LINQ(语言集成查询)使用案例

    LINQ使用案例 LINQ,全称为语言集成查询(Language Integrated Query),是.NET平台中的一项技术,通过使用可嵌入到C#和VB两种语言中的查询表达式,开发人员可以通过简单、一致的语法来查询各种数据源。 示例一:从数组中查询 以下是一个从整数数组中查询奇数的示例,使用LINQ语法查询: int[] numbers = { 0, 1…

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