Janela (programa) ativa inesperadamente perde o foco no Windows 7

23

Algo está mudando (roubar) o foco da minha janela ativa (programa ativo) no meu Windows, como eu estou usando atualmente.

Eu tenho o mesmo problema descrito nesta pergunta , com algumas exceções:

  1. Observei esse comportamento em (pelo menos) dois computadores diferentes, portanto, isso não é específico de uma máquina.

  2. Um dos computadores mencionados possui o Windows 7 HE de 64 bits e outro o Windows 7 Pro de 32 bits. Portanto, esse problema não é específico para uma versão específica do Windows ou para uma plataforma de hardware específica.

  3. Às vezes, o foco é perdido para sempre (é necessário clicar na janela para continuar a usá-lo), às vezes é apenas mudado para outro processo em segundo plano (?) E retorna após cerca de 2-3 segundos.

  4. Não instalo nada de novo em nenhum desses computadores há poucas semanas (exceto no Windows Update e outras atualizações automáticas, como a atualização automática do navegador Chrome) e certamente os problemas mencionados começaram a acontecer muitos dias após a última instalação .

O comportamento atual do meu computador é realmente estranho e a coisa toda se torna irritante. Exemplos:

  1. Estou selecionando um texto no Chrome e, na verdade, a cor da seleção muda de azul (seleção em uma janela ativa) para cinza (seleção na janela inativa).

  2. Estou editando algum documento no Word, Notepad ++ ou um e-mail no Gmail no Chrome e o processo de edição para por alguns segundos (quando o foco muda), para ser encerrado permanentemente (foco perdido para sempre).

Tenho o Microsoft Security Essentials ativo, atualizado e funcionando e ele não informa nada de anormal.

Tive a sensação de que isso ocorre com mais frequência no Google Chrome. No começo, eu tinha tanta certeza que estava quase pronto para acusar algumas das últimas atualizações deste navegador. Porém, percebi isso com frequência incomum no Chrome, porque esse é o meu programa mais usado.

Alguém tem ou teve problemas semelhantes ou tem alguma idéia, o que pode estar causando isso ou como corrigir isso?

trejder
fonte
2
O problema também acontece no modo de segurança (com ou sem rede)? Clique em Iniciar msconfige selecione a guia Inicialização . Quais programas existem?
precisa saber é o seguinte
11
É muito difícil "capturar" o problema descrito, porque isso não acontece com muita frequência. Por exemplo - nenhum rastreio nos últimos dois dias. Então, eu teria que trabalhar dias no modo de segurança para tentar "capturar" isso. Mas, obrigado pela ideia. Além disso, veja minha resposta abaixo.
Trejder

Respostas:

17

Como and31415 me aconselhou, dei uma olhada cuidadosa no que está na minha Startupguia do msconfigprograma, mas não achei nada incomum.

Agora está claro que isso é 99% causado por algum programa externo (embora não tenha sido notado antes e embora eu não tenha instalado nada de novo recentemente), não pelo Windows. Este é o ponto mais importante para mim aqui.

Pesquisei um pouco mais no google e recebi algumas idéias / conselhos, a saber, que eu deveria tentar pressionar Alt+ F4imediatamente após perceber um roubo de foco. Isso deve encerrar o processo que pode causar esse foco furtivo. Então, posso tentar usar Process Monitorfrom Sysinternalspackage para rastrear o processo que acabou de sair.

Isso pode me dar uma idéia do que está causando esse problema.

