VB.net调用蒙恬Write2Go笔迹手写板进行电子签名

article/2025/7/1 18:07:47

最近的项目需要用到手写电子签名的功能,挑来挑去最后选择了蒙恬Write2Go这款手写板设备,因为手写板上面直接就有一块电子油墨显示屏,所写即所得,还可以看到写的笔迹

安装完蒙恬的驱动及自带应用程序之后,经过测试发现,其工作原理是利用了windows剪切板作为中间桥梁来交换图片数据,每次签名的时候首先需要启动蒙恬自带的一个叫做"蒙恬即写通"的程序:


毕竟手写的笔迹传到电脑上的时候走的还是手写板的电阻屏,所以笔迹效果肯定不如电子油墨屏上面显示的好看,按下设备上的发送按钮,笔迹会作为图片的形式保存到windows剪切板中,利用上一篇写到的windows剪切板内容监视方法,可以在自己的程序中调用到手写笔迹图片,具体实现起来涉及到下面几个技术点:

  1. 在程序中点击签名区域时调用蒙恬的"即写通"程序
  2. 监视windows剪切板,发现有图片数据更新到剪切板中时将其调用到自己的程序中的pictureBox控件里显示出来
  3. 把pictureBox控件中显示的签名笔迹image类型数据写入数据库中
  4. 从数据库中读取image类型数据并在winform的pictureBox控件里显示出来
完整的代码如下:

Imports System.IO
Imports System.Data.SqlClientPublic Class clipboardMon'------------------监视剪切板数据代码开始------------------
#Region " Definitions "'Constants for API Calls...Private Const WM_DRAWCLIPBOARD As Integer = &H308Private 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 IntPtrDeclare Auto Function ChangeClipboardChain Lib "user32" (ByVal HWnd As IntPtr, ByVal HWndNext As IntPtr) As BooleanDeclare 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.MsgCase Is = WM_DRAWCLIPBOARD 'The clipboard has changed...'##########################################################################' Process Clipboard Here :)........................'##########################################################################SendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)'显示剪贴板中的图片信息If Clipboard.ContainsImage() = True ThenPictureBox1.Image = Clipboard.GetImage()PictureBox1.Update()End IfCase Is = WM_CHANGECBCHAIN 'Another clipboard viewer has removed itself...If m.WParam = CType(mNextClipBoardViewerHWnd, IntPtr) ThenmNextClipBoardViewerHWnd = m.LParamElseSendMessage(mNextClipBoardViewerHWnd, m.Msg, m.WParam, m.LParam)End IfEnd SelectMyBase.WndProc(m)End Sub
#End RegionPrivate Sub clipboardMon_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadNewViewer()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.ClickDim ms As New MemoryStream()Dim bReturn() As Byte = NothingMe.PictureBox1.Image.Save(ms, Imaging.ImageFormat.Jpeg)bReturn = ms.GetBufferms.Close()Using conn As New SqlConnection(My.Settings.piaojuConnectionString)conn.Open()Dim cmd As New SqlClient.SqlCommand()cmd.Connection = conncmd.CommandText = "insert into paper_baozhangshenpidan(paperID,applySign) values('20160227',@img)"Dim par As New SqlClient.SqlParameter("@img", SqlDbType.Image)par.Value = bReturncmd.Parameters.Add(par)Dim t As Integer = Integer.Parse(cmd.ExecuteNonQuery())If t > 0 ThenMsgBox("Success")ElseMsgBox("Faile")End Ifconn.Close()End UsingEnd 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.ClickDim imgData(0) As ByteUsing conn As New SqlConnection(My.Settings.piaojuConnectionString)conn.Open()Dim cmd As New SqlCommandcmd.Connection = conncmd.CommandText = "select * from paper_baozhangshenpidan where paperID='20160227'"Dim sdr As SqlDataReader = cmd.ExecuteReadersdr.Read()imgData = sdr("applySign")Dim mystream As New MemoryStream(imgData)Dim img As Image = Image.FromStream(mystream, True)Me.PictureBox1.Image = imgMe.PictureBox1.Refresh()mystream.Close()conn.Close()End UsingEnd Sub
End Class

