Windows Mobile 5.0下蓝牙移动打印测试(二)
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;
}
}
}
个人主要研究:金融系统、MIS系统、人力资源管理系统、数据采集系统、权限管理系统等等系统。主攻C#开发语言,Oracle、Sql Server,WCF和Remoting通信。
如需联系可加QQ:442389681 Email:lxc880615@163.com 手机:18922735098
QQ群交流:186841119 (请注明来自博客园)
博客园地址:http://www.cnblogs.com/jara/ http://www.cnblogs.com/luoyuhao/
提示:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
如果对文章有任何问题,都可以在评论中留言,我会尽可能的答复您,谢谢您的阅读