trejder
fonte
11
Em msconfig, selecione a guia Serviços e ative Ocultar todos os serviços da Microsoft . Verifique isso também. Aqui está um artigo oficial da KB que pode ser útil: Execute uma inicialização limpa para determinar se os programas em segundo plano estão interferindo no seu jogo ou programa . Além disso, mesmo que você não veja nada incomum, acho que seria uma boa ideia listar todos os itens e serviços de inicialização de terceiros que você recebeu.
and31415
@trejder, você precisava fazer o download do arquivo technet.microsoft.com/en-us/sysinternals/bb896645 ou algo mais, ou está se referindo a um recurso interno do Windows que permite ver uma lista de processos que foram encerrados recentemente? Obrigado!
Ryan
@ Ryan Nope, como na resposta - Process Monitordo Sysinternalspacote.
Trejder
2
Ao usar Process Monitor, vá para o menu Filtro e adicione o seguinte filtro: A operação não é Process Exitentão Excluir. Meu driver do touchpad estava apresentando um erro e tentando relatá-lo com o Relatório de Problemas do Windows. Obrigado% #! @ Por esses sites de perguntas e respostas, caso contrário eu teria destruído meu laptop.
Daryl Van Sittert 2/11
Eu acabei de acontecer comigo. Acabou por ser C: \ Arquivos de Programas (x86) \ ViveSetup \ PCClient \ HTCVRMarketplaceUserContextHelper.exe - um programa para o HTC Vive. Eu apaguei o diretório inteiro. Eu suspeito que é um problema com a sua atualização no início desta semana
MickyD
12

Programei um programa em C # para monitorar processos flutuantes. Aqui está o código se alguém precisar descobrir qual processo está causando esse problema.

using System;
using System.Diagnostics;
using System.Linq;

namespace ProcessMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            var lastPros = Process.GetProcesses().Select((x) => x.Id).ToList();
            var oldProcessList = Process.GetProcesses();
            while (true)
            {
                var processlist = Process.GetProcesses();

                var currentPros = processlist.Select(x => x.Id).ToList();
                var diff = lastPros.Except(currentPros).ToList();
                Console.ForegroundColor = ConsoleColor.Red;

                var pro = oldProcessList.Where(x => diff.Contains(x.Id)).ToList();

                if (diff.Count == 0)
                {
                    pro = processlist.Where((x) => diff.Contains(x.Id)).ToList();
                    diff = currentPros.Except(lastPros).ToList();
                    Console.ForegroundColor = ConsoleColor.Green;
                    pro = processlist.Where((x) => diff.Contains(x.Id)).ToList();
                }
                foreach (var oldPid in diff)
                {
                    Console.Write("PID {0}", oldPid);
                    try
                    {
                        Console.WriteLine(" name {0}", pro.Where((x) => x.Id == oldPid).ToList()[0].ProcessName);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine($" Hit exception {e}");
                    }
                }
                if (diff.Count > 0)
                {
                    lastPros = currentPros;
                    oldProcessList = processlist;
                }
                System.Threading.Thread.Sleep(100);
            }
        }
    }
}

Amostra de saída mostrando o processo inicial (verde) e finalizado (vermelho)

Amostra de saída

Omar Alshaker
fonte
11
Boa ideia e bom código. Mas, como este é um site para usuários , não para desenvolvedores (esse é Superusuário, não Stack Overflow), adicione algumas explicações sobre como o desenvolvedor não C # é capaz de executar seu código?
Trejder
Criei uma versão melhorada disso e coloquei-a na minha própria resposta , incluindo as respostas às suas perguntas, @trejder.
Palec
provavelmente converter isso em PowerShell, que não precisa de um compilador C #?
Phuclv
@phuclv com certeza vá em frente: D
Omar Alshaker
7

O foco é provavelmente roubado por uma tarefa em segundo plano com erros. Ele abre uma janela que rouba o foco e é rapidamente fechada, mas o foco não retorna. Ultimamente, o Microsoft Office tinha esse bug .

