使用自定义 shell 登录后的前两分钟内,触摸组件不起作用

使用自定义 shell 登录后的前两分钟内,触摸组件不起作用

我遇到了与这个帖子。由于这个问题多年来一直没有得到解答,我想看看是否有人已经接近解决这个问题。

问题是,如果我们使用自定义 shell 运行 Windows,即不explorer.exe运行,Windows 中的触摸组件 ( wisptis.exe) 在前两分钟似乎不会执行任何操作。在那段时间过去后,一切都正常。

因此看起来 explorer.exe 在启动时正在执行一些操作wisptis.exe

查看进程监视器显示两分钟后,wisptis.exe启动一个线程并从注册表中读取一堆设置。但我不确定如何找出触发此操作的原因。

我还注意到,该Shell Hardware Detection服务似乎在我登录时启动,并在两分钟后停止,恰好是触摸开始工作时。所以也许 Windows 直到Shell Hardware Detection完成操作后才知道计算机有触摸屏。仍然无法解释为什么使用普通的资源管理器外壳时速度如此之快。

有人知道这里发生了什么事吗?

更新:禁用该Shell Hardware Detection服务没有什么区别。

答案1

我们遇到了同样的问题并解决了。由于版权问题,我无法向您发送我们的代码。

但解决方案是触发事件“ShellReady”。查看此地址以获取如何实现的示例。

此外,我们还必须设置此注册表值:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] 
"DelayedDesktopSwitchTimeout"=dword:00000000 

答案2

类似问题已解决这里

为了解决我的 WPF/C# 应用程序的问题,我添加了:

using System;
using System.Runtime.InteropServices;
...
[DllImport("kernel32.dll")]
static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
[DllImport("kernel32.dll")]
static extern bool SetEvent(IntPtr hEevent);
...
YourStartupFunction()
{
    ...
    IntPtr hEvent = default(IntPtr);
    hEvent = CreateEvent(IntPtr.Zero, true, true, "ShellReadyEvent");
    SetEvent(hEvent);        
    ...
}

相关内容