备注说明一下:

数据库中列'applySign'的数据类型为image,用来存放图片的byte数据




http://chatgpt.dhexx.cn/article/2OHn8atQ.shtml

相关文章

uni-app - 电子签字板组件(签名专用写字画板,支持调整写字板 “横纵“ 方向,可调整线条粗细颜色等,Canvas 绘制非常丝滑流畅)完美兼容 H5 APP 小程序,最好用的画板签字教程插件源码

前言 网上的教程代码非常乱且都有 BUG 存在,非常难移植到自己的项目中,本文代码干净整洁注释详细。 本文实现了 全端兼容,签名专用的写字板组件,真机流畅丝滑且无 BUG, 您直接复制组件源码,按照详细示例+超详细的注释轻松几分钟完成, 如下图 真机测试,您还可以通过组件…

H5手写板电子签名开发

如图所示:前端实现H5canvas手写板电子签名:<!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0, maximum-scale1.0, user-scala…

uniapp - 实现微信小程序电子签名板,横屏手写姓名签名专用写字画板(详细运行示例,一键复制开箱即用)

效果图 实现了在uniapp项目中,微信小程序平台流畅的写字签名板(也可以绘图)功能源码,复制粘贴,改改样式几分钟即可搞定! 支持自动横屏、持预览,真机运行测试非常流畅不卡顿。 基础模板 如下代码所示。 <template><view class=

Vue Canvas 实现电子签名 手写板

直接上代码 <template><section class"signature"><div class"signatureBox"><div class"canvasBox" ref"canvasHW"><canvas ref"canvasF" touchstarttouchStart touchmovetouchMove touchendt…

锁---一些锁学习

1、java锁之公平锁和非公平锁 公平锁 是指多个线程按照申请的顺序来获取&#xff0c;类似排队打饭&#xff0c;先来后到。 非公平锁 是指多个线程获取锁的顺序并不是按照申请锁的顺序&#xff0c;有可能后申请的线程比先申请的线程优先获取锁&#xff0c;在高并发的情况下&a…

C# 实现锁屏

首先&#xff0c;将窗体的FormBorderStyle设置为none&#xff0c;WindowState设为Maximized 让窗体占据整个页面。 form窗体代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using …

win11中睡眠唤醒后如何禁止锁屏界面及登录界面

第一步禁止锁屏界面 gpedit.msc 不显示锁屏-》已启用 第二步&#xff1a;不显示登陆框 netplwiz 经过以上设置以后&#xff0c;打开笔记本就可以直接显示桌面了。

办公计算机锁屏方法,电脑快速锁屏,办公室神技能,再也不怕别人看我的电脑了!...

原标题&#xff1a;电脑快速锁屏&#xff0c;办公室神技能&#xff0c;再也不怕别人看我的电脑了&#xff01; 现在快节奏的社会&#xff0c;电脑的更方面性能与功能是非常之大&#xff0c;我们对电脑的使用频率也越来越高&#xff0c;可见它对我们生活越来越重要。在我们平时使…

Android锁屏的解锁(九个点),使用画的方式,大致的步骤

这篇博客是全部代码(没有解释,纯代码): https://blog.csdn.net/weixin_44614751/article/details/103101104 效果: 第一步:添加背景 第二步:创建九个点 先读取每一个点的图片: creatDot 创建九个点: initNin

ubuntu 18.04取消自动锁屏功能

有时候几分钟不用Ubuntu&#xff0c;系统就自动锁屏了&#xff0c;这是一种安全措施&#xff0c;防止别人趁你不在时使用你的系统。但对于大部分人而言&#xff0c;这是没有必要的&#xff0c;尤其是Ubuntu虚拟机&#xff0c;里面没啥重要的东西&#xff0c;每次锁屏后需要重新…

Android 通知栏,锁屏播放音乐,类似音乐播放器

