Активное окно (программа) неожиданно теряет фокус в Windows 7

23

Что-то смещает (крадет) фокус из моего активного окна (активной программы) в моей Windows, как я сейчас использую.

У меня та же проблема, которая описана в этом вопросе , за некоторыми исключениями:

  1. Я наблюдал это поведение (по крайней мере) на двух разных компьютерах, так что это не зависит от конкретной машины.

  2. На одном из упомянутых компьютеров установлена ​​Windows 7 HE 64-bit, на другом - Windows 7 Pro 32-bit, поэтому эта проблема не относится к конкретной версии Windows или конкретной аппаратной платформе.

  3. Иногда фокус теряется навсегда (приходится нажимать на окно, чтобы продолжить его использовать), иногда он просто переносится на какой-то другой фоновый процесс (?) И возвращается через 2-3 секунды.

  4. Я не устанавливал ничего нового ни на один из этих компьютеров в течение последних нескольких недель (за исключением Центра обновления Windows и других автоматических обновлений, таких как автообновление браузера Chrome), и, конечно же, упомянутые проблемы начали возникать через много дней после последней установки .

Текущее поведение моего компьютера действительно странно, и все это становится раздражающим. Примеры:

  1. Я выделяю некоторый текст в Chrome и на самом деле вижу, что цвет выделения изменяется с синего (выделение в активных окнах) на серый (выделение в неактивном окне).

  2. Я редактирую какой-то документ в Word, Notepad ++ или по электронной почте в Gmail в Chrome, и процесс редактирования либо останавливается на несколько секунд (когда смещается фокус), потому что он окончательно завершен (фокус потерян навсегда).

У меня есть активный, обновленный и работающий Microsoft Security Essentials, и он не сообщает ничего необычного.

У меня было ощущение, что это чаще всего происходит в Google Chrome. Сначала я был настолько уверен, что был почти готов обвинить некоторые из последних обновлений этого браузера. Но оказалось, что я заметил это необычно часто в Chrome, потому что это моя наиболее часто используемая программа.

У кого-нибудь есть или были подобные проблемы, или есть идеи, что может быть причиной этого или как это исправить?

trejder
источник
2
Проблема также возникает в безопасном режиме (с сетью или без нее)? Запустите msconfigи выберите вкладку « Автозагрузка ». Какие программы есть?
and31415
1
Очень трудно «поймать» описанную проблему, потому что это происходит не слишком часто. Например - никаких следов за последние два дня. Поэтому мне пришлось бы работать в безопасном режиме несколько дней, чтобы попытаться «поймать» это. Но спасибо за идею. Также см. Мой ответ ниже.
Трейдер

Ответы:

17

Как and31415 посоветовал мне, я внимательно посмотрел на то, что находится в моей Startupвкладке msconfigпрограммы, но не нашел ничего необычного.

Теперь ясно, что это на 99% вызвано какой-то внешней программой (хотя раньше этого не замечали и хотя недавно я не устанавливал ничего нового), а не Windows. Это самый важный момент для меня здесь.

Я немного погуглил и получил несколько идей / советов, а именно, что я должен попытаться нажать Alt+ F4сразу после того, как я замечу кражу фокуса. Это должно завершить процесс, который может вызвать скрытую фокусировку. Тогда я могу попытаться использовать Process Monitorиз Sysinternalsпакета , чтобы проследить процесс , который только что вышел.

Это может дать мне некоторое представление о том, что вызывает эту проблему.

