Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何只向窗体而不向其他窗口发送击键?_.net_Vb.net - Fatal编程技术网

.net 如何只向窗体而不向其他窗口发送击键?

.net 如何只向窗体而不向其他窗口发送击键?,.net,vb.net,.net,Vb.net,如何使窗体在不干扰其他程序的情况下向自身发送Tab、Enter、Left Arrow等按键?如果我使用SendKeys.Send方法,它会将它发送到打开的任何窗口。有没有办法只使用表单 非常快速的随机示例: 假设我有5个文本框,我点击了“Tab”按钮5次。会发生什么 它会将焦点从一个文本框切换到另一个文本框,对吗 我能让这一切自动发生吗。。。就像让它发生在背景中,只发生在形式本身。所以,如果我在记事本上键入内容,我不想收到这5个标签 顺便说一下,我知道我可以用这段代码来更改fofucs,但请

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

非常快速的随机示例:

假设我有5个文本框,我点击了“Tab”按钮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)
为什么不对?

因为它没有点击“tab”,而是将tab发送到文本框,所以我仍然关注同一个文本框。它实际上并没有将焦点切换到下一个文本框


如果可能的话,请帮助我,如果不行,我会自己尝试更多

因为这是在你自己的应用程序中,所以绝对没有理由伪造输入,这是一个众所周知的微妙领域

只需直接调用所需的方法

编辑

既然你似乎对伪造的输入很感兴趣,我就试着解释一下它有什么困难。首先,输入不是同步发送到windows,而是异步发送到拥有输入焦点的线程的消息队列。当该线程泵送其消息时,它将输入消息传递到适当的窗口


输入消息的主要复杂之处在于,系统保存着隐藏的键盘状态信息,您不能通过
PostMessage()
伪造这些信息。例如,请阅读的文档。如果您想伪造SHIFT+TAB键组合,则不能使用
PostMessage()
来实现,因为这不会使SHIFT处于键盘状态。这只能通过
SendInput()

完成,因为这是在你自己的应用程序中,绝对没有理由伪造输入,这是一个众所周知的微妙领域

只需直接调用所需的方法

编辑

既然你似乎对伪造的输入很感兴趣,我就试着解释一下它有什么困难。首先,输入不是同步发送到windows,而是异步发送到拥有输入焦点的线程的消息队列。当该线程泵送其消息时,它将输入消息传递到适当的窗口



输入消息的主要复杂之处在于,系统保存着隐藏的键盘状态信息,您不能通过
PostMessage()
伪造这些信息。例如,请阅读的文档。如果您想伪造SHIFT+TAB键组合,则不能使用
PostMessage()
来实现,因为这不会使SHIFT处于键盘状态。只能使用
SendInput()

来完成。您到底想做什么?解决一半的问题(“哈哈!我知道!我会伪造输入”)并寻求另一半的帮助(“我如何伪造输入?”)不是一个好主意。如果你告诉我们你想解决什么问题,你会得到更好的答案。@martinhofernandes告诉我们任何自动发生的事情,或者我猜是有相同的点击效果。我仍然不明白为什么TextBox1.Focus不起作用。为什么你认为你需要为自己的应用程序伪造输入?@martinhofernandes,假设现在不是我的应用程序。。。我还能做同样的事吗?访问该文本框,单击tab,自动。@martinho fernandes你还在吗?我是这个论坛的新手?你到底想干什么?解决一半的问题(“哈哈!我知道!我会伪造输入”)并寻求另一半的帮助(“我如何伪造输入?”)不是一个好主意。如果你告诉我们你想解决什么问题,你会得到更好的答案。@martinhofernandes告诉我们任何自动发生的事情,或者我猜是有相同的点击效果。我仍然不明白为什么TextBox1.Focus不起作用。为什么你认为你需要为自己的应用程序伪造输入?@martinhofernandes,假设现在不是我的应用程序。。。我还能做同样的事吗?访问该文本框,单击tab,自动。@martinho fernandes你还在吗?我是这个论坛的新手?LOL如果它不是在我自己的应用程序上,我应该怎么做?它是你的应用程序。所以输入伪造是错误的解决方案。谢谢,我所需要的只是正确的术语。我会做更多的谷歌搜索。。我想我现在正朝着正确的方向前进。“既然你是新来的问题,你可能想考虑接受这个答案。”如果您对答案感到满意,只需将答案顶部旁边的勾号变成绿色即可。还请阅读有关接受答案等常见问题解答。如果不是在我自己的应用程序上,我应该如何做?但这是你的应用程序。所以输入伪造是错误的解决方案。谢谢,我所需要的只是正确的术语。我会做更多的谷歌搜索。。我想我现在正朝着正确的方向前进。“既然你是新来的问题,你可能想考虑接受这个答案。”如果您对答案感到满意,只需将答案顶部旁边的勾号变成绿色即可。请阅读有关接受答案等常见问题解答。