当时从其他税控接口里面提取的JSON脚本,根据脚本实现了一份Delphi的源代码。

JSON脚本:

[{"ClassName": "","Title": "开具增值税专用发票","X": 150,"Y": 3,"ConfirmTitle": "","ConfirmClass": "","SI_Mode": 0,"ParentPath": "","InvType": 0,//表示增票"ClickPosition": {"ImportPoint": "-680, 25",    //导入按钮的位置"MImportPoint": "-680, 75",//手动导入按钮的位置"BImportPoint": "-680, 95",    //自动导入按钮的位置"ListPoint":"-440,25",    //清单按钮的位置"InvZKPoint":"-380,25",    //发票界面的折扣按钮的位置"PricePoint":"-315,25","AddPoint":"-255,25","DeletePoint":"-195,25","PrintPoint": "-125, 25",    //打印按钮的位置"SelectPoint": "590, 29",    //选择单据按钮的位置"ListZKPoint":"450,25"},"CtrlPosition": {"InvFirstPoint": { //发票界面的首行位置"PosIndex": 0,"Reference": "2","Position":"120,325","ParentTitle": "","ParentClass": ""},"InvNo": { //发票号码"PosIndex": 16,"Reference": "2","Position":"730,53","ParentTitle": "","ParentClass": ""},"InvCode": { //发票代码"PosIndex": 17,"Reference": "2","Position":"200,53","ParentTitle": "","ParentClass": ""},"PrintDate": { //打印日期"PosIndex": 15,"Reference": "2","Position":"770,100","ParentTitle": "","ParentClass": ""},"GFName": { //购方名称"PosIndex": 38,"Reference": "2","Position":"230,135","ParentTitle": "","ParentClass": ""},"GFTaxNo": { //购方税号"PosIndex": 33,"Reference": "2","Position":"230,157","ParentTitle": "","ParentClass": ""},"GFAddrTel": { //购方地址电话"PosIndex": 35,"Reference": "2","Position":"230,180","ParentTitle": "","ParentClass": ""},"GFBankAccount": { //购方银行账号"PosIndex": 31,"Reference": "2","Position":"230,203","ParentTitle": "","ParentClass": ""},"XFBankAccount": { //销方银行账号"PosIndex": 22,"Reference": "2","Position":"235,553","ParentTitle": "","ParentClass": ""},"Memo": { //备注"PosIndex": 10,"Reference": "2","Position":"590,480","ParentTitle": "","ParentClass": ""},"FHR": { //复核人"PosIndex": 9,"Reference": "2","Position":"380,590","ParentTitle": "","ParentClass": ""},"SKR": { //收款人"PosIndex": 7,"Reference": "2","Position":"170,590","ParentTitle": "","ParentClass": ""}}
}]

delphi代码:

