Componentes de toque não funcionam nos dois primeiros minutos após o logon com o shell personalizado

0

Estou tendo o mesmo problema descrito em este post . Como essa questão ficou sem resposta por anos, imaginei que verificaria se alguém estava mais perto de resolver isso.

O problema é que, se executarmos o Windows com um shell personalizado, ou seja, sem explorer.exe em execução, os componentes de toque no Windows ( wisptis.exe ) não farão nada durante os dois primeiros minutos. Depois que o tempo passou, tudo funciona como deveria.

Portanto, parece que o explorer.exe está fazendo algo quando inicia, e recebe wisptis.exe para fazer as coisas.

Um exame no monitor de processo mostra que, após os dois minutos, wisptis.exe inicia um thread e lê várias configurações do registro. Não tenho certeza de como descobriria o que desencadeia isso.

Também notei que o serviço Shell Hardware Detection parece iniciar quando eu faço logon e parar após os dois minutos, exatamente quando o touch começa a funcionar. Então, talvez o Windows não saiba que o computador tem uma tela sensível ao toque até que Shell Hardware Detection tenha feito isso. Ainda não explica por que é tão rápido ao usar o shell normal do explorador.

Alguém tem alguma ideia do que está acontecendo aqui?

Atualização: desativar o serviço Shell Hardware Detection não faz diferença.

    
por Chris 02.03.2015 / 15:24

2 respostas

0

Tivemos o mesmo problema e resolvemos o problema. Por causa dos direitos autorais, não posso enviar nosso código para você.

Mas a solução é disparar o evento "ShellReady". Verifique este endereço para um exemplo de como implementá-lo.

Além disso, tivemos que definir esse valor de registro:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] 
"DelayedDesktopSwitchTimeout"=dword:00000000 
    
por 20.07.2015 / 10:40
0

Problema semelhante resolvido aqui .

Para corrigir o problema com meu aplicativo WPF / C #, adicionei:

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);        
    ...
}
    
por 20.04.2017 / 15:00