1

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

我可以使用 SendKey 但我希望它在记事本有焦点或没有焦点时工作,据我所知,Senkey 只有在你有窗口焦点时才工作:(

编辑: 我尝试了以下方法(试图模拟按 B):

PostMessage(NotepadWindowHandle, 0x100, 0x42, 0);
Thread.Sleep(1000);
PostMessage(NotepadWindowHandle, 0x101, 0x42, 0);

什么都没有发生:(而且它不会破坏

4

2 回答 2

2

你是对的,SendKey只适用于焦点窗口。

您要做的是 P/InvokeSendMessageWM_SETTEXT在文本框的句柄上发送(请注意,这不是主窗口句柄!)。要获得它,您可以向下导航窗口层次结构,直到使用GetWindow.

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

于 2012-05-08T16:50:51.197 回答
0

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

这是用于将窗口设置为前景窗口的 P/Invoke 签名:

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

编辑:类似问题的前答案:https ://stackoverflow.com/a/8953524/1149773

于 2012-05-08T17:37:10.557 回答