zoukankan      html  css  js  c++  java
  • Windows Mobile 5.0下蓝牙移动打印测试(二)

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using System.IO.Ports;

    namespace BluetoothTest
    {
       
    public class Printer
        {
            SerialPort server
    = new SerialPort();
           
    private string _portName = "COM6";//蓝牙一般默认为com6


           
    /// <summary>
           
    /// 获取或设置端口名称
           
    /// </summary>
            public string PortName
            {
               
    get
                {
                    _portName
    = server.PortName;
                   
    return _portName;
                }
               
    set
                {
                    _portName
    = value;
                    server.PortName
    = _portName;
                }
            }
           
    /// <summary>
           
    /// 端口是否已经打开
           
    /// </summary>
            public bool IsOpen
            {
               
    get
                {
                   
    return server.IsOpen;
                }
            }
           
    /// <summary>
           
    /// 构造方法初始化串口参数
           
    /// </summary>
            public Printer()
            {
    //初始化各个参数
                server.BaudRate = 9600;//波特率
                server.Parity = 0;//校检位
                server.DataBits = 8;//数据位
                server.StopBits = StopBits.One;//停止位
                server.PortName = _portName;//端口名称
                server.WriteTimeout = -1;//超时时间
                server.ReadTimeout = -1;//超时时间
            }
           
    /// <summary>
           
    /// 打开端口
           
    /// </summary>
           
    /// <returns></returns>
            public bool OpenPort()
            {
               
    try
                {
                   
    if (!server.IsOpen)
                    {
    //关闭的
                        server.Open();
                    }
                   
    else
                    {
    //打开的
                       
    //server.Close();
                       
    //server.Open();
                    }
                   
    return true;
                }
               
    catch(Exception ex)
                {
    return false; }
            }
           
    /// <summary>
           
    /// 发送数据
           
    /// </summary>
           
    /// <param name="str"></param>
           
    /// <returns></returns>
            public bool SendDataToPort(string str,out string mes)
            {
               
    try
                {
                   
    byte[] OutBuffer;//数据

                   
    int BufferSize;
                    Encoding targetEncoding;

                   



                   
    //将[UNICODE编码]转换为[GB码],仅使用于简体中文版mobile
                    targetEncoding = Encoding.GetEncoding(0);    //得到简体中文字码页的编码方式,因为是简体中文操作系统,参数用0就可以,用936也行。
                    BufferSize = targetEncoding.GetByteCount(str); //计算对指定字符数组中的所有字符进行编码所产生的字节数          
                    OutBuffer = new byte[BufferSize];
                    OutBuffer
    = targetEncoding.GetBytes(str);       //将指定字符数组中的所有字符编码为一个字节序列,完成后outbufer里面即为简体中文编码

                   
    byte[] cmdData = new byte[BufferSize+100];

                   
    //初始化打印机
                    cmdData[0] = 0x1B;
                    cmdData[
    1] = 0x40;
                   
    //设置字符顺时旋转180度
                    cmdData[2] = 0x1B;
                    cmdData[
    3] = 0x56;
                    cmdData[
    4] = 0;


                   
    for (int i = 0; i < BufferSize; i++)
                    {
                        cmdData[
    5 + i] = OutBuffer[i];
                    }


                   
    //向打印机发送[GB码]数据
                    server.Write(cmdData, 0, BufferSize + 5);
                   
    //server.WriteLine(str);

                   
    //初始化指令1B 40
                    cmdData[0] = 0x1B;
                    cmdData[
    1] = 0x40;
                   
    //打印并走纸指令
                    cmdData[2] = 0x1B;
                    cmdData[
    3] = 0x64;
                    cmdData[
    4] = 0x02;

                    server.Write(cmdData,
    0, 5);
                    mes
    = "";
                   
    return true;
                }
               
    catch(Exception ex)
                {
                    mes
    = ex.Message;
                   
    return false;
                }
            }
           
    /// <summary>
           
    /// 十六进制转换字节数组
           
    /// </summary>
           
    /// <param name="s"></param>
           
    /// <returns></returns>
            private byte[] HexStringToByteArray(string s)
            {
                s
    = s.Replace(" ", "");
               
    byte[] buffer = new byte[s.Length / 2];
               
    for (int i = 0; i < s.Length; i += 2)
                    buffer[i
    / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
               
    return buffer;
            }
           
    /// <summary>
           
    /// 字节数组转换十六进制
           
    /// </summary>
           
    /// <param name="data"></param>
           
    /// <returns></returns>
            private string ByteArrayToHexString(byte[] data)
            {
                StringBuilder sb
    = new StringBuilder(data.Length * 3);
               
    foreach (byte b in data)
                    sb.Append(Convert.ToString(b,
    16).PadLeft(2, '0').PadRight(3, ' '));
               
    return sb.ToString().ToUpper();
            }

           
    public void ClosePort()
            {
                server.Close();           
            }
           
        }
    }

    3.接下在项目窗体上的使用,看看下面的代码:

     using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace BluetoothTest
    {
    public partial class frmMain : Form
    {
    public frmMain()
    {
    InitializeComponent();
    }
    Printer printer
    = new Printer();
    private void menuItem4_Click(object sender, EventArgs e)
    {
    //退出
    printer.ClosePort();
    Application.Exit();
    }

    private void menuItem2_Click(object sender, EventArgs e)
    {
    //打印
    if (tbxBody.Text.Length == 0)
    return;

    setEnabled(
    false);
    if (!printer.IsOpen)//只有在端口关闭的时候才能设置
    printer.PortName = drpPort.GetItemText(drpPort.SelectedItem);
    if (!printer.OpenPort())
    {
    MessageBox.Show(
    "无法打开端口" + drpPort.GetItemText(drpPort.SelectedItem));
    }
    string mes = "";
    if (!printer.SendDataToPort(tbxBody.Text,out mes))
    {
    MessageBox.Show(
    "发送数据失败" + drpPort.GetItemText(drpPort.SelectedItem) + " " + mes);
    }

    setEnabled(
    true);

    }
    private void setEnabled(bool b)
    {
    menuItem1.Enabled
    = b;
    menuItem3.Enabled
    = b;
    }
    private void frmMain_Load(object sender, EventArgs e)
    {
    //初始化
    drpPort.SelectedIndex = 1;
    }
    }
    }

  • 相关阅读:
    深度学习之神经网络的结构
    分圆问题:一个诡异的数列规律
    形象展示傅里叶变换
    最速降线问题
    ip address add 200.1.1.2/24 dev eth1
    Learn X in Y minutes Where X=c++
    sigsuspend
    tcp 代理的作用
    UNIX网络编程卷2进程间通信读书笔记(二)—管道 (1)
    UNIX网络编程卷2进程间通信读书笔记(一)—概述
  • 原文地址:https://www.cnblogs.com/jara/p/3405698.html
Copyright © 2011-2022 走看看