VB.net調用蒙恬Write2Go筆跡手寫板進行電子簽名

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

最近的項目需要用到手寫電子簽名的功能,挑來挑去最後選擇了蒙恬Write2Go這款手寫板裝置,因為手寫板上面直接就有一塊電子油墨顯示屏,所寫即所得,還可以看到寫的筆跡

安裝完蒙恬的驅動及內建應用程式之後,經過測試發現,其工作原理是利用了windows剪下板作為中間橋樑來交換圖片資料,每次簽名的時候首先需要啟動蒙恬內建的一個叫做"蒙恬即寫通"的程式:


畢竟手寫的筆跡傳到電腦上的時候走的還是手寫板的電阻屏,所以筆跡效果肯定不如電子油墨屏上面顯示的好看,按下裝置上的發送按鈕,筆跡會作為圖片的形式儲存到windows剪下板中,利用上一篇寫到的windows剪下板內容監視方法,可以在自己的程式中調用到手寫筆跡圖片,具體實現起來涉及到下面幾個技術點:

  1. 在程式中點擊簽名地區時調用蒙恬的"即寫通"程式
  2. 監視windows剪下板,發現有圖片資料更新到剪下板中時將其調用到自己的程式中的pictureBox控制項裡顯示出來
  3. 把pictureBox控制項中顯示的簽名筆跡image類型資料寫入資料庫中
  4. 從資料庫中讀取image類型資料並在winform的pictureBox控制項裡顯示出來
完整的代碼如下:

Imports System.IOImports System.Data.SqlClientPublic Class clipboardMon    '------------------監視剪下板資料代碼開始------------------#Region " Definitions "    'Constants for API Calls...    Private Const WM_DRAWCLIPBOARD As Integer = &H308    Private Const WM_CHANGECBCHAIN As Integer = &H30D    'Handle for next clipboard viewer...    Private mNextClipBoardViewerHWnd As IntPtr    'API declarations...    Declare Auto Function SetClipboardViewer Lib "user32" (ByVal HWnd As IntPtr) As IntPtr    Declare Auto Function ChangeClipboardChain Lib "user32" (ByVal HWnd As IntPtr, ByVal HWndNext As IntPtr) As Boolean    Declare Auto Function SendMessage Lib "User32" (ByVal HWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Long#End Region#Region " Contructor "    Public Sub NewViewer()        'InitializeComponent()        'To register this form as a clipboard viewer...        Clipboard.Clear()        mNextClipBoardViewerHWnd = SetClipboardViewer(Me.Handle)    End Sub#End Region#Region " Message Process "    'Override WndProc to get messages...    Protected Overrides Sub WndProc(ByRef m As Message)        Select Case m.Msg            Case Is = WM_DRAWCLIPBOARD 'The clipboard has changed...                '##########################################################################                ' Process Clipboard Here :)........................                '##########################################################################                SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)                '顯示剪貼簿中的圖片資訊                If Clipboard.ContainsImage() = True Then                    PictureBox1.Image = Clipboard.GetImage()                    PictureBox1.Update()                End If            Case Is = WM_CHANGECBCHAIN 'Another clipboard viewer has removed itself...                If m.WParam = CType(mNextClipBoardViewerHWnd, IntPtr) Then                    mNextClipBoardViewerHWnd = m.LParam                Else                    SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)                End If        End Select        MyBase.WndProc(m)    End Sub#End Region    Private Sub clipboardMon_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load        NewViewer()    End Sub    '------------------監視剪下板資料代碼結束------------------    ''' <summary>    ''' 點擊簽字地區時自動運行蒙恬即寫通程式    ''' </summary>    ''' <param name="sender"></param>    ''' <param name="e"></param>    ''' <remarks></remarks>    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click        '定位蒙恬即寫通程式的位置路徑        Dim writePath As String = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + "\PenPower Write2Go\Bin\PPStartupApp.exe"        Process.Start(writePath)    End Sub    ''' <summary>    ''' 儲存當前picturebox中的圖片到資料庫    ''' </summary>    ''' <param name="sender"></param>    ''' <param name="e"></param>    ''' <remarks></remarks>    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim ms As New MemoryStream()        Dim bReturn() As Byte = Nothing        Me.PictureBox1.Image.Save(ms, Imaging.ImageFormat.Jpeg)        bReturn = ms.GetBuffer        ms.Close()        Using conn As New SqlConnection(My.Settings.piaojuConnectionString)            conn.Open()            Dim cmd As New SqlClient.SqlCommand()            cmd.Connection = conn            cmd.CommandText = "insert into paper_baozhangshenpidan(paperID,applySign) values('20160227',@img)"            Dim par As New SqlClient.SqlParameter("@img", SqlDbType.Image)            par.Value = bReturn            cmd.Parameters.Add(par)            Dim t As Integer = Integer.Parse(cmd.ExecuteNonQuery())            If t > 0 Then                MsgBox("Success")            Else                MsgBox("Faile")            End If            conn.Close()        End Using    End Sub    ''' <summary>    ''' 從資料庫中讀取image類型資料並顯示在picturebox控制項裡    ''' </summary>    ''' <param name="sender"></param>    ''' <param name="e"></param>    ''' <remarks></remarks>    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        Dim imgData(0) As Byte        Using conn As New SqlConnection(My.Settings.piaojuConnectionString)            conn.Open()            Dim cmd As New SqlCommand            cmd.Connection = conn            cmd.CommandText = "select * from paper_baozhangshenpidan where paperID='20160227'"            Dim sdr As SqlDataReader = cmd.ExecuteReader            sdr.Read()            imgData = sdr("applySign")            Dim mystream As New MemoryStream(imgData)            Dim img As Image = Image.FromStream(mystream, True)            Me.PictureBox1.Image = img            Me.PictureBox1.Refresh()            mystream.Close()            conn.Close()        End Using    End SubEnd Class

備忘說明一下:

資料庫中列'applySign'的資料類型為image,用來存放圖片的byte資料



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.