Para descobrir esses processos, você pode usar ferramentas como o Window Focus Logger ( espelho ) ou um programa C # personalizado semelhante ao Process Monitor :

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace ProcessMonitor
{
    class Program
    {
        const int pollDelay = 100;

        static void Main(string[] args)
        {
            var lastProcesses = GetDescriptions();
            while (true)
            {
                System.Threading.Thread.Sleep(pollDelay);
                var now = DateTime.Now;
                var processes = GetDescriptions();

                var started = processes.Except(lastProcesses);
                var stopped = lastProcesses.Except(processes);

                foreach (var p in started)
                {
                    Print(now, p, ConsoleColor.Green);
                }
                foreach (var p in stopped)
                {
                    Print(now, p, ConsoleColor.Red);
                }

                lastProcesses = processes;
            }
        }

        static void Print(DateTime dateTime, ProcessDescription process,
            ConsoleColor color)
        {
            Console.ForegroundColor = color;
            Console.WriteLine("{0:hh\\:mm\\:ss\\.ff}\tPID {1}\t{2}",
                dateTime.TimeOfDay, process.Id, process.Description);
            Console.ResetColor();
        }

        static List<ProcessDescription> GetDescriptions()
        {
            return Process.GetProcesses().Select(x => GetDescription(x)).ToList();
        }

        static ProcessDescription GetDescription(Process p)
        {
            int pid = -1;
            string description;
            try
            {
                pid = p.Id;
                description = p.ProcessName;
            }
            catch (Exception e)
            {
                description = "Hit exception " + e;
            }
            return new ProcessDescription { Id = pid, Description = description };
        }

        struct ProcessDescription
        {
            public int Id;
            public string Description;

            public override bool Equals(object obj)
            {
                return obj != null && Id == ((ProcessDescription)obj).Id;
            }
            public override int GetHashCode()
            {
                return Id.GetHashCode();
            }
        }
    }
}

Versão polida e com correção de erros do código fornecido por Omar Alshaker . Também não requer C # 6. Requer .NET 3.5 ou mais recente.

Você pode compilá-lo usando o compilador C # ( csc.exe) que acompanha a instalação do .NET Framework e executar o executável resultante para obter um log em tempo real dos processos iniciados (verde) ou final (vermelho). Use Ctrl+ Cpara finalizá-lo.


Para encontrar o compilador, execute where /R %windir%\Microsoft.NET csc.exe. Escolha a versão mais recente do .NET instalada, independentemente de 32b ou 64b. Salve o código C # Program.cse compile-o para Program.exe:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Program.cs
Palec
fonte
Este código fornece o erro "Não foi possível encontrar o tipo ou espaço de nome 'Processo'". Então, eu precisava adicionar uma referência ao System.dll.
28418 Wilson
Estranho, @ Wilson. Qual versão do csc.exe você está usando?
Palec
11
A propósito, a linha de comando será csc.exe -reference:System.dll Program.csentão. Consulte a opção de referência do compilador C # .
Palec 29/03
Eu tenhoMicrosoft (R) Visual C# Compiler version 2.6.0.62329 (5429b35d)
Wilson
Essa versão parece ser de uma versão mais antiga do VS 2017 (ou de suas ferramentas de criação). Não consigo reproduzir o problema com o VS 2017 atual ( csc -version15.6.4 , 2.7.0.62715 (db02128e)). Ainda assim, obrigado por compartilhar o problema e sua solução.
Palec 29/03
4

No meu caso, foi o wermgr.exe (relatório de erros do Windows) iniciado de novo e de novo. Eu segui a solução abaixo para impedir que ela inicie automaticamente, e isso resolveu o problema.

  1. Botão Iniciar -> Na caixa de pesquisa, digite Centro de ação -> Enter.
  2. Clique na seta ao lado de Manutenção para expandir.
  3. Em Procurar soluções para os relatórios de problemas , clique em Configurações .
  4. Clique em Alterar configurações do relatório para todos os usuários .
  5. Verifique o botão de opção ao lado de Sempre que ocorrer um problema, pergunte-me antes de procurar uma solução .
  6. OK para sair, clicando em OK.
Pampam
fonte
3

