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

65887
trejder

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

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

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

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

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

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

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

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

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

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

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

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

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

18 ответов на вопрос

14
trejder

As and31415 advised me, I took a careful look at what is in my Startup tab of msconfig program, but found nothing unusual.

It is now clear that this is 99% caused by some external program (though not noticed before and though I haven't installed anything new recently), not by Windows. This is the most important point for me here.

I googled a little bit more and got some ideas / advice, namely that I should try to press Alt+F4 immediately after I notice a steal of a focus. This should exit process that could cause this focus stealth. Then, I may try to use Process Monitor from Sysinternals package to trace the process that has just exited.

This may give me some idea of what is causing this problem.

В `msconfig` выберите вкладку ** Службы ** и включите ** Скрыть все службы Microsoft **. Проверьте это тоже. Вот официальная статья КБ, которая может быть полезна: [Выполните чистый запуск, чтобы определить, не мешают ли фоновые программы вашей игре или программе] (http://support.microsoft.com/kb/331796). Кроме того, даже если вы не видите ничего необычного, я думаю, что было бы неплохо перечислить все сторонние элементы запуска и услуги, которые вы получили. and31415 10 лет назад 1
@trejder, вам нужно было загрузить https://technet.microsoft.com/en-us/sysinternals/bb896645 или что-то еще, или вы имеете в виду встроенную функцию Windows, которая позволяет вам просматривать список процессов что недавно вышло? Спасибо! Ryan 7 лет назад 0
@Ryan Нет, как в ответе - «Process Monitor» из пакета «Sysinternals». trejder 7 лет назад 0
При использовании «Process Monitor» перейдите в меню «Фильтр» и добавьте следующий фильтр: «Операция - это не« Выход из процесса », а затем« Исключить ». Мой драйвер тачпада выдавал ошибку и пытался сообщить об этом с помощью отчета о проблемах Windows. Спасибо% #! @ За эти вопросы и ответы, иначе я бы уничтожил свой ноутбук. Daryl Van Sittert 7 лет назад 2
Я только что это случилось со мной. Оказалось ** C: \ Program Files (x86) \ ViveSetup \ PCClient \ HTCVRMarketplaceUserContextHelper.exe ** - программа для HTC Vive. Я удалил весь каталог. Я подозреваю, что это проблема с их обновлением ранее на этой неделе MickyD 7 лет назад 0
9
Omar Alshaker

I programmed a C# program to monitor fluctuating processes. Here is the code if someone needs to find out what process is causing this problem.

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 ", oldPid); try { Console.WriteLine(" name ", pro.Where((x) => x.Id == oldPid).ToList()[0].ProcessName); } catch (Exception e) { Console.WriteLine($" Hit exception "); } } if (diff.Count > 0) { lastPros = currentPros; oldProcessList = processlist; } System.Threading.Thread.Sleep(100); } } } } 

Output sample showing process starting (green) and terminating (red)

Output sample

Хорошая идея и хороший кусок кода. Но, поскольку это сайт для _users_, а не для разработчиков (это Super User, а не Stack Overflow), то вам следует добавить некоторые пояснения о том, как не-C # -разработчик может запускать ваш код? trejder 8 лет назад 8
Я создал улучшенную версию этого и поместил его в [мой собственный ответ] (// superuser.com/a/1224735/269404), включая ответы на ваши вопросы, @trejder. Palec 6 лет назад 0
вероятно, преобразовать это в PowerShell, который не нуждается в компиляторе C #? phuclv 5 лет назад 0
@phuclv уверен идти вперед: D Omar Alshaker 5 лет назад 0
4
Pampam

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

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

Фокус, вероятно, украден ошибочной фоновой задачей. Он открывает окно, которое крадет фокус, и очень быстро закрывается, но фокус не возвращается. В последнее время в 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("\tPID \t", 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 
Этот код выдает мне сообщение об ошибке «Не удалось найти тип или пространство имен« Процесс »». Поэтому мне нужно было добавить ссылку на System.dll. Wilson 6 лет назад 0
Странно, @ Уилсон. Какую версию csc.exe вы используете? Palec 6 лет назад 0
Кстати, командной строкой будет `csc.exe -reference: System.dll Program.cs` тогда. См. [Документацию по опциям компилятора C #] [https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/reference-compiler-option). Palec 6 лет назад 1
У меня `Microsoft (R) Visual C # компилятор версии 2.6.0.62329 (5429b35d)` Wilson 6 лет назад 0
Эта версия, кажется, от старой сборки VS 2017 (или его инструментов сборки). Я не могу воспроизвести проблему с текущим VS 2017 (15.6.4, `csc -version` 2.7.0.62715 (db02128e)). Тем не менее, спасибо, что поделились проблемой и ее решением. Palec 6 лет назад 0
2
funk79

I removed NMBgMonitor.exe from startup services to solve the issue.

I've also had the same problem with the Google Chrome window losing focus for several seconds and then returning. By watching the task manager services tab, I noticed that whenever focus was lost, NMBgMonitor was active (it has something to do with Nero).

2
Tobias

Подсказка с использованием 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
Oded Maimon

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

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

так весело..

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

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

было весело сказать "так весело" о том, что нет проблемы xD Motassem MK 5 лет назад 0
2
Motassem MK

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

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

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

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

1
Leon

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

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

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

1
Neal

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

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

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

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