SendKeys.Send是否支持AltGr修饰符?

编程语言 2026-07-10

我在写一个简单的WinForms小程序,它从文本框中取文本,并使用SendKeys.Send方法逐字符地把文本打出来。问题在于表示Alt键的字符串输入中的修饰键是左Alt键,而不是AltGr键,因此我无法输入由AltGr与其他按键组合产生的字符。有没有办法强制使用右Alt键而不是左Alt?

private void startButton_Click(object sender, EventArgs e)
    {
    Thread.Sleep(3000);

    for (int i=0; i<toType.Text.Length; i++)
        {
        SendKeys.Send(charToKeystroke(toType.Text[i]));
        Thread.Sleep(150);
        }
    }

string characters = ".-,";

private string charToKeystroke(char c)
    {
    string stroke = "";

    if ((char.IsLetter(c) && !char.IsUpper(c)) || char.IsDigit(c) || characters.Contains(c))
        {
        return "" + c;
        }
        else if (char.IsLetter(c) && char.IsUpper(c))
        {
        return "+"+(c+"").ToLower();
        }
        else
        {
        switch (c)
            {
            case '(':
                return "+8";
            case ')':
                return "+9";
            case '{':
                return "%b";
            case '}':
                return "%n";
            case '[':
                return "%f";
            case ']':
                return "%g";
            case ';':
                return "%,";
            case '<':
                return "%í";
            case '>':
                return "%y";
            case '=':
                return "+7";
            case '!':
                return "+4";
            case '$':
                return "%é";
            case '\n':
                return "{ENTER}";
            case '\t':
                return "{TAB}";
            case '+':
                return "{PLUS}";
            case '-':
                return "{MINUS}";
            case '/':
                return "{DIVIDE}";
            case '*':
                return "{MULTIPLY}";
            case '&':
                return "%c";
            case '\'':
                return "+1";
            case '"':
                return "+2";
            case '|':
                return "%w";
            case ':':
                return "+.";
            case '#':
                return "%x";
            case '@':
                return "%v";
            case ' ':
                return "{SPACE}";
            }
        }

    return stroke;
    }

例如,基于上面的代码,当输入为 '{' 时,我本来应该看到一个左花括号被输入,但如果记事本处于焦点状态,实际会激活粗体字体样式。(匈牙利键盘布局)

解决方案

显然AltGr键相当于Ctrl+Alt,所以 ^% 能够工作。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章