function SetWindowCtrlText(aHandle: THandle; aValue: string): Boolean;
beginSendMessage(aHandle, WM_SETTEXT, 0, integer(aValue));
end;procedure TFrmMain.btnInputClick(Sender: TObject);
vari: integer;HR: THandle;ClassName, Title: string;sl: TSendInputHelper;InvFirstPoint: TPoint;current, BillDetail: TBillDetail;BillDetailList: TList<TBillDetail>;num2, millisecondsTimeout: integer;
beginBillDetailList := TList<TBillDetail>.Create;for i := 1 to 6 dobeginBillDetail := TBillDetail.Create;BillDetail.SPMC := '商品名称';BillDetail.SPGGXH := '规格';BillDetail.JLDW := '单位';BillDetail.sl := 1;BillDetail.DJ := 1000;BillDetail.JE := 1000;BillDetailList.Add(BillDetail);end;for i := 0 to JSON.Count - 1 dobeginClassName := JSON.Items[i].ItemByName('ClassName').AsString;Title := JSON.Items[i].ItemByName('Title').AsString;if (ClassName <> '') and (Title <> '') thenbeginHR := FindWindow(PWideChar(ClassName), PWideChar(Title));endelsebeginif ClassName <> '' thenbeginHR := FindWindow(PWideChar(ClassName), nil);endelsebeginHR := FindWindow(nil, PWideChar(Title));end;end;if HR <> 0 thenbeginBreak;end;end;if HR <> 0 thenbeginSetForegroundWindow(HR);SetText(JSON.Items[i], HR, 'GFName', '购方名称');SetText(JSON.Items[i], HR, 'GFTaxNo', '1234567890123456');SetText(JSON.Items[i], HR, 'GFAddrTel', '地址电话');SetText(JSON.Items[i], HR, 'GFBankAccount', '银行账号');SetText(JSON.Items[i], HR, 'Memo', '备注');SetText(JSON.Items[i], HR, 'FHR', '复核人');SetText(JSON.Items[i], HR, 'SKR', '收款人');sl := TSendInputHelper.Create;tryInvFirstPoint := GetPoint(JSON.Items[i], 'InvFirstPoint');MoveAndClick(HR, InvFirstPoint);num2 := 0;millisecondsTimeout := 1000;for current in BillDetailList dobeginApplication.ProcessMessages;if (num2 <= BillDetailList.Count - 1) and (num2 > 0) thenbeginsl.AddDelay(millisecondsTimeout);sl.AddVirtualKey(VK_RETURN);sl.AddDelay(millisecondsTimeout);sl.AddVirtualKey(VK_HOME);sl.Flush;end;sl.AddText(current.SPMC);sl.AddVirtualKey(VK_TAB);sl.AddDelay(millisecondsTimeout);Delay(millisecondsTimeout);sl.AddText(current.SPGGXH);sl.AddVirtualKey(VK_TAB);sl.AddDelay(millisecondsTimeout);sl.AddText(current.JLDW);sl.AddVirtualKey(VK_TAB);sl.AddDelay(millisecondsTimeout);sl.AddText(CurrToStr(current.sl));sl.AddVirtualKey(VK_TAB);sl.AddDelay(millisecondsTimeout);sl.AddText(CurrToStr(current.DJ));sl.AddVirtualKey(VK_TAB);sl.AddDelay(millisecondsTimeout);sl.AddText(CurrToStr(current.JE));sl.AddVirtualKey(VK_RETURN);sl.AddDelay(millisecondsTimeout);sl.AddVirtualKey(VK_RETURN);sl.AddDelay(millisecondsTimeout);sl.AddVirtualKey(VK_RETURN);sl.Flush;inc(num2);end;finallyFreeAndNil(sl);end;end;
end;procedure TFrmMain.FormCreate(Sender: TObject);
beginJSON := TQJson.Create;JSON.Parse(JsonFile.Text);
end;procedure TFrmMain.FormDestroy(Sender: TObject);
beginFreeAndNil(JSON);
end;function TFrmMain.GetPoint(aJSON: TQJson; aName: string): TPoint;
varsPoint: string;
beginsPoint := aJSON.ItemByPath('CtrlPosition.' + aName + '.Position').AsString;Result.X := StrToInt(Copy(sPoint, 1, Pos(',', sPoint) - 1));Result.Y := StrToInt(Copy(sPoint, Pos(',', sPoint) + 1, 10));
end;procedure TFrmMain.MoveAndClick(aHandle: THandle; p: TPoint);
varrect: TRect;point: TPoint;
beginGetWindowRect(aHandle, rect);point.X := rect.Left;point.Y := rect.Top;ClientToScreen(point);SetCursorPos(point.X + p.X, point.Y + p.Y);mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;function TFrmMain.SetText(aJSON: TQJson; aHandle: THandle; aName, aValue: string): Boolean;
varp1, p, point: TPoint;sPoint: string;sl: TSendInputHelper;rect: TRect;
beginGetWindowRect(aHandle, rect);GetCursorPos(p1);sl := TSendInputHelper.Create;trysPoint := aJSON.ItemByPath('CtrlPosition.' + aName + '.Position').AsString;p.X := StrToInt(Copy(sPoint, 1, Pos(',', sPoint) - 1));p.Y := StrToInt(Copy(sPoint, Pos(',', sPoint) + 1, 10));point.X := rect.Left;point.Y := rect.Top;ClientToScreen(point);SetCursorPos(point.X + p.X, point.Y + p.Y + 75);mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);sl.AddText(aValue);sl.Flush;finallySetCursorPos(p1.X, p1.Y);FreeAndNil(sl);end;
end;

转载于:https://www.cnblogs.com/masg/p/9925350.html

