【问题标题】:Cannot get OSK to display无法让 OSK 显示
【发布时间】:2023-03-20 10:36:01
【问题描述】:

我正在尝试编写一个桌面应用程序,如果我单击某些按钮,OSK 就会出现。我尝试使用以下代码调用它:

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

但是每次都会出现如下错误:

“无法启动屏幕键盘”

为什么会这样?

更新:

如果我将调试模式从任何 CPU 更改为 64x,问题就解决了。但是我希望在平板模式下选择文本时自动显示 OSK,还有为什么有什么方法可以让平板模式 OSK 显示出来?

【问题讨论】:

  • 您希望 OSK 出现在哪些“特定按钮”上?通常,当聚焦<TextBox />(并且检测到触摸屏)时,OSK应该出现。您是自己定义“平板电脑模式”,还是您使用的设备实际上是平板电脑?你能告诉我们更多关于你的应用的范围和你想要实现的目标吗?

标签: c# wpf on-screen-keyboard


【解决方案1】:

这是我使用 System.Diagnostics.Process.Start("osk.exe") 开始 OSK 的经验。我只在 Windows 7 64 位和 Windows 10 64 位以及使用 Visual Studio 2015 上进行了测试。两个 Windows 版本的行为不同。

有三个相关的构建选项:

  1. 任何 CPU,首选 32 位检查(默认):

在 Windows 7 上使用 osk.exe 可以正常工作。

在 Windows 10 上,osk.exe、\Windows\System32\osk.exe 或 \windows\SysWOW64\osk.exe 都不起作用(可能是您的情况)。

  1. 任何 CPU,首选 32 位未选中:

在 Windows 7 上使用 osk.exe 可以正常工作。

在 Windows 10 上,只有 \Windows\System32\osk.exe 有效。

  1. x64:

在 Windows 10 上,osk.exe 和 \Windows\System32\osk.exe 工作。

平台目标(任何 CPU)和首选 32 位复选框位于项目属性的构建选项卡中。默认是选中 Prefer 32-bit (生成更小的可执行文件)。这意味着应用程序很可能在 64 位系统上以 32 位模式运行。在任务管理器中,您将在 Windows 7 上看到 *32,在 Windows 10 上看到(32 位)。

取消选中后,应用程序将在 64 位系统上以 64 位模式运行,调用 \Windows\System32\osk.exe 将找到所需的一切。我还没有调查为什么 Windows 10 中的行为发生了变化,但底线是使用未选中 Prefer 32 位的任何 CPU 并指定 OSK 的完整路径,即 \Windows\System32\osk.exe。

\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe 将启动 TabTip。

【讨论】:

    【解决方案2】:

    我发现了一个未记录的用于控制触摸键盘的 COM 接口。在此处查看代码https://stackoverflow.com/a/40921638/332528

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 2015-07-31
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多