用友U8补料申请单批量处理
补料申请单需要手动选生产订单号和行号,效率低,操作不方便,特写这个小工具,批量填充,曲线救国。
;**** 参数创建于 AutoIt3Wrapper_GUI ****
; *** Start added by AutoIt3Wrapper ***
#include <WinAPIConstants.au3>
; *** End added by AutoIt3Wrapper ***
#Region
#AutoIt3Wrapper_Icon=msra.ico
#AutoIt3Wrapper_Outfile_x64=U8补料申请单批量处理.exe
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Res_Comment=U8补料申请单批量处理
#AutoIt3Wrapper_Res_Description=U8补料申请单批量处理
#AutoIt3Wrapper_Res_Fileversion=3.2.0.0
#AutoIt3Wrapper_Res_ProductName=U8补料申请单批量处理
#AutoIt3Wrapper_Res_ProductVersion=2.0
#AutoIt3Wrapper_Res_LegalCopyright=HSIAOYANG CHEN
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=2052
#AutoIt3Wrapper_Res_requestedExecutionLevel=None
#EndRegion
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <AutoItConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <Misc.au3>
If _Singleton("SHOYO", 1) = 0 Then ;禁止多个程序同时运行
;MsgBox($MB_SYSTEMMODAL, "Warning", "An occurrence of test is already running")
Exit
EndIf
main()
;将设置的参数从注册表读取出来使用
Func init()
Global $pn, $pny, $num, $origx, $origy, $high, $wide, $line, $stop
RegEnumVal("HKEY_CURRENT_USER\SOFTWARE\SHOYO", 1)
If @error = 0 Then
GUICtrlSetData($idFile1, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "pn"))
GUICtrlSetData($idFile2, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "pny"))
GUICtrlSetData($idFile3, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "num"))
GUICtrlSetData($idFile4, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "origx"))
GUICtrlSetData($idFile5, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "high"))
GUICtrlSetData($idFile6, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "origy"))
GUICtrlSetData($idFile7, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "wide"))
GUICtrlSetData($idFile8, RegRead("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "line"))
EndIf
EndFunc ;==>init
;鼠标操作核心算法
Func start()
Local $hWnd = WinGetHandle("[CLASS:ThunderRT6FormDC]") ; 获取U8窗口句柄
If $hWnd Then
ProcessSetPriority("EnterprisePortal.exe", $PROCESS_ABOVENORMAL);提高U8响应优先级
;Mod($num,10) 一组10次,求余数
;Int($num/10) 一组10次,求操作趟数
BlockInput(1) ;禁止外设输入
;MouseMove($origx , $origy,100)
;MouseClick ( "left" , $origx , $origy, 1, 50 )
;Opt("MouseClickDelay", 500) ;10 milliseconds
$tmp = $num ;tmp临时变量,作为$num和$i的储存
GUICtrlSetColor($idFile8l, 0x0000FF)
GUICtrlSetColor($idFile3l, 0x00FF00)
GUICtrlSetColor($idBtn,0xFF0000)
GUICtrlSetData($idFile3l, "剩余行数:")
GUICtrlSetData($idBtn, "进行中...")
GUICtrlSetData($idFile8l, "执行次数:")
For $j = 0 To Int($num / 10)
For $i = 0 To ($j = Int($num / 10) ? Mod($num, 10) - 1 : 9)
MouseClick("left", $origx, $origy + $i * $high, 1, 30)
Send($pn)
MouseClick("left", $origx + $wide, $origy + $i * $high, 1, 30)
Send($pny)
$line += 1
GUICtrlSetData($idFile8, $line)
$tmp -= 1
GUICtrlSetData($idFile3, $tmp)
Sleep(10) ;休眠,暂停线程,给主程序处理esc事件提供时间
If $stop = 1 Then
$tmp = $i
$i = ($j = Int($num / 10) ? Mod($num, 10) - 1 : 9)
EndIf
Next
If $stop = 1 Then
$i = $tmp + 1
EndIf
If Not ($j* 10 = $num) Then
MouseClick("left", $origx - $wide / 2, $origy + ($i-1) * $high, 1, 30)
EndIf
Sleep(10) ;休眠,暂停线程,给主程序处理esc事件提供时间
If ($tmp > 0) And ($stop = 0) Then
Sleep(500 + 22000 * ($line / 1000)) ;数据行数越多,系统延迟越大,加长等待时间
For $i = 0 To ((($j = Int($num / 10)) Or (($j+1) * 10 = $num)) ? -1 : 9) ;最尾页的处理:最后一页不进行翻页,整数页也不翻页处理。
MouseWheel($MOUSE_WHEEL_DOWN, 1)
Sleep(500 + 250 * ($line / 1000))
Next
EndIf
If $stop = 1 Then
$j = Int($num / 10)
EndIf
Next
GUICtrlSetColor($idFile8l, 0x000000)
GUICtrlSetData($idFile3l, "填充行数:")
GUICtrlSetColor($idFile3l, 0x000000)
GUICtrlSetData($idBtn,"开始填充")
GUICtrlSetColor($idBtn,0x000000)
BlockInput(0) ;允许外设输入
ProcessSetPriority("EnterprisePortal.exe", $PROCESS_NORMAL);恢复默认U8响应优先级
Else
MsgBox($MB_ICONERROR, "", "未找到U8补料申请单窗口!", 10)
EndIf
EndFunc ;==>start
;绘制图形窗口
Func main()
GUICreate("U8补料申请单批量处理", 320, 200, @DesktopWidth / 2 + 200, @DesktopHeight / 2 - 100, -1, BitOR($WS_EX_ACCEPTFILES, $WS_EX_TOPMOST))
GUISetIcon(@SystemDir & "\System32\msra.exe", 0)
GUICtrlCreateLabel("生产订单号:", 10, 15, 100) ;x=10,y=15,长度100
Global $idFile1 = GUICtrlCreateInput("2024040003", 100, 10, 200, 20) ;x=100,y=10,长度200,高度20
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlCreateLabel("生产订单行号:", 10, 15 + 30, 90)
Global $idFile2 = GUICtrlCreateInput("1", 100, 40, 50, 20, $ES_NUMBER) ;限制数字类型
GUICtrlSetStyle(-1, $SS_RIGHT)
GUICtrlSetLimit(-1, 4, 1) ;限制字符最大长度4,最小1,
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
Global $idFile3l = GUICtrlCreateLabel("填充行数:", 180, 15 + 30, 70)
Global $idFile3 = GUICtrlCreateInput("10", 250, 40, 50, 20, $ES_NUMBER)
GUICtrlSetStyle(-1, $SS_RIGHT)
GUICtrlSetLimit(-1, 3, 1)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlCreateLabel("原点坐标X:", 10, 15 + 30 + 30, 90)
Global $idFile4 = GUICtrlCreateInput("500", 100, 70, 50, 20, $ES_NUMBER)
GUICtrlSetStyle(-1, $SS_RIGHT)
GUICtrlSetLimit(-1, 4, 1)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlCreateLabel("行高:", 180, 15 + 30 + 30, 70)
Global $idFile5 = GUICtrlCreateInput("25", 250, 70, 50, 20, $ES_NUMBER)
GUICtrlSetStyle(-1, $SS_RIGHT)
GUICtrlSetLimit(-1, 2, 1)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlCreateLabel("原点坐标Y:", 10, 15 + 30 + 30 + 30, 90)
Global $idFile6 = GUICtrlCreateInput("320", 100, 100, 50, 20, $ES_NUMBER)
GUICtrlSetStyle(-1, $SS_RIGHT)
GUICtrlSetLimit(-1, 4, 1)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUICtrlCreateLabel("行宽:", 180, 15 + 30 + 30 + 30, 70)
Global $idFile7 = GUICtrlCreateInput("100", 250, 100, 50, 20, $ES_NUMBER)
GUICtrlSetStyle(-1, $SS_RIGHT)
GUICtrlSetLimit(-1, 3, 1)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
Global $idBtn = GUICtrlCreateButton("开始填充", 110, 140, 100, 40)
;GUICtrlSetFont(-1,16)
GUICtrlCreateLabel("X/Y轴坐标:", 10, 15 + 30 + 30 + 30 + 30, 90)
;GUICtrlSetFont(-1,13)
Global $Label1 = GUICtrlCreateLabel("0/0", 10, 15 + 30 + 30 + 30 + 30 + 20, 90)
GUICtrlSetFont($Label1, 12)
Global $idFile8l = GUICtrlCreateLabel("执行次数:", 245, 15 + 30 + 30 + 30 + 30, 100)
Global $idFile8 = GUICtrlCreateInput("1", 250, 15 + 30 + 30 + 30 + 30 + 20, 50, 20, $ES_NUMBER)
GUICtrlSetStyle(-1, $SS_RIGHT)
GUICtrlSetLimit(-1, 4, 1)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
GUISetState(@SW_SHOW)
init()
HotKeySet("{Esc}", "_Stop")
Global $_whand = DllCallbackRegister("_Mouse_Events_Handler", "int", "int;ptr;ptr")
Local $_whmod = _WinAPI_GetModuleHandle(0)
Global $_whook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($_whand), $_whmod)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "pn", "REG_SZ", GUICtrlRead($idFile1))
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "pny", "REG_SZ", GUICtrlRead($idFile2))
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "num", "REG_SZ", GUICtrlRead($idFile3))
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "origx", "REG_SZ", GUICtrlRead($idFile4))
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "high", "REG_SZ", GUICtrlRead($idFile5))
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "origy", "REG_SZ", GUICtrlRead($idFile6))
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "wide", "REG_SZ", GUICtrlRead($idFile7))
RegWrite("HKEY_CURRENT_USER\SOFTWARE\SHOYO", "line", "REG_SZ", GUICtrlRead($idFile8))
Sleep(100)
ExitLoop
Case $idBtn
$pn = GUICtrlRead($idFile1)
$pny = GUICtrlRead($idFile2)
$num = GUICtrlRead($idFile3)
$origx = GUICtrlRead($idFile4)
$high = GUICtrlRead($idFile5)
$origy = GUICtrlRead($idFile6)
$wide = GUICtrlRead($idFile7)
$line = GUICtrlRead($idFile8)
$stop = 0
If MsgBox($MB_YESNO, "🐇执行信息核对", "生产订单号:" & $pn & @CRLF & "生产订单行号:" & $pny & @CRLF & "填充行数:" & $num & @CRLF & "原点坐标X/Y:" & $origx & "/" & $origy & @CRLF & "行高/行宽:" & $high & "/" & $wide & @CRLF & @CRLF & "按ESC键,可中断运行!" & @CRLF) < 7 Then
start()
EndIf
EndSwitch
WEnd
EndFunc ;==>main
Func _Mouse_Events_Handler($wnCode, $wwParam, $wlParam)
Switch $wwParam
Case $WM_MOUSEMOVE ;
Local $aPos = MouseGetPos()
Local $iX = $aPos[0]
Local $iY = $aPos[1]
GUICtrlSetData($Label1, $iX & '/' & $iY & @CRLF)
;ConsoleWrite($iX & '/' & $iY & @CRLF)
EndSwitch
EndFunc ;==>_Mouse_Events_Handler
Func _Stop()
$stop = 1
EndFunc ;==>_Stop
下载地址:U8补料申请单批量处理.zip