using DevicesService.Commen; using DevicesService.Common; using Functions.FileExt; using Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http; using System; using System.Drawing; using System.Globalization; using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; //0816加实时报点 [StructLayout(LayoutKind.Sequential)] public struct TOUCH_INFO { public int X; public int Y; public int Pressure; public int SN; public int btnID;//5寸 确定 重签 取消按钮 } namespace DevicesService.Devices { public class SignDll { //public static PointF endPos; //public static PointF beginPos; //public static PointF frontPos; //private static int xypointcount = 0; //private static int[] lastpointx = new int[3]; //private static int[] lastpointy = new int[3]; //Point mPoint = new Point(-1, -1); // private static System.Drawing.SolidBrush myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Red); //private Graphics mGraphicsBuffer; // private static Pen pen = new Pen(Color.Black); // public static int status = -1; //private static Bitmap bitmap = new Bitmap(594, 392); public SignDll() { try { //endPos = new PointF(-1F, -1f); //beginPos = new PointF(-1F, -1f); //frontPos = new PointF(-1F, -1f); //lastpointx[0] = -1; //lastpointy[0] = -1; //lastpointx[1] = -1; //lastpointy[1] = -1; //lastpointx[2] = -1; //lastpointy[2] = -1; //xypointcount = 0; } catch (Exception ex) { } finally { } } public static void DevGetTouchNumber(int number) { try { Console.WriteLine(number); //1 签字确定按钮 2签字取消按钮 3 签字重签按钮(清空界面) if (number == 1) { int ret = FiveInchDll.ComSignOK(); Console.WriteLine("ComSignOK:" + ret); FiveInchDll.ComSetBackGroundAdv(); Task.Run(() => { ScriptCallbackObject script = new ScriptCallbackObject(); string str = script.GetSignData("","'"); str = "@" + str; TcpServer.SendImages(str); }); } else if (number == 3) { string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\sign_ui.jpg"; int ret = FiveInchDll.ComSetSignBackgroundImage(UIFile); Console.WriteLine("ComSetSignBackgroundImage:" + ret); } else { //lastpointx[0] = -1; //lastpointy[0] = -1; //lastpointx[1] = -1; //lastpointy[1] = -1; //lastpointx[2] = -1; //lastpointy[2] = -1; FiveInchDll.ComSetBackGroundAdv(); } } catch { } finally { } } //0816加报点 public static void GetTouchPoint(TOUCH_INFO[] info1) { return; //int x = 0, y = 0; //int pressurevl; //int dx = 0, dy = 0; //for (int k = 0; k < 80; k++) //{ // x = info1[k].X; // y = info1[k].Y; // //落笔 // if (info1[k].Pressure > 0) // { // if (info1[k].Pressure > 0 && info1[k].Pressure < 500) // { // pressurevl = 1; // pen.Width = 1; // } // else if (info1[k].Pressure >= 500 && info1[k].Pressure < 1000) // { // pressurevl = 2; // pen.Width = 2; // } // else if (info1[k].Pressure >= 1000 && info1[k].Pressure < 1500) // { // pressurevl = 3; // pen.Width = 3; // } // else if (info1[k].Pressure >= 1500 && info1[k].Pressure < 2048) // { // pressurevl = 4; // pen.Width = 4; // } // else // { // pressurevl = 0; // pen.Width = 1; // } // } // else // { // //抬笔 // pressurevl = 0; // lastpointx[0] = -1; // lastpointy[0] = -1; // lastpointx[1] = -1; // lastpointy[1] = -1; // lastpointx[2] = -1; // lastpointy[2] = -1; // continue; // } // if (info1[k].Pressure > 10) //有画线宽度 // { // lastpointx[2] = x; // lastpointy[2] = y; // if (lastpointx[2] != -1) // { // if (lastpointx[1] != -1 && lastpointx[0] != -1) // { // //float dx = Math.Abs(lastpointx[2] - beginPos.X); // //float dy = Math.Abs(endPos.Y - beginPos.Y); // dx = Math.Abs(lastpointx[2] - lastpointx[1]); // dy = Math.Abs(lastpointy[2] - lastpointy[1]); // if ((dx != 0) && (dy != 0)) // { // if (lastpointy[1] != -1 && lastpointy[2] != -1) //y轴相同的点不画,直接跳过 // { // if (lastpointx[1] != -1 && lastpointx[2] != -1) //第3个点和第二个点比较是否x坐标在同一个位置,不是就执行画第一个点到第二个点的线 // { // //painter->drawLine(frontPos, beginPos); //画线 // //g.DrawLine(pen, lastpointx[0], lastpointy[0], lastpointx[1], lastpointy[1]); // //painter->drawPoint(beginPos); //画点 // //frontPos = beginPos; // //beginPos = endPos; // lastpointx[0] = lastpointx[1]; // lastpointy[0] = lastpointy[1]; // lastpointx[1] = lastpointx[2]; // lastpointy[1] = lastpointy[2]; // } // else // { // //是就执行画第一个点到第三个点的线 // //painter->drawLine(frontPos, endPos); // //g.DrawLine(pen, lastpointx[0], lastpointy[0], lastpointx[2], lastpointy[2]); // //frontPos = endPos; //第三个点赋值第一个点 // //beginPos = QPointF(0, 0); //第二个点置空 // //beginPos.X = -1; // //beginPos.Y = -1; // lastpointx[0] = lastpointx[2]; // lastpointy[0] = lastpointy[2]; // lastpointx[1] = -1; // lastpointy[1] = -1; // } // } // } // }// // else // { // if (lastpointx[1] != -1) //不为空在赋值,防止丢弃点时赋空值 // { // lastpointx[0] = lastpointx[1]; // lastpointy[0] = lastpointy[1]; // } // lastpointx[1] = lastpointx[2]; // lastpointy[1] = lastpointy[2]; // } // } // } // else // { // dx = dy = 0; // lastpointx[0] = -1; // lastpointy[0] = -1; // lastpointx[1] = -1; // lastpointy[1] = -1; // lastpointx[2] = -1; // lastpointy[2] = -1; // } //} } //打开签字版 public static int OpenComDevice() { //GetTouchNumber m_GetTouchCB = new(DevGetTouchNumber); try { status = FiveInchDll.OpenComDevice(DevGetTouchNumber); if (status == -1) { status = FiveInchDll.OpenComDevice(DevGetTouchNumber); Console.WriteLine("OpenComDevice:" + status); //清空界面 // GetTouchNumber(2); if (status == 0) { //关闭报点 int ret = FiveInchDll.ComSendPoint(0, GetTouchPoint); if (true) { string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\adv_ui.jpg"; int ret1 = FiveInchDll.ComSendAdvantageImage(UIFile); Console.WriteLine("ComSendAdvantageImage:" + ret1); FiveInchDll.ComSetBackGroundAdv(); } if (true) { string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\sign_ui.jpg"; int ret1 = FiveInchDll.ComSetSignBackgroundImage(UIFile); Console.WriteLine("ComSetSignBackgroundImage:" + ret1); } } } else { //清空界面 //GetTouchNumber(2); if (status == 0) { //关闭报点 int ret = FiveInchDll.ComSendPoint(0, GetTouchPoint); if (true) { string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\adv_ui.jpg"; int ret1 = FiveInchDll.ComSendAdvantageImage(UIFile); Console.WriteLine("ComSendAdvantageImage:" + ret1); FiveInchDll.ComSetBackGroundAdv(); } if (true) { string UIFile = System.IO.Directory.GetCurrentDirectory() + "\\sign_ui.jpg"; int ret1 = FiveInchDll.ComSetSignBackgroundImage(UIFile); Console.WriteLine("ComSetSignBackgroundImage:" + ret1); } } } } catch { } finally { } return status; } //关闭签字版 public static int CloseComDevice() { int ret = -1; try { if (status == 0) { ret = FiveInchDll.CloseComDevice(); if (ret == 0) { status = -1; } } } catch { } finally { } return ret; } //保存签字版数据 public string ComSetPictureSavePath() { try { DateTime dateTime = DateTime.Now; string time = DateTime.Now.ToString( "yyyyMMddHHmmss", DateTimeFormatInfo.InvariantInfo); var dirpath = Path.Combine(Environment.CurrentDirectory, "wwwroot", "Sign"); FileExt.MakeSureDirExist(dirpath); var filepath = Path.Combine(dirpath, time); string SignFile = dirpath + "\\" + time + ".png"; string sourcepaht = Environment.CurrentDirectory + "\\fiveInch.png"; int ret = FiveInchDll.ComSignOK(); if (ret == 0) { return SignFile; } else { return ""; } } catch (Exception ex) { return ""; } } } class FiveInchDll { [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)] public delegate void GetTouchNumber(int number); //0816加报点 [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.StdCall)] public delegate void TOUCH_INFO_FUNC([MarshalAs(UnmanagedType.LPArray, SizeConst = 160)] TOUCH_INFO[] info); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComSendPoint(int nState, [MarshalAs(UnmanagedType.FunctionPtr)] TOUCH_INFO_FUNC callback); //0816加报点 [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int OpenComDevice([MarshalAs(UnmanagedType.FunctionPtr)] GetTouchNumber callback); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int CloseComDevice(); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComSetSignBackgroundImage(string UIFile); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComSetPictureSavePath(string PicturePath, int PicturePathLen); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComSignOK(); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComSetPenStyle(int PenStyle); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComGetDevSN(StringBuilder pDevSN, int iSync); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComGetDevSN_Async(StringBuilder pDevSN); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComWhiteScreen(); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComSendAdvantageImage(string UIFile); [DllImport("XTJZFiveInch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int ComSetBackGroundAdv(); } }