• C#调用Windows系统自带虚拟键盘的方法


    C#调用Windows系统自带虚拟键盘,可以通过以下方法。

    1、添加外部引用

    1. private const Int32 WM_SYSCOMMAND = 274;
    2. private const UInt32 SC_CLOSE = 61536;
    3. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    4. private static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    5. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    6. private static extern bool PostMessage(IntPtr hWnd, int Msg, uint wParam, uint lParam);
    7. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    8. private static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
    9. [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    10. private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    11. [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    12. private static extern int RegisterWindowMessage(string lpString);

    打开虚拟键盘方法:

    1. public void ShowKey()
    2. {
    3. var commonFilesPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles);
    4. //程序集目标平台为X86时,获取到的是x86Program Files,但TabTip.exe始终在Program Files目录下
    5. if (commonFilesPath.Contains("Program Files (x86)"))
    6. {
    7. commonFilesPath = commonFilesPath.Replace("Program Files (x86)", "Program Files");
    8. }
    9. var tabTipPath = Path.Combine(commonFilesPath, @"microsoft shared\ink\TabTip.exe");
    10. //var tabTipPath = "C:\\Program Files\\Common Files\\microsoft shared\\ink\\TabTip.exe";
    11. if (File.Exists(tabTipPath))
    12. {
    13. ProcessStartInfo psi = new ProcessStartInfo
    14. {
    15. FileName = tabTipPath,
    16. UseShellExecute = true,
    17. CreateNoWindow = true
    18. };
    19. Process.Start(psi);
    20. //Process.Start(@"C:\windows\system32\osk.exe");
    21. UnityEngine.Debug.Log("OK");
    22. }
    23. }

    关闭键盘方法:

    1. public void HideKey()
    2. {
    3. IntPtr TouchhWnd = new IntPtr(0);
    4. TouchhWnd = FindWindow("IPTip_Main_Window", null);
    5. if (TouchhWnd == IntPtr.Zero)
    6. return;
    7. PostMessage(TouchhWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
    8. }

    经测试使用该方法调用win8/10系统都没问题。

    实现效果:

    Unity通过调用win自带虚拟键盘签名

  • 相关阅读:
    Unreal Engine游戏引擎的优势
    【window下配置Maxim SDK环境】
    如何使用yum 安装php7.2
    CentOS 7安装MySQL及初始化操作教程
    「未来已来」三大办公领域巨头(Google、Microsoft、金山),开启AI办公新纪元
    高效访问数据的关键:解析MySQL主键自增长的运作机制!
    C++STL---->vector
    Java多线程面试题(面试必备)
    Cesium:相机参数监听&缩放控制
    不露脸的自媒体怎么做?自媒体号素材怎么找?
  • 原文地址:https://blog.csdn.net/mr_five55/article/details/134493999