trejder
источник
1
Из msconfigвыберите Services вкладку и включите Скрыть все службы Microsoft . Проверьте это тоже. Вот официальная статья базы знаний, которая может быть полезна: выполните чистый запуск, чтобы определить, не мешают ли фоновые программы вашей игре или программе . Кроме того, даже если вы не видите ничего необычного, я думаю, что было бы неплохо перечислить все сторонние элементы запуска и услуги, которые вы получили.
and31415
@trejder, вам нужно было скачать technet.microsoft.com/en-us/sysinternals/bb896645 или что-то еще, или вы имеете в виду встроенную функцию Windows, которая позволяет вам просматривать список процессов, которые недавно вышли из системы? Благодарность!
Райан
@ Райан Нет, как в ответе - Process Monitorиз Sysinternalsпакета.
Трейдер
2
При использовании Process Monitorперейдите в меню «Фильтр» и добавьте следующий фильтр: «Операция не будет Process Exitисключена». Мой драйвер тачпада выдавал ошибку и пытался сообщить об этом с помощью отчета о проблемах Windows. Спасибо% #! @ За эти вопросы и ответы, иначе я бы уничтожил свой ноутбук.
Дэрил Ван Ситтерт
Я только что это случилось со мной. Оказалось, что это C: \ Program Files (x86) \ ViveSetup \ PCClient \ HTCVRMarketplaceUserContextHelper.exe - программа для HTC Vive. Я удалил весь каталог. Я подозреваю, что это проблема с их обновлением ранее на этой неделе
MickyD
12

Я запрограммировал программу на C # для мониторинга колеблющихся процессов. Вот код, если кто-то должен выяснить, какой процесс вызывает эту проблему.

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);
            }
        }
    }
}

Выходной образец, показывающий процесс, начинающийся (зеленый) и заканчивающийся (красный)

Выходной образец

Омар Альшакер
источник
11
Хорошая идея и хороший кусок кода. Но, поскольку это сайт для пользователей , а не разработчиков (это Super User, а не переполнение стека), то вам следует добавить некоторые пояснения о том, как не-C # -разработчик может запускать ваш код?
Трейдер
Я создал улучшенную версию этого и поместил его в свой собственный ответ , включая ответы на ваши вопросы, @trejder.
Палек
вероятно, преобразовать это в PowerShell, который не нуждается в компиляторе C #?
phuclv
@phuclv, конечно, продолжай: D
Омар Альшакер
7

Фокус, вероятно, украден ошибочной фоновой задачей. Он открывает окно, которое крадет фокус, и очень быстро закрывается, но фокус не возвращается. В последнее время в Microsoft Office была такая ошибка .

Чтобы обнаружить такие процессы, вы можете использовать такие инструменты, как Window Focus Logger ( зеркало ) или пользовательскую программу на C #, похожую на 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();
            }
        }
    }
}

Полированная и исправленная версия кода, предоставленная Омаром Альшакером . Также не требуется C # 6. Требуется .NET 3.5 или новее.

Вы можете скомпилировать его с помощью компилятора C # ( csc.exe), поставляемого с вашей установкой .NET Framework, и запустить полученный исполняемый файл, чтобы получить журнал в реальном времени процессов, которые начинаются (зеленый) или заканчиваются (красный). Используйте Ctrl+, Cчтобы прекратить это.


Чтобы найти компилятор, запустите where /R %windir%\Microsoft.NET csc.exe. Выберите тот из последней установленной версии .NET, независимо от того, 32b или 64b. Сохраните код C # Program.csи скомпилируйте его в Program.exe:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Program.cs
Palec
источник
Этот код дает мне сообщение об ошибке «Не удалось найти тип или пространство имен« Процесс »». Поэтому мне нужно было добавить ссылку на System.dll.
Уилсон
Странно, @ Уилсон. Какую версию csc.exe вы используете?
Палек
1
Кстати, командная строка будет csc.exe -reference:System.dll Program.csтогда. Смотрите документацию по опциям компилятора C # -reference .
Palec
У меня естьMicrosoft (R) Visual C# Compiler version 2.6.0.62329 (5429b35d)
Уилсон
Эта версия, кажется, от старой сборки VS 2017 (или его инструментов сборки). Я не могу воспроизвести проблему с текущим VS 2017 (15.6.4, csc -version2.7.0.62715 (db02128e)). Тем не менее, спасибо, что поделились проблемой и ее решением.
Palec
4

В моем случае это было то, что wermgr.exe (отчеты об ошибках Windows) запускался снова и снова. Я следовал приведенному ниже решению, чтобы остановить его автоматический запуск, и это решило проблему.

  1. Кнопка « Пуск» -> В поле поиска введите « Центр действий» -> Enter.
  2. Нажмите на стрелку рядом с « Обслуживание», чтобы развернуть.
  3. В разделе « Поиск решений для отчетов о проблемах» нажмите « Настройки» .
  4. Нажмите на Изменить параметры отчета для всех пользователей .
  5. Установите переключатель рядом с Каждый раз, когда возникает проблема, спрашивайте меня, прежде чем проверять решение .
  6. ОК выход, нажав ОК.
