求教通过VB.NET对软件(无开放API)文本框的自动输入

lph742792666 2016-06-21 10:47:13
问题描述:工作中的计算软件因为没有相应的API开放,但是某一些计算算例却并不需要重新输入,而仅仅需要修改某几个输入框的值,所以想通过程序对之前算例的输入内容自动读取然后再自动填入相应的文本框内。
个人想法:通过程序来控制对软件菜单的单击操作(通过鼠标坐标),然后控制光标并依次定位于每一个文本框,读取原算例内容后,将相应的值自动填写进相应的框内,完成数据的快速输入。
期望解答的内容:是否可行?若可以,我应该学习哪些内容?,希望不吝赐教,谢谢!!


程序界面示意:
...全文
458 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhblxm 2016-06-27
  • 打赏
  • 举报
回复
Return ChildrenList.ToArray ab = GetChildWindows 我认为Return之后不能再赋值了
lph742792666 2016-06-26
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
api函数,findwindow / findchildwindow 找到文本框句柄,发 wm_settext 消息即可。
 Public Shared Function GetChildWindows(ByVal ParentHandle As IntPtr) As IntPtr()
        Dim ChildrenList As New List(Of IntPtr)
        Dim ListHandle As GCHandle = GCHandle.Alloc(ChildrenList)
        Dim ab As IntPtr()
        Try
            EnumChildWindows(ParentHandle, AddressOf EnumWindowProc, GCHandle.ToIntPtr(ListHandle))
        Finally
            If ListHandle.IsAllocated Then ListHandle.Free()
        End Try
        Return ChildrenList.ToArray
        ab = GetChildWindows

    End Function
以上代码中,参数ab是我添加的,可是在调用此函数过程中函数值无法给ab数组赋值,即ab始终为nothing,求教原因是什么
123工艺品 2016-06-26
  • 打赏
  • 举报
回复
这个问题好深奥,不懂
lph742792666 2016-06-25
  • 打赏
  • 举报
回复
在谷歌上找到一段Enumchildwindow的代码,源代码没有问题,但是我想添加一个自定义的数组,但是在赋值的时候有问题:
 Public Shared Function GetChildWindows(ByVal ParentHandle As IntPtr) As IntPtr()
        Dim ChildrenList As New List(Of IntPtr)
        Dim ListHandle As GCHandle = GCHandle.Alloc(ChildrenList)
        Dim ab As IntPtr()
        Try
            EnumChildWindows(ParentHandle, AddressOf EnumWindowProc, GCHandle.ToIntPtr(ListHandle))
        Finally
            If ListHandle.IsAllocated Then ListHandle.Free()
        End Try
        Return ChildrenList.ToArray
        ab = GetChildWindows

    End Function
以上代码中,参数ab是我添加的,可是在调用此函数过程中函数值无法给ab数组赋值,即ab始终为nothing,求教原因是什么
zj_zwl 2016-06-24
  • 打赏
  • 举报
回复
894526138,这两天有时间帮你解决
zj_zwl 2016-06-24
  • 打赏
  • 举报
回复
可以用它的位置来区别,用getwindowrect获取
lph742792666 2016-06-23
  • 打赏
  • 举报
回复
引用 2 楼 zj_zwl 的回复:


<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam  As Int32, ByVal lParam As String) As Int32
End Function

Private Const WM_SETTEXT As Int32 = &HC

Public Sub SetText(ByVal 目标文本框句柄 As IntPtr, ByVal text As String)
    SendMessage(目标文本框句柄, WM_SETTEXT, 0, text)
End Sub

就这么样了
谢谢你的回复,这两天我也学习了一下相关API,现在能够对部分文本框的额内容进行 更改和输入,但是通过SPY++工具查看发现,在子窗体下一些文本框的类名称和窗体名称都一样,无法区分,搜索了半天说是通过getwindowfrompoint函数来区分。但没有此函数的相关例子,能否指教一二。
zj_zwl 2016-06-22
  • 打赏
  • 举报
回复


<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam  As Int32, ByVal lParam As String) As Int32
End Function

Private Const WM_SETTEXT As Int32 = &HC

Public Sub SetText(ByVal 目标文本框句柄 As IntPtr, ByVal text As String)
    SendMessage(目标文本框句柄, WM_SETTEXT, 0, text)
End Sub

就这么样了
threenewbee 2016-06-21
  • 打赏
  • 举报
回复
api函数,findwindow / findchildwindow 找到文本框句柄,发 wm_settext 消息即可。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