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# 7.0版本引入的一种新的类型,它可以存储一组数据,而不是单一类型的数据。它的出现使得我们可以更方便地组合和传递数据。 元组可以用于处理多个返回值,而不必引入一个专门的类型来保存它们。元组内部可以存储不同类型的数据,这是它与数组和列表等常规集合类型的主要区别。 如何使用元组? 创建元组 创建元组很简单,可…

    C# 2023年5月31日
    00
  • 详解C#实例化对象的三种方式及性能对比

    详解C#实例化对象的三种方式及性能对比 在C#中,创建一个对象有多种方法,每种方法都有自己的优势和适用场景。本文将详解C#实例化对象的三种方式,并进行性能对比。 1. 直接实例化 这是最常见的创建对象的方式,使用new关键字直接创建一个对象。 ClassA a = new ClassA(); 由于直接实例化创建对象的时候不需调用构造器,因此速度最快,节省了构…

    C# 2023年6月1日
    00
  • 在VS2017中用C#调用python脚本的实现

    这里提供了一种寻常的方法,在VS2017中通过C#调用Python脚本的实现,具体过程如下: 准备工作 安装 Python3.x 及 pip,并添加环境变量; 安装 Python 的 C++ 接口库:pip install pybind11; 安装 Python 的包管理器 pipenv:pip install pipenv; 新建一个 .NET Frame…

    C# 2023年5月15日
    00
  • .NET通过字典给类赋值实现代码

    对于.NET Framework提供的某些类型,我们可以通过字典的方式给类对象中的属性赋值。下面是实现过程的完整攻略: 1. 引入命名空间 在使用字典给类赋值时,我们需要引入System.Reflection命名空间。在代码中添加以下语句即可: using System.Reflection; 2. 创建类对象 首先,我们需要创建类的对象,以便我们可以给类的…

    C# 2023年5月31日
    00
  • C#资源释放方法实例分析

    C#资源释放方法实例分析 在使用C#编写程序时,资源释放问题是一个非常重要的问题。如果不恰当地处理资源释放,可能会导致内存泄漏等问题,影响程序性能和稳定性。本文将详细介绍C#中的资源释放方法,以及如何在代码中进行实际应用。 1. 资源释放的方法 C#中的资源释放主要分为两种方式:手动释放和自动释放。 1.1 手动释放 手动释放是指程序员在编写代码时,手动调用…

    C# 2023年5月15日
    00
  • Asp.Net Core中WebSocket绑定的方法详解

    Asp.Net Core中WebSocket绑定的方法详解 WebSocket是一种在Web应用程序中实现双向通信的协议。在Asp.Net Core中,我们可以使用WebSocket来实现实时通信。本攻略将介绍如何在Asp.Net Core中使用WebSocket,并提供两个示例说明。 WebSocket绑定的方法 在Asp.Net Core中,我们可以使用…

    C# 2023年5月17日
    00
  • 详解如何利用C#实现汉字转拼音功能

    下面是关于如何利用C#实现汉字转拼音功能的完整攻略: 1. 准备工作 实现汉字转拼音需要使用到拼音库,这里我推荐使用Pinyin4Net库。首先需要在VS中安装Pinyin4Net库。 安装方法: 打开VS,创建一个新的C#控制台应用程序。 在解决方案资源管理器中,右键单击该项目,选择“管理NuGet程序包”。 在弹出的NuGet管理器中,搜索“Pinyin…

    C# 2023年6月6日
    00
  • WPF实现上下滚动字幕效果

    WPF实现上下滚动字幕效果 在 WPF 中,实现上下滚动字幕效果通常可以使用 TranslateTransform 和 DoubleAnimation 实现。具体步骤如下: 步骤一:创建外层容器 首先,我们需要创建一个外层容器,用于包含字幕元素。这个容器可以是一个 StackPanel 或 Canvas,根据项目实际需求而定。这里我们使用 StackPane…

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