C# 如何以编程方式操作Windows7屏幕键盘osk:移动、调整大小、删除标题栏/标题

C# 如何以编程方式操作Windows7屏幕键盘osk:移动、调整大小、删除标题栏/标题,c#,wpf,windows-7,keyboard,on-screen-keyboard,C#,Wpf,Windows 7,Keyboard,On Screen Keyboard,我正在开发一个WPF应用程序,希望以“始终存在”的方式显示内置的Windows7屏幕键盘。所以我想: 将其移动到特定位置 将其设置为一定的宽度和高度 删除标题栏/标题栏,以便用户无法将其移动或关闭 删除调整大小的功能(或任何其他用户调整) 我尝试了所有典型的API函数(MoveWindow、SetWindowPos、SetWindowLong等),但它拒绝做任何事情。代码当前可用于所有其他进程和应用程序(如internet explorer和命令提示符);这几乎就好像api调用不适用于osk,或

我正在开发一个WPF应用程序,希望以“始终存在”的方式显示内置的Windows7屏幕键盘。所以我想:

  • 将其移动到特定位置

  • 将其设置为一定的宽度和高度

  • 删除标题栏/标题栏,以便用户无法将其移动或关闭

  • 删除调整大小的功能(或任何其他用户调整)


  • 我尝试了所有典型的API函数(MoveWindow、SetWindowPos、SetWindowLong等),但它拒绝做任何事情。代码当前可用于所有其他进程和应用程序(如internet explorer和命令提示符);这几乎就好像api调用不适用于osk,或者它被“锁定”。我错过了什么?提前谢谢。

    我用Spy++检查了一下,屏幕上的键盘使用了一种叫做“DirectUIHWND”的东西。您可能希望了解DirectuihWndAPI

    一个可能有用的链接:


    此外,有些人警告说DirectUI是错误的。

    你说得对。Window不希望你们弄乱OSK,这是有充分理由的:当应用程序自定义或更改他们所依赖的应用程序时,人们不喜欢它,特别是在输入和可访问性方面。如果使用平板电脑的人在其他应用程序中需要它怎么办?如果你需要一个屏幕键盘,你最好开发自己的键盘,或者不要使用Windows。Osk.exe参与了Windows之间的“我应该永远在最上面”之战。它的一个副作用是弄乱窗户不起作用。啊,你可能是对的。听起来好像比我现在想惹的麻烦还多。对于其他好奇的人来说,WindowsOSK将位置和大小信息存储在注册表中。只需搜索“osk”。这并不能完全让我达到目的,但这只是一个开始。