问题描述
问题描述:工作中的计算软件因为没有相应的API开放,但是某一些计算算例却并不需要重新输入,而仅仅需要修改某几个输入框的值,所以想通过程序对之前算例的输入内容自动读取然后再自动填入相应的文本框内。个人想法:通过程序来控制对软件菜单的单击操作(通过鼠标坐标),然后控制光标并依次定位于每一个文本框,读取原算例内容后,将相应的值自动填写进相应的框内,完成数据的快速输入。期望解答的内容:是否可行?若可以,我应该学习哪些内容?,希望不吝赐教,谢谢!!程序界面示意:
解决方案
解决方案二:
api函数,findwindow/findchildwindow找到文本框句柄,发wm_settext消息即可。
解决方案三:
<DllImport("user32.dll",SetLastError:=True,CharSet:=CharSet.Auto)>_PrivateFunctionSendMessage(ByValhWndAsIntPtr,ByValMsgAsUInteger,ByValwParamAsInt32,ByVallParamAsString)AsInt32EndFunctionPrivateConstWM_SETTEXTAsInt32=&HCPublicSubSetText(ByVal目标文本框句柄AsIntPtr,ByValtextAsString)SendMessage(目标文本框句柄,WM_SETTEXT,0,text)EndSub
就这么样了
解决方案四:
引用2楼zj_zwl的回复:
<DllImport("user32.dll",SetLastError:=True,CharSet:=CharSet.Auto)>_PrivateFunctionSendMessage(ByValhWndAsIntPtr,ByValMsgAsUInteger,ByValwParamAsInt32,ByVallParamAsString)AsInt32EndFunctionPrivateConstWM_SETTEXTAsInt32=&HCPublicSubSetText(ByVal目标文本框句柄AsIntPtr,ByValtextAsString)SendMessage(目标文本框句柄,WM_SETTEXT,0,text)EndSub就这么样了
谢谢你的回复,这两天我也学习了一下相关API,现在能够对部分文本框的额内容进行更改和输入,但是通过SPY++工具查看发现,在子窗体下一些文本框的类名称和窗体名称都一样,无法区分,搜索了半天说是通过getwindowfrompoint函数来区分。但没有此函数的相关例子,能否指教一二。
解决方案五:
可以用它的位置来区别,用getwindowrect获取
解决方案六:
894526138,这两天有时间帮你解决
解决方案七:
在谷歌上找到一段Enumchildwindow的代码,源代码没有问题,但是我想添加一个自定义的数组,但是在赋值的时候有问题:PublicSharedFunctionGetChildWindows(ByValParentHandleAsIntPtr)AsIntPtr()DimChildrenListAsNewList(OfIntPtr)DimListHandleAsGCHandle=GCHandle.Alloc(ChildrenList)DimabAsIntPtr()TryEnumChildWindows(ParentHandle,AddressOfEnumWindowProc,GCHandle.ToIntPtr(ListHandle))FinallyIfListHandle.IsAllocatedThenListHandle.Free()EndTryReturnChildrenList.ToArrayab=GetChildWindowsEndFunction
以上代码中,参数ab是我添加的,可是在调用此函数过程中函数值无法给ab数组赋值,即ab始终为nothing,求教原因是什么
解决方案八:
引用1楼caozhy的回复:
api函数,findwindow/findchildwindow找到文本框句柄,发wm_settext消息即可。
PublicSharedFunctionGetChildWindows(ByValParentHandleAsIntPtr)AsIntPtr()DimChildrenListAsNewList(OfIntPtr)DimListHandleAsGCHandle=GCHandle.Alloc(ChildrenList)DimabAsIntPtr()TryEnumChildWindows(ParentHandle,AddressOfEnumWindowProc,GCHandle.ToIntPtr(ListHandle))FinallyIfListHandle.IsAllocatedThenListHandle.Free()EndTryReturnChildrenList.ToArrayab=GetChildWindowsEndFunction
以上代码中,参数ab是我添加的,可是在调用此函数过程中函数值无法给ab数组赋值,即ab始终为nothing,求教原因是什么
解决方案九:
这个问题好深奥,不懂
解决方案十:
ReturnChildrenList.ToArrayab=GetChildWindows我认为Return之后不能再赋值了