我在WinForms C#应用程序中有一个函数CMD
,可以使用按钮将字符串(从文本框)发送到活动窗口。
不幸的是,如果文本框包含多个零(0000x000F22000)
,则仅返回一个零:0x0F220
我怎样才能解决这个问题?
private void but_run_Click(object sender, EventArgs e)
{
uint wparam = 0 << 29 | 0;
int i = 0;
for (i = 0; i < textBox1.Text.Length; i++)
{
//PostMessage(child, WM_KEYDOWN, (IntPtr)Keys.Enter, (IntPtr)wparam);
PostMessage(cmdHwnd, WM_CHAR, (int)textBox1.Text[i], 0);
}
PostMessage(cmdHwnd, WM_KEYDOWN, (IntPtr)Keys.Enter, (IntPtr)wparam);
}
您可以尝试使用lParam指定重复按键。另外,要注意-PostMessage
有lParam
作为第四个参数(wParam
之前lParam
),你在你的代码混合起来。
接下来,不要使用(int)someChar
。您应该使用这些Encoding
类从chars获取字节值。
使用SendMessage代替PostMessage。PostMessage是异步的,可以为您带来很多麻烦。您不需要异步性,所以不要使用它。
接下来,为什么要使用WM_CHAR
?我想说WM_SETTEXT
这样更合适-您可以一次发送整个文本。请小心使用本地资源(例如字符串)。为了使此操作尽可能简单,可以使自己重载SendMessage方法:
const uint WM_SETTEXT = 0x000C;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, unit Msg,
IntPtr wParam, string lParam);
然后,您可以简单地调用:
SendMessage(cmdHwnd, WM_SETTEXT, IntPtr.Zero, textBox1.Text);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句