Pampam
источник
3

Подсказка с использованием Alt+F4для выхода из программы прерывания работала хорошо. Вместо того, чтобы отследить только что завершившуюся программу с помощью SysInternals ProcessManager, я отследил программу следующим образом:

  1. открыто Task manager
  2. Сделайте скриншот открытых процессов
  3. Переключитесь на Браузер, Почту и т. Д. И «дождитесь потери фокуса»
  4. Нажмите Alt+F4для выхода из программы прерывания
  5. Перейти Task managerи сравнить открытые процессы со скриншотом
  6. Теперь «отсутствующий» процесс вызвал проблему

В моем случае это была twcu.exeпрограмма, которая начинается с TP-Link Configuration tool. Используется внешними WIFI-USB флешками. Как сообщается здесь ( twcu.exe на file.net ) и здесь ( twcu.exe на computerbase.de [немецкий] ), TP-Link Configuration toolон не нужен для самого подключения WIFI. Я удалил его из автозапуска ( msconfig> system start), перезагрузил компьютер, и он все еще подключается к WIFI без ошибок - и проблемы с потерей фокуса исчезли!

Тобиас
источник
2

Я удалил NMBgMonitor.exeиз службы запуска, чтобы решить эту проблему.

У меня также была та же проблема с окном Google Chrome, которое теряло фокус на несколько секунд, а затем возвращалось. Наблюдая за вкладкой служб диспетчера задач, я заметил, что всякий раз, когда фокус теряется, NMBgMonitor был активен (это как-то связано с Nero).

funk79
источник
2

в моем случае, и, вероятно, во всех случаях, связанных с ПК / ноутбуком lenovo, проблема была в lenovo svcguihlpr.exe, который начинает работать каждые несколько минут и фокусируется без отображения интерфейса ... этот процесс представляет собой приложение Lenovo Access Connections, которое предоставляет приятный пользовательский интерфейс для управления Wi-Fi и широкополосные сети .. я никогда не использовал его, я даже удалил его из панели задач, но он все еще работает ...

сегодня я обнаружил, что это проблема, и удалил ее!

так весело..

кстати, я нашел это, выполнив самую идиотскую вещь, какую только возможно, взяв свой телефон, запустив видеозапись на экране, где я запускаю диспетчер задач, и продолжаю свою работу ... как только потерял фокус, я подождал секунду, остановил запись и проверил, какие процессы пошли вверх, svcguihlpr был на вершине меньше секунды.

надеюсь, это поможет другим.

Одед Маймон
источник
было весело сказать «так весело» о том, что у вас нет проблем xD
Motassem MK
2

У меня была эта проблема, я думал, что время было случайным, но это не было,

в моем случае это было так же тривиально, как: смена обоев!
У меня было слайд-шоу в качестве обоев, и каждый раз, когда оно меняется, фокус переходит на рабочий стол!

Я надеюсь, что это может иметь место для кого-то, кто читает комментарии, и это будет так же просто, как это.

(Я не знаю, исправит ли когда-нибудь Microsoft это, так как у меня проблема с последней сборкой Windows 10 (1803 - 17134.112))

Мотассем МК
источник
1

Я тоже постоянно терял фокус. Читайте, что кому-то удалось отследить, что WerSvc вызывает проблему с помощью регистратора. Даже если это на самом деле служба отчетов об ошибках Windows, но я попытался отключить ее в диспетчере задач Windows - Службы - Службы.

Тогда проблема потери фокуса прекратилась.

Может быть, вы, ребята, можете попробовать это.

Леон
источник
1

Эта проблема сводила меня с ума! Поэтому я решил написать программу, чтобы сказать мне, кто или что отвлекает внимание от моей программы. Очень раздражает, когда вы играете в Age of Empires и игра случайно попадает на рабочий стол.

Вот выводы ....

Verizon! Да, я установил какое-то вспомогательное приложение Verizon, и оно было виновником!
Зайдите в - Панель управления -> Программы и компоненты
и удалите все, что связано с Verizon.

