【问题标题】:Is there a way for c# to dock onscreen keyboard of windows 10?c#有没有办法停靠Windows 10的屏幕键盘?
【发布时间】:2019-05-31 07:55:08
【问题描述】:

您可以使用 C# 代码打开 Windows 10 屏幕键盘:

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

C# 中有没有办法在打开时将此键盘停靠在屏幕底部?
我需要创建与屏幕键盘本身的“停靠”按钮相同的效果。

【问题讨论】:

  • 你可以试试这个codeproject.com/Articles/9123/…
  • 请参阅:blogs.msdn.microsoft.com/toub/2006/05/03/…。可能对你有帮助。
  • 在 Windows 8+ 中有两个屏幕键盘,osk.exe 是 Windows 2000/XP 中的旧键盘。
  • Win10 使用一种非常不同的方式来显示 OSK,因此旧的 hack 不再适用。这不是一个实际问题,用户只需单击“Mv Dn”一次就可以了,它会记住上次显示的位置。

标签: c# windows on-screen-keyboard


【解决方案1】:

osk.exe 支持未记录的命令行参数/dockbottom。但是,运行osk.exe /dockbottom 只是将键盘放在屏幕底部,它与停靠并不完全相同。我不知道这个参数可以追溯到多远,但我确认它在 Windows 8 和 10 中有效。

我认为没有办法以编程方式实际停靠(app bardocking)。假装点击 UI 按钮可能会起作用,但您必须使用 UI 自动化,因为它不是真正的按钮,整个窗口都是 DirectUIHWND 窗口。

作为 hack,您可以在 osk.exe 未运行时在 HKEY_CURRENT_USER\Software\Microsoft\OskHKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Accessibility\ATConfig\osk 下将名为 Dock 的 REG_DWORD 设置为 1(这是一个易失性密钥,因此您必须将其打开)。当您再次启动它时,它将读取停靠设置并开始停靠。

注意:如果屏幕分辨率设置得太低,则此停靠模式不可用。

Windows 8 及更高版本还有一个不同的屏幕键盘,称为触摸键盘。你可以用IFrameworkInputPane控制这个键盘。

【讨论】:

  • 注册表变通办法似乎有效,但问题是当用户单击(突出显示的)停靠按钮时,它也会更改注册表值,因此下次它会再次开始取消停靠。除了每次我需要显示屏幕键盘时修改注册表值之外还有什么技巧吗?因为为此,应用程序必须运行提升权限?
  • @aros 你不必被提升到 HKCU 写信。
  • 哦,真的吗?有趣的。那会试试的。感谢您的信息。
  • 很晚了,但是是的,我可以确认我能够在没有提升的情况下写信给 HKCU。
猜你喜欢
  • 2011-06-24
  • 2012-09-03
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 2012-12-13
相关资源
最近更新 更多