Vb.net 如何编程从记事本复制文本并将其粘贴到vb net应用程序中的特定文本框中?
我正在尝试制作一个程序,可以从记事本中复制字符串,并将其粘贴到我的windows窗体应用程序中的特定文本框中 例如,假设我有一个文本框,其中包含5个不同的字符串,每个字符串位于不同的行中。所以我的程序包含5个文本框 我想用一个单一的按钮从记事本第1行字符串到文本框1,从第2行字符串到文本框2等按下Vb.net 如何编程从记事本复制文本并将其粘贴到vb net应用程序中的特定文本框中?,vb.net,copy-paste,Vb.net,Copy Paste,我正在尝试制作一个程序,可以从记事本中复制字符串,并将其粘贴到我的windows窗体应用程序中的特定文本框中 例如,假设我有一个文本框,其中包含5个不同的字符串,每个字符串位于不同的行中。所以我的程序包含5个文本框 我想用一个单一的按钮从记事本第1行字符串到文本框1,从第2行字符串到文本框2等按下 Imports System.Threading Public Class Form1 Const MOUSEEVENTF_LEFTDOWN As UInteger = &H2
Imports System.Threading
Public Class Form1
Const MOUSEEVENTF_LEFTDOWN As UInteger = &H2
Const MOUSEEVENTF_LEFTUP As UInteger = &H4
Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles MyBase.MouseMove
'TextBox1.Text = e.Location.ToString()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
TextBox1.Text = MousePosition.ToString()
End Sub
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As UInteger, ByVal dx As UInteger, ByVal dy As UInteger, ByVal dwData As UInteger, ByVal dwExtraInfo As Integer)
Public Sub LeftClick()
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
Thread.Sleep(100) 'Wait required
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Windows.Forms.Cursor.Position = New Point(40, 78)
LeftClick()
LeftClick()
Thread.Sleep(200)
SendKeys.Send("^c")
Me.BringToFront()
TextBox2.Clear()
Thread.Sleep(200)
TextBox2.Paste()
'SendKeys.Send("^v")
Thread.Sleep(300)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Windows.Forms.Cursor.Position = New Point(41, 97)
LeftClick()
LeftClick()
Thread.Sleep(200)
SendKeys.Send("^c")
Thread.Sleep(200)
Me.BringToFront()
TextBox3.Clear()
Thread.Sleep(200)
TextBox3.Paste()
'SendKeys.Send("^v")
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Windows.Forms.Cursor.Position = New Point(32, 116)
LeftClick()
LeftClick()
Thread.Sleep(200)
SendKeys.Send("^c")
Thread.Sleep(200)
Me.BringToFront()
TextBox4.Clear()
Thread.Sleep(200)
TextBox4.Paste()
End Sub
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Windows.Forms.Cursor.Position = New Point(28, 133)
LeftClick()
LeftClick()
Thread.Sleep(200)
SendKeys.Send("^c")
Thread.Sleep(200)
Me.BringToFront()
TextBox5.Clear()
Thread.Sleep(200)
TextBox5.Paste()
End Sub
Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
Windows.Forms.Cursor.Position = New Point(23, 151)
LeftClick()
LeftClick()
Thread.Sleep(200)
SendKeys.Send("^c")
Thread.Sleep(200)
Me.BringToFront()
TextBox6.Clear()
Thread.Sleep(200)
TextBox6.Paste()
End Sub
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
Button1.PerformClick()
Thread.Sleep(5000)
Button2.PerformClick()
Thread.Sleep(5000)
Button3.PerformClick()
Thread.Sleep(5000)
Button4.PerformClick()
Thread.Sleep(5000)
Button5.PerformClick()
End Sub
Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
TextBox2.Clear()
TextBox3.Clear()
TextBox4.Clear()
TextBox5.Clear()
TextBox6.Clear()
End Sub
End Class
我试过类似的方法,但没用。如果我手动按下按钮,有时会执行此操作,但大多数按钮只会将第一个字符串复制粘贴到所有文本框。只要我一直使用VB(30年),SendKeys功能就出了名的不可靠。虽然这些年来情况有所好转,但仍然很随机。以下是来自当前版本()的部分警告: SendKeys类易受时间问题的影响,有些 开发人员不得不四处工作。更新的实现是 仍然容易受到时间问题的影响,但速度稍快,可能 需要更改解决方案。SendKeys类尝试使用 前一个实现首先执行,如果失败,则使用新的 实施因此,SendKeys类的行为可能会有所不同 在不同的操作系统上 具体地说,时间和焦点是问题,响应击键时应该发生的许多事情都需要活动应用程序的响应和处理,这可能会覆盖预期的行为,甚至需要很长时间才能决定不覆盖内置的windows行为。对于SendKeys的所有用途,我的第一条建议始终是:在没有SendKeys的情况下,尝试其他方法来实现这一点。在你可以考虑的评论中描述/链接了两种不同的方式。 如果您决定坚持使用SendKeys,那么如果这可能会有所帮助,我只能提出以下建议:
线程。Sleep
SendKeys.SendWait
注意,有迹象表明(3)和(4)可能无法一起工作。两种方法都可以试试。Quick search发现不需要所有这些,只需使用对象的UI Automation属性的方法即可。您不需要单击stuff或其他任何内容,只需读取属性值即可。我怀疑
Me.BringToFront()
正在将焦点从记事本更改为程序,以便以后的SendKeys
将以您自己的形式而不是记事本。我建议您1)首先在记事本中执行全选(^a),以便副本(^c)一次获取所有行,然后2)跳过Me.BringToFront()
和键盘粘贴(^v),而是3)将所有文本直接从粘贴缓冲区获取到VB字符串,然后4)使用Split()将其解析到字符串数组中
最后5)遍历数组并将每一行分配给每个文本框。Text
@Jimi,如何将其应用于记事本之类的外部应用程序?我读了链接页面,但它没有说什么。显然,任何摆脱SendKeys的方法都是一个好主意。实际上,我以记事本为例。事实上,我想从另一个程序的窗口获取数据(数字),而我没有其他访问权限。这些数字都在一个特定的位置,这就是我使用新的.point函数的原因。非常感谢。“sendwait”完成了任务!!!