SendKeys与c# PostMessage -下划线
本文关键字:下划线 PostMessage SendKeys | 更新日期: 2023-09-27 18:01:17
我试图用PostMessage发送一个下划线,但我能得到的最好的是-,这里有人能帮助我找不到答案。
我将一个字符串发送到一个字符循环,该循环获取每个字符串并使用PostMessage发送密钥,这几乎适用于所有内容,但我无法找出_。
public bool SendKeys(string message)
{
var success = false;
uint wparam = 0 << 29 | 0;
foreach (var child in GetChildWindows(Window.Windowhandle))
{
var sb = new StringBuilder(100);
GetClassName(child, sb, sb.Capacity);
//(IntPtr)Keys.H
if (sb.ToString() != Window.TargetWindow) continue;
foreach (var c in message)
{
var k = ConvertFromString(c.ToString());
if (String.Equals(c.ToString(), c.ToString().ToUpper(), StringComparison.Ordinal))
{
PostMessage(child, WM_CHAR, (IntPtr) k, (IntPtr) wparam);
}
else
{
PostMessage(child, WM_KEYDOWN, (IntPtr)k, (IntPtr)wparam);
}
success = true;
Thread.Sleep(200);
}
}
return success;
}
ConvertFromString只是(Keys)Enum。解析(typeof (Keys), keystr);实际上,从System.Form.Keys
中获取密钥谁能确定如何发送下划线??
ConvertFromString只是(Keys)Enum。解析(typeof (Keys), keystr);
这是基本缺陷,没有表示下划线的Keys枚举值。密钥是虚拟密钥,它们在世界上任何地方都是一样的。但是它们产生的字符是不一样的,这取决于用户选择的修饰键和活动键盘布局。
美国用户必须先按Shift键,然后按Keys.OemMinus。德国用户必须按Shift,然后按Keys.OemQuestion。法语用户只按"Keys.D8"键。西班牙用户按AltGr,然后按Keys.D7。等等。
如果你想要一个可预测的结果,你需要放弃对Keys的依赖。使用WM_CHAR并传递您想要的实际字符