c# - 在文本框中输入字符的击键?

标签 c# .net winapi char

我如何以编程方式知道是否需要在文本框中输入像 '@' 这样的字符并按住 Alt GrShift下来?

这是 Alt Gr 的列表:² ³ { [ ] }\@ € ~ | µ
以及更长的 Shift 列表:°!"§$%&/()=?*'>;:_、字母等

Char.IsUpper(...) 帮我写字母。但是剩下的我该如何解决呢?我希望能够正确地检查它们,如果可能的话,我想让系统为我做。

最后,我将通过 keybd_event 发送这些击键.
(我使用 WinForms。)

最佳答案

我想通了。 VkKeyScan是关键。
(VkKeyScanEx 用于键盘布局等)

部分测试代码:

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern short VkKeyScan(char ch);

static void Main(string[] args)
{
    char[] chars = "²³{[]}\\@€~|µ   °!`\"§$%&/()=?*'>;:_".ToCharArray();
    Console.WriteLine("char\talt\tcontrol\tshift" + Environment.NewLine + "-----------------------------");

    for (int i = 0; i < chars.Length; i++)
    {
        char ch = chars[i];
        short vksc = VkKeyScan(ch);

        bool alt = (vksc & 1024) == 1024;
        bool control = (vksc & 512) == 512;
        bool shift = (vksc & 256) == 256;

        Console.WriteLine(ch + "\t" + alt + "\t" + control + "\t" + shift);
    }

    Console.ReadKey();
}

关于c# - 在文本框中输入字符的击键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24527909/

相关文章:

c# - 如何为使用流作为参数的方法编写 unitTest

c# - 使用 TextFieldParser 处理包含未转义双引号的字段

.net - Environment.TickCount 永远不会在我的机器上重置,为什么?

c# - c# 中的 GetEnumerator() 是否返回副本或迭代原始源?

c++ - 使用 WINRM 在远程主机上推送二进制文件

c++ - Mini Filter 驱动程序与 Windows 服务的通信

ruby - 尝试用 Ruby 显示气球通知

c# - 无法删除集合 : [NHibernate. Exceptions.GenericADOException]

c# - 空白 DVD/蓝光光盘 (IMAPI) 上的可用空间

c# - 单元测试 .NET Core Web 应用程序的正确方法是什么?