大家好,欢迎来到IT知识分享网。
当时从其他税控接口里面提取的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; begin SendMessage(aHandle, WM_SETTEXT, 0, integer(aValue)); end; procedure TFrmMain.btnInputClick(Sender: TObject); var i: integer; HR: THandle; ClassName, Title: string; sl: TSendInputHelper; InvFirstPoint: TPoint; current, BillDetail: TBillDetail; BillDetailList: TList<TBillDetail>; num2, millisecondsTimeout: integer; begin BillDetailList := TList<TBillDetail>.Create; for i := 1 to 6 do begin BillDetail := 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 do begin ClassName := JSON.Items[i].ItemByName('ClassName').AsString; Title := JSON.Items[i].ItemByName('Title').AsString; if (ClassName <> '') and (Title <> '') then begin HR := FindWindow(PWideChar(ClassName), PWideChar(Title)); end else begin if ClassName <> '' then begin HR := FindWindow(PWideChar(ClassName), nil); end else begin HR := FindWindow(nil, PWideChar(Title)); end; end; if HR <> 0 then begin Break; end; end; if HR <> 0 then begin SetForegroundWindow(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; try InvFirstPoint := GetPoint(JSON.Items[i], 'InvFirstPoint'); MoveAndClick(HR, InvFirstPoint); num2 := 0; millisecondsTimeout := 1000; for current in BillDetailList do begin Application.ProcessMessages; if (num2 <= BillDetailList.Count - 1) and (num2 > 0) then begin sl.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; finally FreeAndNil(sl); end; end; end; procedure TFrmMain.FormCreate(Sender: TObject); begin JSON := TQJson.Create; JSON.Parse(JsonFile.Text); end; procedure TFrmMain.FormDestroy(Sender: TObject); begin FreeAndNil(JSON); end; function TFrmMain.GetPoint(aJSON: TQJson; aName: string): TPoint; var sPoint: string; begin sPoint := 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); var rect: TRect; point: TPoint; begin GetWindowRect(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; var p1, p, point: TPoint; sPoint: string; sl: TSendInputHelper; rect: TRect; begin GetWindowRect(aHandle, rect); GetCursorPos(p1); sl := TSendInputHelper.Create; try sPoint := 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; finally SetCursorPos(p1.X, p1.Y); FreeAndNil(sl); end; end;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34505.html