A dica de usar Alt+F4para sair do programa de interrupção funcionou bem. Em vez de rastrear o programa acabado de sair com SysInternal's ProcessManager, rastreei o programa da seguinte maneira:

  1. Aberto Task manager
  2. Tire uma captura de tela dos processos abertos
  3. Alterne para o navegador, o correio etc. e "aguarde a perda de foco"
  4. Pressione Alt+F4para sair do programa de interrupção
  5. Acesse Task managere compare os processos abertos com a captura de tela
  6. O processo agora "ausente" causou o problema

No meu caso, foi twcu.exeum programa que começa com TP-Link Configuration tool. É usado por Sticks WIFI-USB externos. Conforme relatado aqui ( twcu.exe em file.net ) e aqui ( twcu.exe em computerbase.de [alemão] ), TP-Link Configuration toolnão é necessário para a conexão WIFI em si. Eu o removi do Autostart ( msconfig> system start), reiniciei o computador e ele ainda se conecta ao WIFI sem falhas - e os problemas de perda de foco desaparecem!

Tobias
fonte
2

Eu removi NMBgMonitor.exedos serviços de inicialização para resolver o problema.

Eu também tive o mesmo problema com a janela do Google Chrome, perdendo o foco por alguns segundos e depois retornando. Observando a guia de serviços do gerenciador de tarefas, notei que sempre que o foco era perdido, o NMBgMonitor estava ativo (isso tem algo a ver com o Nero).

funk79
fonte
2

no meu caso, e provavelmente em todos os casos de PC / laptop da lenovo, o problema ocorreu com o lenovo svcguihlpr.exe, que começa a funcionar a cada poucos minutos e se concentra sem a interface do usuário mostrada ... esse processo é o aplicativo Lenovo Access Connections que fornece uma interface agradável para gerenciar redes wifi e banda larga .. eu nunca usei, eu até o removi da barra de tarefas, mas ainda funciona ...

Hoje descobri que era o problema e o desinstalei!

muita diversão..

a propósito, eu achei isso fazendo a coisa mais idiota possível, pegando meu telefone, iniciando um vídeo gravando a tela onde eu corro o gerenciador de tarefas e continuo meu trabalho .. uma vez que o foco se perdeu, esperei um segundo, parei o registro e verificou quais processos avançaram, svcguihlpr ficou no topo por menos de um segundo.

espero que ajude os outros.

Oded Maimon
fonte
foi hilário dizer "muito divertido" sobre não ter um problema xD
Motassem MK 15/06/18
2

Eu tive esse problema, pensei que o tempo fosse aleatório, mas não era,

no meu caso, foi tão trivial quanto: mudanças no papel de parede!
Eu tinha uma apresentação de slides como papel de parede e toda vez que isso muda, o foco vai para a área de trabalho!

Espero que esse seja o caso de alguém que esteja lendo os comentários e que seja tão simples quanto isso.

(Não sei se a Microsoft alguma vez corrigirá isso, pois estou tendo o problema na versão mais recente do Windows 10 (1803 - 17134.112))

Motassem MK
fonte
1

Eu tinha janela perdendo o foco constantemente também. Leia que alguém que conseguiu rastrear o WerSvc está causando problemas usando um criador de logs. Mesmo que esse seja, de fato, um Serviço de Relatório de Erros do Windows, mas tentei desabilitá-lo no Windows Task Manager - Serviços - Serviços.

Então o problema de perda de foco parou.

Talvez vocês possam tentar.

Leon
fonte
1

Esse problema me deixou louco! Então, decidi escrever um programa para me dizer quem ou o que está tirando o foco do meu programa. Muito chato quando você está jogando Age of Empires e o jogo vai para a área de trabalho aleatoriamente.

Aqui estão os resultados ....

Verizon! Sim, eu tinha instalado algum aplicativo auxiliar da Verizon e foi o culpado!
Vá para - Painel de controle -> Programas e recursos
e desinstale qualquer coisa relacionada à Verizon.

Esqueço os nomes dos programas, geralmente iniciados com um Vz ..., e também há um serviço IW ... Sinceramente, esqueci, pois mal podia esperar para matar o que estava na minha máquina com eles (isso me deixou louco) ), mas quando você desinstala o aplicativo Verizon., o problema desaparece.

