SendKeys.Send是否支持AltGr修饰符?
我在写一个简单的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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。