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日

相关文章

  • SharePoint 客户端对象模型 (一) ECMA Script

    下面是关于“SharePoint客户端对象模型(一)ECMAScript”的完整攻略,包含两个示例。 1. SharePoint客户端对象模型简介 SharePoint客户端对象模型(CSOM)是一组API,用于在客户端应用程序中与SharePoint进行交互。CSOM提供了一组类和方法,用于执行各种操作,例如读取和写入列表数据、创建和删除网站等。 2. 使…

    C# 2023年5月15日
    00
  • C#并行库Task类介绍

    C#并行库Task类介绍 什么是Task类? 在C#并行编程中,Task类是一个重要的类,它代表一个异步操作,可以理解为对一个方法的异步调用,并且可以获取异步操作的状态和结果。 Task类的使用 创建Task对象 Task类有多种构造函数,最基本的构造函数如下所示: Task task = new Task(Action action); 其中,action…

    C# 2023年5月15日
    00
  • 适用与firefox ASP.NET无刷新二级联动下拉列表

    下面是“适用于 Firefox ASP.NET 无刷新二级联动下拉列表”的完整攻略。 介绍 在ASP.NET网站开发过程中,常常需要实现下拉列表的二级联动,即根据第一个下拉选项的选择,动态加载第二个下拉选项的内容。而且为了用户体验,需要使用无刷新技术,即在不刷新整个页面的情况下,实现二级下拉列表的动态更新。 本文将介绍如何实现这个功能,并针对火狐(Firef…

    C# 2023年5月31日
    00
  • selenium.chrome写扩展拦截或转发请求功能

    针对selenium.chrome写扩展拦截或转发请求功能的完整攻略,包括以下步骤: 步骤一:安装Selenium和ChromeDriver 在使用Selenium对Chrome进行操作之前,需要先安装Selenium和ChromeDriver。具体方法如下: 安装Selenium pip install selenium 安装ChromeDriver 在官…

    C# 2023年5月31日
    00
  • c# 获取照片的经纬度和时间的示例代码

    要获取照片的经纬度和时间,我们可以使用C#语言中的ExifLib库来实现。下面我将为大家详细讲解如何使用ExifLib库来获取照片的经纬度和时间。 准备工作 在使用ExifLib库之前,需要先添加对该库的引用。可以通过NuGet包管理器来添加引用。具体步骤如下: 在Visual Studio中打开你的项目。 在“解决方案资源管理器”窗口中右击项目名称,选择“…

    C# 2023年6月1日
    00
  • C#调用pyd的方法

    当我们需要使用Python库的时候,可以通过C#代码调用Python库提供的功能。Python库通常是以.so 或 .pyd 的文件形式提供,因此,我们需要使用C#的相关机制调用 Python库。下面将介绍如何在C#中调用Python库的方法。 步骤一: 安装Python 我们需要在计算机上安装Python,并添加Python的安装目录到系统路径中。可以通过…

    C# 2023年6月3日
    00
  • 基于ABP架构开发的.Net Core项目部署到IIS问题汇总

    基于ABP架构开发的.Net Core项目部署到IIS问题汇总 ABP框架是一个基于DDD的开源Web应用程序框架,它使用最新的ASP.NET Core技术。在本攻略中,我们将讨论如何将基于ABP架构开发的.Net Core项目部署到IIS,并总结一些常见问题及其解决方案。 步骤一:安装.NET Core Runtime和.NET Core Hosting …

    C# 2023年5月17日
    00
  • C#实现文件上传下载Excel文档示例代码

    下面我将详细讲解C#实现文件上传下载Excel文档的示例代码攻略。 1. 实现文件上传 1.1 编写HTML表单 首先,我们需要在前端编写一个HTML表单,让用户选择要上传的文件和提交表单。 <form action="UploadFileHandler.ashx" enctype="multipart/form-data…

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