项目中需要用到播放音频的功能&#xff0c;想做一个类似酷狗、酷我这样的音频播放功能&#xff0c;在通知栏和锁屏时都可以操控音乐&#xff0c;开发中发现oppo reno手机在锁屏时不显示通知栏&#xff0c;研究了整整一天终于解决&#xff0c;特作记录&#xff0c;给遇到同样问题…

Android自定义锁屏实现----仿正点闹钟滑屏解锁

本文原创&#xff0c;转载请注明出处&#xff1a;http://blog.csdn.net/qinjuning 前几周看了下解锁的框架&#xff0c;基本上算是弄了个脸熟。看着别人花哨的解锁界面&#xff0c;心里也很痒痒的。于是&#xff0c;画了一天时间&#xff0c; 捣鼓出了这个成果----仿正点闹钟解…

易安卓打开Android系统中的解锁方式选择页面(锁屏方式选择)

感谢名单 感谢fylfyl2写的https://blog.csdn.net/fyilun/article/details/21257595 E4A打开锁屏方式页面 Intent intent new Intent(); ComponentName cm new ComponentName("com.android.settings","com.android.settings.ChooseLockGeneric"); inte…

Android锁屏的解锁(九个点),使用画的方式

一、效果展示: 这篇博客有解释大概的步骤: https://blog.csdn.net/weixin_44614751/article/details/103101199 二、代码部分: MainActivity.java中的代码: package com.example.drawunlock1;import androidx.appcompat.app.AppCompatActivity;import android.content.re…

让电脑不被锁屏的方法,亲测有效

通过JS来控制键盘&#xff0c;定时按下SCROLLLOCK键&#xff0c;达到电脑不会被锁屏的效果。 通常公司电脑都会自动锁屏&#xff0c;只是时间有长短。有时候闲着了不用电脑&#xff0c;但是却不想让电脑锁屏。那么可以用js代码来控制键盘的按键循环按下实现不锁屏的效果&#x…

android 强制锁屏app,自制力app强制锁屏

自制力app强制锁屏非常适合在学习工作中没有自律性的用户们&#xff0c;当打开app后开启锁屏状态&#xff0c;手机就打不开了&#xff0c;重启也不可能解除锁屏&#xff1b;在此期间&#xff0c;就可以免于手机的打扰&#xff0c;专注学习&#xff1b;感兴趣的小伙伴们快来下载…

android系统密码设置功能,手机锁屏密码怎么设置 三种安卓手机锁屏方式推荐

手机中有很多应用都是与金钱挂钩&#xff0c;特别是微信与支付宝等等既涉及到隐私又与财产关联&#xff0c;这是后手机的安全就尤为重要的&#xff0c;而手机的锁屏密码就是一道最基本的防护措施&#xff0c;那么手机锁屏密码怎么设置?来看看小编推荐的三种安卓手机锁屏方式吧…

Mac锁屏的几种方式

刚换了工作&#xff0c;公司里给配了MacBook&#xff0c;第一次使用&#xff0c;很多常见操作都不知道快捷键&#xff0c;今天来记录下锁屏的几种方式&#xff1a;电脑为MacBook Pro&#xff0c;OS为MacOS Sierra 10.12.3 1. ctrl shift 右上角开关机键 2. option comm…

C语言for循环结构经典练习

文章目录 一、for循环基本知识二、经典例题及解析1.水仙花数2.求规定范围内的完数3.求规定范围内质数4.计算阶乘之和5.计算55555555555555(类型)6.计算112123123412345(类型)7.判断用户输入正整数的位数8.判断某正整数是否为回文数9.九九乘法表10.统计用户输入的字符中&#xf…

Java基础语法——循环结构

每日正能量 趁你现在还有时间&#xff0c;尽你自己最大的努力&#xff0c;努力做成你最想做的那件事&#xff0c;成为你最想成为的那种人&#xff0c;过着你最想过的那种生活。这个世界永远比你想的要更精彩&#xff0c;不要败给生活。 循环结构 【本章内容】1. while循环 2. d…