Neal
fonte
1

No meu caso, consertei o problema indo ao gerenciador de processos do Windows e verificando se algum programa está sendo iniciado e fechado constantemente. Percebi que um programa que baixei (acho que foi chamado de Windows 8 start) foi reiniciado a cada 7 segundos. Eu apaguei tudo relacionado a ele, e funcionou!

Ghais
fonte
1

Eu estava tendo o problema da janela ativa perdendo o foco a cada poucos segundos. Eu teria que clicar com o botão esquerdo para continuar digitando. Enlouquecedor.

Percebi que o esquema de cores das áreas ao redor das bordas das janelas mudava toda vez que acontecia. Parecia uma maneira fácil e fácil de ver a perda de foco sem digitar.

Então, iniciei o gerenciador de tarefas do Windows e cliquei na guia processos. Depois de assistir um pouco, pude ver que o gerenciador de desktop da Adobe estava saindo e na lista simultaneamente com a perda de foco na mudança de cor.

Fiz o download e reinstalei o aplicativo de desktop da Adobe Creative Cloud. (Nota: não foi possível desinstalá-lo, instalei o download diretamente sobre o existente. Existe um programa especial para desinstalar a Creative Cloud, se isso não funcionar.) Isso resolveu meu problema completamente.

Para aqueles com a Creative Cloud, esse pode ser o programa. Para quem não está, assistir à guia de processamento e à mudança de cor nas bordas das janelas com cada perda de foco pode ajudar a encontrar o culpado.

JBMenzies
fonte
1

Usei o gerenciador de tarefas para procurar processos em segundo plano, e o Synaptics Touchpad foi o culpado.

O 'driver' estava constantemente ativo, mas outro processo da Synaptics estava aparecendo a cada poucos segundos e causando a perda do foco.

Desinstalei o Synaptics e pronto, não perca mais o foco!

Cameron
fonte
1

No Regedit (mantenha pressionado o botão Iniciar + R e digite regedit), altere o valor HKEY_CURRENT_USER \ Painel de controle \ Desktop \ ForegroundLockTimeout de 0 a 30d40. Salve e reinicie o computador.

Heikki Sonninen
fonte
0

Procure um utilitário de backup como o Gladinet ou o Nuance Cloud Connector. (Ambos usam o mecanismo da Gladinet e esse tipo de problema já era conhecido em 2012.) Eles estão executando uma dll sem janelas / sem tarefas, com base no Explorer.exe.

tanitani
fonte
0

Meu Samsung Galaxy S6 estava em constante "Atualizando o Android" e, quando conectado via USB para carregar, perdi o problema de foco a cada 10 segundos, mas nenhuma janela do Explorer apareceu na frente. Mudei a porta USB e selecionei o modo "Usb Charging" no telefone, depois que o problema de foco desapareceu.

Mas o problema constante "Atualizando o Android" ainda está lá e precisa ser resolvido ainda.

TarmoPikaro
fonte
0

Eu tenho o mesmo problema. No meu caso, era um programa do Windows XP que era executado em uma conta de usuário padrão. Precisava de direitos elevados de administrador para executar. Portanto, embora ele tenha sido executado em segundo plano, eu não o vi, frequentemente roubava o foco da minha janela atual (windows explorer, firefox e outros programas). É muito chato. Eu usei o focus.exe pelo droid feliz para identificar o culpado. Além disso, você pode usar o Windows Focus Logger para a mesma finalidade.

Kamal
fonte
-1

O mesmo problema que encontrei. Meu laptop está meio velho. Possui 2 GB de RAM e Windows 7. Depois de uma hora de funcionamento, o mesmo acontece sempre. Notei que esse caso surge quando o laptop está superaquecendo. Solução: instale um software de limpeza automática de RAM. Já passou um mês após a instalação do limpador automático de RAM e eu nunca mais enfrentei o problema.

Rudra Sagar
fonte