【发布时间】:2011-03-13 23:24:20
【问题描述】:
如何让表单在不干扰其他程序的情况下向自身发送诸如 Tab、Enter、左箭头等键击?如果我使用 SendKeys.Send 方法,它会将其发送到打开的任何窗口。有没有办法只使用表格?
非常快速的随机示例:
假设我有 5 个文本框,我点击了 5 次“Tab”按钮。会发生什么?
它会将焦点从一个文本框更改为另一个文本框,对吗?
- 我可以让它自动发生吗...就像让它在后台发生并且只发生在表单本身。因此,如果我在记事本上输入内容,我不想收到这 5 个标签。
顺便说一句,我知道我可以使用此代码来更改 fofucs,但请记住它只是一个示例。
TextBox1.Focus
我真的希望有人能把我带到正确的地方,但我自己正在取得进展,但我正在寻求更多帮助。我需要的只是间接单击选项卡按钮(我在表单上没有活动)并且没有 sendkeys 方法。有可能吗?
这是我的尝试,我认为这是错误的
Private Declare Ansi Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Public Const WM_CHAR = &H102
Dim hwnd As Integer = FindWindow(vbNullString, "Form1")
Dim x As Integer = FindWindowEx(hwnd, 0, "WindowsForms10.EDIT.app.0.14fd2b5", vbNullString)
Dim keys As Keys
' send some keys
SendMessage(x, WM_CHAR, Keys.Tab, 0)
为什么会出错?
因为不是单击“选项卡”,而是将选项卡发送到文本框,所以我仍然专注于同一个文本框。它实际上并没有将焦点更改为下一个文本框。
如果可能的话,请帮助我,如果没有,我会自己尝试更多。
【问题讨论】:
-
您到底想做什么?解决问题的一半(“哈哈!我知道!我会伪造输入”)并为另一半寻求帮助(“我如何伪造输入?”)并不是一个好主意。如果您告诉我们您要解决的问题,您会得到更好的答案。
-
-
我还是不明白为什么 TextBox1.Focus 不行。为什么你认为你需要伪造输入到你的自己的应用程序?
-
@martinhofernandes 假设它现在不是我的应用程序......我还能做同样的事情吗?访问该文本框,单击选项卡,自动。
-
@martinho-fernandes 你还在吗?我是这个论坛的新手?大声笑