税控接口 - 模拟录入相关推荐

  1. java调用百望税控NISEC_SKSC.dll发送xml报文

    1.第一个问题:Java调用dll文件 JNative方式调用dll JNative是一种能够使Java语言使调用DLL的一种技术,对JNI进行了封装,可能有些读者会有这样一个问题,JNative对J ...

  2. 软件升级|增值税发票税控开票软件(税控盘版)新增改进功能说明(版本号:V2.0.51_ZS_20221031)

    增值税发票税控开票软件 (税控盘版) 新增改进功能说明 (版本号:V2.0.51_ZS_20221031) 2022-10 目录 第1章 概述 1.1 新增改进功能 1.1.1 发票管理功能 1.1. ...

  3. 软件更新|增值税发票税控开票软件(金税盘版_V2.051ZS_20221031)

    公开 FWSK(KP)_ V2.0.51_ZS_20221031 综合说明 一.补丁下发说明 版本号 V2.0.51 补丁编号 FWSK(KP)_ V2.0.51_ZS_20221031 系统 名称 ...

  4. 上海税控器(桑达SED-320)疑难解析

    此贴记录安装税控器过程中遇到困惑,系统有同样遭遇朋友能够少走弯路,借此鄙视桑达税控器SED-320,鄙视桑达税控管理系统,鄙视所有相关行政部门办事效率低下和傲慢. 上海桑达(SED-320)税控管理系 ...

  5. jmeter web服务器协议,【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter测试SOAP协议性能测试脚本开发(示例代码)...

    目录: [阐述]:首先应该遇到了一个共同的问题,JMeter3.2之后就没有WebService(SOAP) Request,后来经过查询网上资料得知其实可以用HTTP请求来操作,结果是一样的. [步 ...

  6. pgadmin连接服务器失败_增值税发票税控软件:连接服务器失败是否使用离线文件进行更新?...

    增值税发票税控软件:连接服务器失败是否使用离线文件进行更新? 第一步:确认本地电脑是否可以正常打开网页: 打开电脑,网页查看一下是否可以正常上网,打开百度发现,可以正常上网. 第二步:请先确认网络配置 ...

  7. java8四大核心函数式接口(模拟实现,全网最通俗易懂)

    前言,如果不精通lamda表达式,请观看文章https://blog.csdn.net/wwwwwww31311/article/details/113116327 一.消费者接口 经典案例代码,怎么 ...

  8. recovery升级是显示进度条_注意!税控系统软件升级了,还有疑问看这里!

    开票软件升级后,不少纳税人表示软件升级过程中遇到不少问题.可能各省税控系统软件升级存在功能和界面的少许差异,敬请纳税人咨询当地税务机关或其指定的服务商,按其要求操作.今天,整理了北京.上海等地纳税人在 ...

  9. 金税盘怎么安装在电脑上_金税盘怎么安装,电脑重装后怎样安装金税盘税控开票软件?...

    金税盘是税务部门为了报税方便而进化出来的一个系统.通过金税盘可以开票.抄税.清卡.领购发票.金税盘使用增值税防伪税控系统,可开具增值税专用发票和增值税普通发票,一般的企业或个体商铺纳税人需要用到.第一 ...

  10. easymock接口模拟_EasyMock部分模拟

    easymock接口模拟 EasyMock supports creating partial mock, where we can specify the methods that will be ...

最新文章

  1. 通过显微镜,人们又看到了一个活生生的但是肉眼看不到的世界。透过成千上万的点击数据,在线世界也就变得更为鲜活,更有意义了。...
  2. MurmurHash算法:高运算性能,低碰撞率的hash算法
  3. SDN学习之旅-RYU笔记(2)
  4. ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统
  5. ubuntu16.04打开软件或终端的窗口自动在左上角
  6. 【Ogre-windows】环境配置
  7. 模块目录下site.php,使用apache配置为每个站点指定PHP包含目录
  8. codeforce 780C Andryusha and Colored Balloons
  9. eclipse切换git分支
  10. HW 基于接口/全局地址池的DHCP
  11. 计算机网络苏州大学题库,苏州大学计算机网络样卷B[计科大类].doc
  12. 【数据分析】基于matlab焊缝边缘检测算法对比分析 【含Matlab源码 260期】
  13. DBPN:Deep Back-Projection Networks For Super-Resolution
  14. mysql二进制日志管理
  15. 求任意多边形面积(凹多边形和凸多边形)
  16. java roundup函数_随手记之Linux 2.6.32内核SYN flooding警告信息
  17. java/kafka的使用,生产者 ,发布/发送消息,自定义数据/json数据,实战。
  18. 软件构造LAB1的一些思考
  19. zabbix 5.0监控客户端
  20. [k8s集群系列-09]Kubernetes 组件 Dashboard

热门文章

  1. 智能门锁主流品牌有哪些?选购门锁时要注重产品的哪些特性?
  2. Linux终端怎么打开root,在linux终端中执行root命令有哪些方法
  3. java 输入流详解_java输入输出流详解
  4. matlab小波分析特征提取,基于小波分析的特征信号提取的matlab程序
  5. 怎么用计算机撩人,如何用你的专业“撩人”?
  6. 怎么看外文文献的影响因子_怎么看文章的影响因子?
  7. 四阶龙格库塔法程序c语言,四阶龙格库塔法
  8. BCH编译码的matlab性能分析
  9. Java、JSP药品库房管理系统
  10. B站 汇编语言 视频 教程