我已经创建了一个WPF应用程序,它在Windows10-Pro v. 1607 ASUS TP 201平板电脑上作为自定义外壳运行。
经典的windows应用程序作为自定义shell不能在Windows10-Pro中定义。因此,我修改了注册表,以便为自定义用户分配一个自定义shell。
应用程序运行良好,除非在TextBoxes上触发触摸事件后,虚拟键盘不会弹出。在我的开发机器上进行测试时,它可以正常工作,并按预期提示键盘。即使是运行应用程序,而不是自定义的shell,作为一个应用程序后的windows,工作良好。只有当应用程序以自定义外壳的形式运行时,屏幕上的键盘才会失败。
我尝试过在Tocuh之后启动键盘可执行文件的方法:
private void launchKeyboard(object sender, RoutedEventArgs e)
{
Process.Start(@"C:\[Path]\osk.exe");
}此活动由下列人员发起:
<Textbox x:Name="textbox" GotFocus="launchKeyboard" ... />然而:
1)要启动osk.exe,需要从WinSxS组件存储库中读取可执行文件,因为osk.exe是一个运行在64位上的32位应用程序。请注意,WinSxS中的文件夹是用包含散列的长字符串命名的。因此,我不能为每个平板电脑指定启动路径,因为每个平板都有一个自定义名称。
2)要启动tabtip.exe,我需要启动具有管理员权限的进程,这样,应用程序就会提示一个需要管理键的对话框,这是无法完成的,因为平板电脑用户没有管理权限。
3)安装了许可的自定义键盘tabtipondemand (与2相同)需要管理键。
我想知道为什么要启动tabtip.exe,需要管理员级别。
Process.Verb = "runas";如果不使用admin启动,则虚拟键盘失败,只会出现空对话框。
所以我的问题是:
1)如何在一个运行自定义外壳的经典windows应用程序中,在没有管理员的情况下启动windows 10本机键盘tabtip.exe。
2)如何定义一个通用的或动态的路径来从启动WinSxS,而不是为每台机器定制每个路径。
3)当应用程序在windows上运行时,我可以在我的应用程序中编译任何库dll以启用tabtip.exe的本机行为吗?
让我澄清这一点:
1)我正在运行一个windows经典应用程序,作为自定义shell,而不是UWA。
2)应用程序应该作为自定义外壳运行的机器是Windows10-Prov 1607,触摸屏,华硕tp201。
3)自定义shell不运行于任何应用程序商店或kiosk模式。由于许可证的复杂性,一个经典的windows应用程序不能在Windows 10 pro上作为自定义shell运行。
4)定制shell是通过修改寄存器来配置的,该寄存器工作正常,没有任何问题。
5)目前还不可能将我们的本地WPF应用程序迁移到UWA。与UWA一起定制外壳上有som。
发布于 2017-12-13 01:12:47
嗯,我设法找到了一个完美的解决方案,解决了在windows桌面应用程序中显示虚拟键盘的问题,该应用程序在Windows 10上以自定义shell的形式运行。
考虑到通过作为自定义shell运行Windows 10本机虚拟键盘不显示,我使用了Alexei Sherbakov在Github上共享的一个名为osklib的方便的库。它也可以作为一个软件包在Nuget,准备在VS中使用。
添加Osklib作为对项目的引用,并使用属于System.Windows.Forms命名空间的任何形式的Gotfocus事件触发事件:
<TextBox ... Gotfocus="TriggerKeyboard" />然后创建调用Osklib类的TriggerKeyboard事件:
private void TriggerKeyboard(object sender, EventArgs e) {
try {
Osklib.OnScreenKeyboard.Show();
}
catch(Exception ex) {
MessageBox.Show(ex.Message);
}
}这一切都是快速的,容易的和失败的。多亏阿列克谢。
https://stackoverflow.com/questions/45227217
复制相似问题