我正在制作一个程序,可以将鼠标点击,键盘输入和字符串发送到游戏窗口(即使窗口不活动)。
我使用SendMessage
发送鼠标点击和键盘输入,效果很好。
但是当我尝试将字符串发送到窗口时,我发现它不能同时发送整个字符串(每次只发送一个字符串)。
这是我正在使用的代码:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern uint SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
public static void sendString(IntPtr hWnd, string s)
{
foreach (char c in s)
{
SendMessage(hWnd, (int)WM_CHAR, (int)c, 0);
}
}
private void button1_Click(object sender, EventArgs e)
{
sendString(handle, "中文 string");
}
它的工作原理如下:
中
中文
中文
中文 s
中文 st
......等等
但我期望的是同时发送“中文字符串”。
我试过了:
SendMessage(handle, WM_SETTEXT, 0, "中文 string");
但它改变了窗口标题(游戏是DirectX应用程序,文本框没有自己的句柄)。
并尝试过:
SendKeys.Send("中文 string");
或Douglas's answer,但这些仅在窗口处于活动状态时有效。
我用Google搜索了很多答案,仍然找不到最好的方法,而且我不想使用copy&糊。
那么,如果有办法将整个字符串同时发送到使用C#处于非活动状态的窗口?
(我看到有人通过使用EYuYan(易語言)制作了一个程序,他的工具可以达到我想要的效果,所以我认为必须有一个C#的解决方案。