隨筆-348  評論-598  文章-0  trackbacks-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, 
          05);
                          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;
                  }
              }
          }


          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-03-23 21:47 TiGERTiAN 閱讀(848) 評論(0)  編輯  收藏 所屬分類: Windows Mobile
          主站蜘蛛池模板: 双牌县| 泌阳县| 仁怀市| 宜丰县| 丁青县| 宁德市| 梨树县| 兴业县| 大同县| 石屏县| 平定县| 泰兴市| 邵武市| 蓬安县| 东乡| 克东县| 乐陵市| 张家界市| 日土县| 三都| 板桥市| 靖州| 腾冲县| 临清市| 左云县| 那曲县| 崇仁县| 青田县| 新营市| 石狮市| 灵台县| 黄梅县| 太谷县| 洞口县| 昌吉市| 高唐县| 绿春县| 娱乐| 咸丰县| 饶平县| 普格县|