Я забываю названия программ, обычно начинающихся с Vz ... и тоже есть служба IW ... Честно говоря, я забыл, потому что не мог дождаться, чтобы убить из них все, что было на моей машине (это сводило меня с ума ), но при удалении приложения Verizon проблема исчезает.

Нил
источник
1

В моем случае я исправил проблему, перейдя в диспетчер процессов Windows и проверив, запускаются ли и постоянно ли закрываются какие-либо программы. Я мог заметить, что загруженная мною программа (кажется, она называлась Windows 8 Start) перезапускалась каждые 7 секунд. Я удалил все, что с этим связано, и это сработало!

Ghais
источник
1

У меня была проблема, когда активное окно теряло фокус каждые несколько секунд. Я должен был бы щелкнуть левой кнопкой мыши, чтобы продолжить печатать. Maddening.

Я заметил, что цветовая схема областей вокруг краев оконных окон будет меняться каждый раз, когда это происходит. Это казалось простым способом увидеть потерю фокуса без фактического набора текста.

Итак, я запустил диспетчер задач Windows и нажал на вкладку процессов. Посмотрев немного, я увидел, что менеджер рабочего стола Adobe отключился и попал в список одновременно с потерей фокуса изменением цвета.

Я скачал и переустановил настольное приложение Adobe Creative Cloud. (Примечание: я не смог удалить его, поэтому я установил загрузку прямо поверх существующей. Существует специальная программа для удаления Creative Cloud, если она не работает.) Это полностью излечило мою проблему.

Для тех, у кого есть Creative Cloud, это может быть программа. Для тех, у кого нет, наблюдение за вкладкой обработки и изменение цвета по краям окон при каждой потере фокуса может помочь вам найти виновника.

JBMenzies
источник
1

Я использовал диспетчер задач, чтобы искать фоновые процессы, и Synaptics Touchpad был виновником.

«Драйвер» был включен постоянно, но каждые несколько секунд появлялся еще один процесс, запускаемый Synaptics, что приводило к потере фокуса.

Я удалил Synaptics и эй Presto, больше не теряя внимания!

Cameron
источник
1

В Regedit (удерживая кнопку «Пуск» + R, затем введите regedit), измените значение HKEY_CURRENT_USER \ Control Panel \ Desktop \ ForegroundLockTimeout с 0 на 30d40. Сохраните и перезагрузите компьютер.

Хейкки Соннинен
источник
0

Проверьте наличие утилиты резервного копирования, такой как Gladinet или Nuance Cloud Connector. (Оба используют движок Gladinet, и такая проблема была им известна уже в 2012 году.) Они запускают dll без окон / без задач, основанное на Explorer.exe.

tanitani
источник
0

Мой Samsung Galaxy S6 постоянно находился в состоянии «Обновление Android», и при подключении через USB для зарядки у меня возникали проблемы с фокусировкой каждые 10 секунд, но окно обозревателя не появлялось впереди. После того, как проблема с фокусировкой исчезла, я изменил порт USB и выбрал режим «Зарядка от USB».

Но постоянная проблема «Обновление Android» все еще существует и должна быть решена.

TarmoPikaro
источник
0

У меня точно такая же проблема. В моем случае это была программа для Windows XP, которая запускалась под стандартной учетной записью пользователя. Ему нужны были повышенные права администратора для запуска. Так что, хотя он работал в фоновом режиме, я не видел его, он часто крал фокус моего текущего окна (проводник Windows, Firefox и другие программы). Это очень раздражает. Я использовал focus.exe счастливым дроидом, чтобы определить виновника. Также вы можете использовать Windows Focus Logger для той же цели.

Камаль
источник
-1

С той же проблемой я столкнулся. Мой ноутбук немного стар У меня 2 ГБ оперативной памяти и окно 7. После работы в течение часа это происходит каждый раз. Я заметил, что этот случай возникает, когда ноутбук перегревается. Решение: Установите программное обеспечение для автоматической очистки RAM. Прошел месяц после установки автоматического очистителя оперативной памяти, и я никогда не сталкивался с проблемой снова.

Рудра Сагар
источник