2011-03-13 49 views
1

如何让表单在不干扰其他程序的情况下向其自身发送Tab,Enter,Left Arrow等按键?如果我使用SendKeys.Send方法,它会将它发送到任何打开的窗口。有没有办法只使用表单?如何仅将按键发送到窗体而不是其他窗口?

非常快随便举个例子:

比方说,我有5个textBoxs我点击“标签”按钮5倍。会发生什么 ?

它会将焦点从一个文本框更改为另一个右边?

  • 我可以自动发生这种情况......就像它发生在后台,只发生在窗体本身。所以,如果我在记事本上输入内容,我不想收到这5个选项卡。

顺便说一下,我知道我可以使用这段代码来改变fofucs,但记住它只是一个例子。

TextBox1.Focus 

我真的很希望有人来告诉我怎么去正确的地方,但是我对我自己制作的进步,但是我正在寻找更多的帮助。我所需要的只是间接地点击Tab按钮(没有我在窗体上处于活动状态),而没有使用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) 

为什么是错误的?

因为不是点击'标签'它将标签发送到文本框,所以我仍然关注同一个文本框。它并没有将焦点转移到下一个文本框。

请如果它可能帮助我,如果不是,我会尝试更多我自己的。

+0

究竟你在做什么?解决一半问题并不是一个好主意(“哈哈!我知道!我会伪造输入”)并请求另一半的帮助(“我该如何伪造输入?”)。如果您告诉我们您要解决什么问题,您会得到更好的答案。 – 2011-03-13 23:29:50

+0

@martinhofernandes无论发生什么事情都会自动发生,或者与我猜测的点击效果相同。 – Questions 2011-03-14 02:43:23

+0

我仍然不明白为什么TextBox1.Focus不会这样做。你为什么认为你需要伪装自己的应用程序? – 2011-03-14 02:43:40

回答

4

由于这是你自己的应用程序内,绝对没有理由假输入,一个臭名昭着的敏感领域。

只需直接调用所需的方法即可。

编辑

因为你似乎对伪造输入非常热衷,我会尽量解释什么是难了。首先输入的不是与窗口同步发送,而是它发布了异步到拥有输入焦点的线程的消息队列。当该线程抽取消息时,它将输入消息传递到适当的窗口。

输入消息的主要难题是系统保存着隐藏的键盘状态信息,通过PostMessage()无法伪装。例如,请阅读GetKeyboardState()的文档。如果你想伪造一个SHIFT + TAB组合键,那么你不能用PostMessage()来完成它,因为这不会使SHIFT处于键盘状态。它只能用SendInput()完成。

+0

如果它不在我自己的应用程序,我应该怎么做? – Questions 2011-03-14 02:56:44

+0

这是你的应用程序。所以输入伪造是错误的解决方案。 – 2011-03-14 07:32:19

+0

谢谢,我所需要的只是正确的条款。我会做更多谷歌搜索。我认为我现在正朝着正确的方向前进。 – Questions 2011-03-14 22:55:56

相关问题