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

中获取密钥

谁能确定如何发送下划线??

SendKeys与c# PostMessage -下划线

ConvertFromString只是(Keys)Enum。解析(typeof (Keys), keystr);

这是基本缺陷,没有表示下划线的Keys枚举值。密钥是虚拟密钥,它们在世界上任何地方都是一样的。但是它们产生的字符是不一样的,这取决于用户选择的修饰键和活动键盘布局。

美国用户必须先按Shift键,然后按Keys.OemMinus。德国用户必须按Shift,然后按Keys.OemQuestion。法语用户只按"Keys.D8"键。西班牙用户按AltGr,然后按Keys.D7。等等。

如果你想要一个可预测的结果,你需要放弃对Keys的依赖。使用WM_CHAR并传递您想要的实际字符