Directx 如何在桌面应用程序中启动Windows 8屏幕键盘

Directx 如何在桌面应用程序中启动Windows 8屏幕键盘,directx,touch,windows-8,multi-touch,Directx,Touch,Windows 8,Multi Touch,我有一个全屏DirectX桌面应用程序,希望在用户点击游戏中的文本框时显示屏幕键盘。是否有办法在全屏模式下执行此操作?如果是桌面应用程序,您可能需要为osk.exe调用ShellExecute 如果是Metro应用程序,则无法从应用程序本身调用SIP。根据: 这意味着应用程序无法以编程方式调用touch 键盘通过操纵焦点。过去这里的罪魁祸首 许多网页都在默认情况下设置了焦点 执行osk.exe将弹出更老式的屏幕键盘。 执行以下操作将弹出Windows 8触摸键盘 C:\Program Files

我有一个全屏DirectX桌面应用程序,希望在用户点击游戏中的文本框时显示屏幕键盘。是否有办法在全屏模式下执行此操作?

如果是桌面应用程序,您可能需要为
osk.exe
调用
ShellExecute

如果是Metro应用程序,则无法从应用程序本身调用SIP。根据:

这意味着应用程序无法以编程方式调用touch 键盘通过操纵焦点。过去这里的罪魁祸首 许多网页都在默认情况下设置了焦点


执行osk.exe将弹出更老式的屏幕键盘。 执行以下操作将弹出Windows 8触摸键盘

C:\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe
我刚刚发现了这一点,因为我正在开发一款全屏桌面应用程序,它在平板电脑上运行,没有键盘连接


Severin.

与Severin Stampler的答案相同,但为了从c#中找到正确的路径,我使用:


您可以非常轻松地显示Windows 8触摸键盘:


正在寻找更好的方法,但这似乎是唯一可行的合理方法。如何隐藏它?当您运行32位应用程序时,在64位系统上找不到TabTip.exe。GetFolderPath会给你提供“ProgramFiles(x86)”文件夹,其中的tabTip.exe名为“TabTip32.exe”,有没有办法隐藏键盘?
var path = Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles) + @"\Microsoft Shared\ink\TabTip.exe";

if (!File.Exists(path))
{
   // older windows versions
   path = Environment.GetFolderPath(Environment.SpecialFolder.System) + @"\osk.exe";
}