如何在 C# 中打开平板电脑模式的屏幕键盘?

How to open the tablet-mode on-screen-keyboard in C#?

我想使用代码启动新的屏幕键盘 (OSK)。您可以在任务栏中找到这个:

(如果没有,您可以通过右键单击任务栏找到它)。

我已经尝试过常规的:

System.Diagnostics.Process.Start("osk.exe");

但我想启动另一个(不是 window 模式)。在这里你可以看到我想要哪个 OSK,哪个不想要:

如何启动该版本?以及如何在特定设置中启动它(如果可能)?

通过在命令行中启动进程

我相信你想在 Windows 10 开始以下过程,按照建议 here:

"C:\Program Files\Common Files\microsoft shared\ink\tabtip.exe"

根据@bernard-vander-beken 的建议,最好使用

Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles)

生成路径的 "C:\Program Files\Common Files\" 部分以适应不同的安装位置。

通过一个API

以前的命令行似乎以不一致的方式工作,特别是如果 tabtip.exe 进程已经 运行.

则它不会工作两次

我在 this thread 上找到了 @torvin 的这个片段,你可以用它以编程方式显示屏幕键盘 你已经启动 tabtip.exe 使用命令行解决方案,否则会失败并出现 COM 异常。

class Program
{
    static void Main(string[] args)
    {
        var uiHostNoLaunch = new UIHostNoLaunch();
        var tipInvocation = (ITipInvocation)uiHostNoLaunch;
        tipInvocation.Toggle(GetDesktopWindow());
        Marshal.ReleaseComObject(uiHostNoLaunch);
    }

    [ComImport, Guid("4ce576fa-83dc-4F88-951c-9d0782b4e376")]
    class UIHostNoLaunch
    {
    }

    [ComImport, Guid("37c994e7-432b-4834-a2f7-dce1f13b834b")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    interface ITipInvocation
    {
        void Toggle(IntPtr hwnd);
    }

    [DllImport("user32.dll", SetLastError = false)]
    static extern IntPtr GetDesktopWindow();
}