Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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
C# 如何将键盘类型发送到记事本?_C#_Virtual Keyboard - Fatal编程技术网

C# 如何将键盘类型发送到记事本?

C# 如何将键盘类型发送到记事本?,c#,virtual-keyboard,C#,Virtual Keyboard,我在玩C#游戏,希望我的小控制台程序在我打开的记事本窗口中拼写我的名字。我有窗口句柄(IntPtr),但不知道从这里该做什么 我可以使用SendKey,但我希望它在记事本有焦点或没有焦点时都能工作,而且据我所知,Senkey仅在您有窗口聚焦的情况下工作:( 编辑: 我尝试了以下操作(尝试模拟按B): 什么也没发生:(而且它不会中断你是对的,只适用于聚焦窗口 您要做的是在文本框的句柄上进行p/Invoke和send操作(请注意,这不是主窗口句柄!)。要获得它,您需要在窗口层次结构中向下导航,直到使

我在玩C#游戏,希望我的小控制台程序在我打开的记事本窗口中拼写我的名字。我有窗口句柄(IntPtr),但不知道从这里该做什么

我可以使用SendKey,但我希望它在记事本有焦点或没有焦点时都能工作,而且据我所知,Senkey仅在您有窗口聚焦的情况下工作:(

编辑: 我尝试了以下操作(尝试模拟按B):

什么也没发生:(而且它不会中断

你是对的,只适用于聚焦窗口

您要做的是在文本框的句柄上进行p/Invoke和send操作(请注意,这不是主窗口句柄!)。要获得它,您需要在窗口层次结构中向下导航,直到使用


作为免费赠品,要获得文本框的句柄,只需在主记事本窗口句柄上使用
GW_CHILD
调用
GetWindow
,您就可以得到它,它实际上是第一个孩子。

如果您有记事本的窗口句柄,为什么不先将其作为前台窗口激活,然后发出您的
SendKey

这是将窗口设置为前台窗口的p/Invoke签名:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

编辑:类似问题的前一个答案:

你也可以看看这篇文章:它的VB,但应该会有帮助。不过请注意,这不会键入文本。它只适用于理解WM_SETTEXT的窗口。记事本窗口做什么……记事本窗口做什么。因为它是一个编辑控件。我相信RichText窗口它可以工作,所以写字板也可以。我只是想指出,它没有输入文本,所以它可能无法与其他文本输入字段一起工作。
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);