Aktywne okno (program) nieoczekiwanie traci ostrość w Windows 7

24

Coś przesuwa (kradnie) fokus z mojego aktywnego okna (aktywnego programu) w moim systemie Windows, ponieważ obecnie go używam.

Mam ten sam problem, co opisany w tym pytaniu , z kilkoma wyjątkami:

  1. Zauważyłem to zachowanie na (co najmniej) dwóch różnych komputerach, więc nie jest to specyficzne dla maszyny.

  2. Jeden z wymienionych komputerów ma 64-bitowy system Windows 7 HE, a inny 32-bitowy system Windows 7 Pro, więc ten problem nie dotyczy konkretnej wersji systemu Windows ani konkretnej platformy sprzętowej.

  3. Czasami fokus zostaje utracony na dobre (trzeba kliknąć okno, aby dalej go używać), czasem jest po prostu przenoszony do innego procesu w tle (?) I wraca po około 2-3 sekundach.

  4. Przez ostatnie kilka tygodni nie instalowałem niczego nowego na żadnym z tych komputerów (oprócz Windows Update i innych automatycznych aktualizacji, takich jak automatyczna aktualizacja przeglądarki Chrome), a na pewno wspomniane problemy zaczęły pojawiać się wiele dni po ostatniej instalacji .

Obecne zachowanie mojego komputera jest naprawdę dziwne, a cała sprawa staje się denerwująca. Przykłady:

  1. Wybieram jakiś tekst w Chrome i faktycznie widzę, że kolor zaznaczenia zmienia się z niebieskiego (zaznaczenie w aktywnych oknach) na szary (zaznaczenie w nieaktywnym oknie).

  2. Edytuję jakiś dokument w programie Word, Notepad ++ lub wiadomość e-mail w Gmailu w Chrome i proces edycji albo zatrzymuje się na kilka sekund (gdy przesunięcie fokusu) jest zakończony na stałe (fokus utracony na dobre).

Mam aktywny, zaktualizowany i działający program Microsoft Security Essentials , który nie zgłasza nic niezwykłego.

Miałem wrażenie, że najczęściej występuje w Google Chrome. Na początku byłem tak pewien, że prawie byłem gotowy oskarżyć niektóre z ostatnich aktualizacji tej przeglądarki. Okazało się jednak, że zauważyłem to niezwykle często w Chrome, ponieważ jest to mój najczęściej używany program.

Czy ktoś ma lub miał podobne problemy lub ma jakiś pomysł, co może być przyczyną lub jak to naprawić?

trejder
źródło
2
Czy problem występuje również w trybie awaryjnym (z siecią lub bez)? Uruchom msconfigi wybierz kartę Uruchamianie . Jakie są tam programy?
i31415
1
Bardzo trudno „złapać” opisany problem, ponieważ nie zdarza się to zbyt często. Na przykład - brak śladu z ostatnich dwóch dni. Musiałbym więc pracować kilka dni w trybie awaryjnym, aby spróbować to „złapać”. Ale dzięki za pomysł. Zobacz także moją odpowiedź poniżej.
trejder

Odpowiedzi:

18

Jak mi doradzili and31415 , przyjrzałem się uważnie mojej Startupkarcie msconfigprogramu, ale nie znalazłem nic niezwykłego.

Teraz jest jasne, że jest to 99% spowodowane przez jakiś program zewnętrzny (choć wcześniej tego nie zauważałem i chociaż ostatnio nie instalowałem niczego nowego), a nie system Windows. To jest dla mnie najważniejszy punkt.

Zrobiłem trochę więcej w Google i dostałem kilka pomysłów / porad, a mianowicie, że powinienem spróbować nacisnąć Alt+ F4natychmiast po zauważeniu kradzieży. Powinno to zakończyć proces, który może spowodować ukrywanie się ostrości. Następnie może staram się korzystać Process Monitorz Sysinternalspakietu prześledzić proces, który właśnie zakończone.

To może dać mi pojęcie o tym, co powoduje ten problem.

trejder
źródło
1
Z msconfigwybierz kartę Usługi i włącz Ukryj wszystkie usługi Microsoft . Sprawdź to też. Oto oficjalny artykuł z bazy wiedzy, który może być przydatny: Wykonaj czysty rozruch, aby ustalić, czy programy działające w tle zakłócają twoją grę lub program . Ponadto, nawet jeśli nie widzisz nic niezwykłego, myślę, że dobrym pomysłem byłoby wypisanie wszystkich pozycji i usług startowych stron trzecich.
i31415
@trejder, czy musiałeś pobrać technet.microsoft.com/en-us/sysinternals/bb896645 lub coś innego, czy masz na myśli wbudowaną funkcję systemu Windows, która pozwala spojrzeć na listę procesów, które niedawno zakończyły pracę? Dzięki!
Ryan
@Ryan Nope, jak w odpowiedzi - Process Monitorz Sysinternalspakietu.
trejder
2
Podczas używania Process Monitorprzejdź do menu Filtr i dodaj następujący filtr: Operacja nie jest Process Exitwtedy Wyklucz. Mój sterownik touchpada zgłaszał błąd i próbował zgłosić go za pomocą Windows Problem Reporting. Dziękuję% #! @ Za te witryny pytań i odpowiedzi, w przeciwnym razie zniszczyłbym laptopa.
Daryl Van Sittert
Właśnie mi się to przydarzyło. Okazało się, że to C: \ Program Files (x86) \ ViveSetup \ PCClient \ HTCVRMarketplaceUserContextHelper.exe - program dla HTC Vive. Usunąłem cały katalog. Podejrzewam, że jest problem z ich aktualizacją na początku tego tygodnia
MickyD
13

Zaprogramowałem program C # do monitorowania zmiennych procesów. Oto kod, jeśli ktoś musi dowiedzieć się, jaki proces powoduje ten 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 {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);
            }
        }
    }
}

Próbka wyjściowa pokazująca rozpoczęcie procesu (zielony) i zakończenie (czerwony)

Próbka wyjściowa

Omar Alshaker
źródło
10
Dobry pomysł i niezły kawałek kodu. Ale ponieważ jest to witryna dla użytkowników , a nie programistów (to jest Super użytkownik, a nie przepełnienie stosu), należy dodać wyjaśnienie, w jaki sposób programista inny niż C # jest w stanie uruchomić Twój kod?
trejder
Stworzyłem ulepszoną wersję tego i umieściłem go we własnej odpowiedzi , w tym odpowiedzi na twoje pytania, @trejder.
Palec,
prawdopodobnie przekonwertować to na PowerShell, który nie potrzebuje kompilatora C #?
phuclv
@ phuclv na pewno śmiało: D
Omar Alshaker
8

Ostrość prawdopodobnie została skradziona przez błędne zadanie w tle. Otwiera okno, które kradnie fokus i jest bardzo szybko zamykane, ale fokus nie powraca. Ostatnio w pakiecie Microsoft Office wystąpił taki błąd .

Aby odkryć takie procesy, możesz użyć narzędzi takich jak Window Focus Logger ( mirror ) lub niestandardowy program C # podobny do Monitora procesów :

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

Udoskonalona i poprawiona wersja kodu dostarczona przez Omara Alshakera . Nie wymaga również C # 6. Wymaga .NET 3.5 lub nowszego.

Możesz go skompilować za pomocą kompilatora C # ( csc.exe) dostarczanego z instalacją .NET Framework i uruchomić wynikowy plik wykonywalny, aby uzyskać dziennik procesów w czasie rzeczywistym, który rozpoczyna się (zielony) lub kończy (czerwony). Użyj Ctrl+, Caby zakończyć.


Aby znaleźć kompilator, uruchom where /R %windir%\Microsoft.NET csc.exe. Wybierz ten z najnowszej zainstalowanej wersji .NET, bez względu na to, czy jest to wersja 32b czy 64b. Zapisz kod C # Program.csi skompiluj go do Program.exe:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Program.cs
Palec
źródło
Ten kod wyświetla błąd „Nie można znaleźć typu lub obszaru nazw„ Proces ”. Musiałem więc dodać odwołanie do System.dll.
Wilson
Dziwne, @Wilson. Jakiej wersji csc.exe używasz?
Palec
1
Nawiasem mówiąc, linia poleceń będzie csc.exe -reference:System.dll Program.cswtedy. Zobacz -referencje Dokumenty opcji kompilatora C # .
Palec
MamMicrosoft (R) Visual C# Compiler version 2.6.0.62329 (5429b35d)
Wilson
Ta wersja wydaje się pochodzić ze starszej wersji VS 2017 (lub jej narzędzi do kompilacji). Nie mogę odtworzyć problemu z bieżącym VS 2017 (15.6.4, csc -version2.7.0.62715 (db02128e)). Mimo to dziękuję za udostępnienie problemu i jego rozwiązanie.
Palec
4

W moim przypadku wermgr.exe (raportowanie błędów systemu Windows) zaczął się od nowa. Postępowałem zgodnie z poniższym rozwiązaniem, aby zatrzymać automatyczne uruchamianie, co rozwiązało problem.

  1. Przycisk Start -> W polu wyszukiwania wpisz Centrum akcji -> Enter.
  2. Kliknij strzałkę obok Konserwacja, aby rozwinąć.
  3. W obszarze Sprawdź rozwiązania problemów z raportami kliknij Ustawienia .
  4. Kliknij Zmień ustawienia raportu dla wszystkich użytkowników .
  5. Zaznacz przycisk opcji obok Za każdym razem, gdy wystąpi problem, zapytaj mnie przed sprawdzeniem rozwiązania .
  6. OK, wyjdź, klikając OK.
Pampam
źródło
3

Wskazówka Alt+F4dotycząca wyjścia z programu przerywającego działała dobrze. Zamiast śledzić właśnie zakończony program za pomocą SysInternal„s” ProcessManager, śledziłem program w następujący sposób:

  1. otwarty Task manager
  2. Zrób zrzut ekranu z otwartych procesów
  3. Przejdź do przeglądarki, poczty itp. I „poczekaj na utratę ostrości”
  4. Naciśnij, Alt+F4aby wyjść z programu przerywającego
  5. Przejdź do Task managerporównania otwartych procesów ze zrzutem ekranu
  6. „Brakujący” proces spowodował problem

W moim przypadku był twcu.exeto program, który zaczyna się od TP-Link Configuration tool. Jest używany przez zewnętrzne pamięci USB WIFI-USB. Jak podano tutaj ( twcu.exe w file.net ) i tutaj ( twcu.exe w computerbase.de [niemiecki] ), TP-Link Configuration toolnie jest potrzebne do samego połączenia WIFI. Usunąłem go z Autostart ( msconfig> system start), ponownie uruchomiłem komputer i nadal łączy się z WIFI bezbłędnie - i problemy z utratą ostrości zniknęły!

Tobiasz
źródło
2

Usunąłem NMBgMonitor.exez usług uruchamiania, aby rozwiązać problem.

Miałem również ten sam problem z utratą ostrości okna Google Chrome na kilka sekund, a następnie z powrotem. Obserwując kartę usług menedżera zadań, zauważyłem, że za każdym razem, gdy utracono fokus, NMBgMonitor był aktywny (ma to coś wspólnego z Nero).

funk79
źródło
2

w moim przypadku i prawdopodobnie we wszystkich obudowach komputerów / laptopów Lenovo, problem dotyczył lenovo svcguihlpr.exe, który zaczyna działać co kilka minut i skupia się bez pokazanego interfejsu użytkownika ... ten proces jest aplikacją Lenovo Access Connections, która daje ładny interfejs użytkownika do zarządzania Wi-Fi i sieci szerokopasmowe .. nigdy go nie użyłem, nawet usunąłem interfejs z paska zadań, ale nadal działa ...

dzisiaj odkryłem, że to był problem i odinstalowałem go!

tak dużo zabawy..

przy okazji, znalazłem to, robiąc jak najbardziej idiotyczne rzeczy, biorąc telefon, rozpoczynając nagrywanie wideo na ekranie, gdy uruchomiłem menedżera zadań i kontynuowałem pracę .. po utracie koncentracji odczekałem sekundę, zatrzymałem nagrywanie i sprawdziłem, które procesy przesunęły się w górę, svcguihlpr był na szczycie przez mniej niż sekundę ..

mam nadzieję, że pomoże innym.

Oded Maimon
źródło
zabawnie było mówić „tyle radości” z powodu braku problemu xD
Motassem MK
2

Miałem ten problem, myślałem, że czas jest losowy, ale tak nie było,

w moim przypadku było to tak banalne jak: zmiana tapet!
Miałem pokaz slajdów jako tapetę i za każdym razem, gdy się zmienia, fokus przechodzi na pulpit!

Mam nadzieję, że tak może być w przypadku osoby czytającej komentarze i byłoby to tak proste.

(Nie wiem, czy Microsoft kiedykolwiek to naprawi, ponieważ mam problem z najnowszą wersją systemu Windows 10 (1803 - 17134.112))

Motassem MK
źródło
1

Ciągle też traciłem ostrość. Przeczytaj, że komuś udało się wyśledzić WerSvc powoduje problem przy użyciu rejestratora. Nawet jeśli w rzeczywistości jest to usługa raportowania błędów systemu Windows, ale próbowałem ją wyłączyć w Menedżerze zadań Windows - Usługi - Usługi.

Następnie problem z utratą ostrości ustał.

Może możecie spróbować.

Leon
źródło
1

Ten problem doprowadził mnie do szału! Postanowiłem więc napisać program, który powie mi, kto lub co odwraca uwagę od mojego programu. Naprawdę denerwujące, gdy grasz w Age of Empires, a gra trafia losowo na pulpit.

Oto wyniki ...

Verizon! Tak, zainstalowałem jakąś aplikację pomocniczą Verizon i to był winowajca!
Przejdź do - Panel sterowania -> Programy i funkcje
i odinstaluj wszystko związane z Verizon.

Zapominam nazwy programów, zwykle zaczynających się od Vz ... i jest też usługa IW ... Naprawdę zapominam, ponieważ nie mogłem się doczekać, aby zabić od nich wszystko, co było na mojej maszynie (doprowadzało mnie to do szaleństwa ), ale po odinstalowaniu aplikacji Verizon problem zniknie.

Neal
źródło
1

W moim przypadku rozwiązałem problem, przechodząc do menedżera procesów systemu Windows i sprawdzając, czy jakieś programy są ciągle uruchamiane i zamykane. Zauważyłem, że program, który pobrałem (myślę, że nazywał się Windows 8 start) uruchamiał się ponownie co 7 sekund. Usunąłem wszystko, co się z tym wiązało i działało!

Ghais
źródło
1

Miałem problem z utratą ostrości aktywnego okna co kilka sekund. Musiałbym kliknąć lewym przyciskiem myszy, aby kontynuować pisanie. Szalony.

Zauważyłem, że schemat kolorów obszarów wokół krawędzi okien okien zmienia się za każdym razem, gdy to się dzieje. Wydawało się to łatwym sposobem na zauważenie utraty ostrości bez pisania.

Tak więc uruchomiłem menedżera zadań systemu Windows i kliknąłem kartę procesów. Po krótkim obejrzeniu zauważyłem, że menedżer pulpitu Adobe odpadał i pojawiał się na liście jednocześnie z utratą zmiany ostrości koloru.

Pobrałem i ponownie zainstalowałem aplikację komputerową Adobe Creative Cloud. (Uwaga: nie mogłem go odinstalować, więc właśnie zainstalowałem pobieranie bezpośrednio nad istniejącym. Istnieje specjalny program do odinstalowywania Creative Cloud, jeśli to nie działa.) To całkowicie wyleczyło mój problem.

Dla osób korzystających z usługi Creative Cloud może to być program. Dla tych, którzy nie mają, obserwowanie zakładki przetwarzania i zmiana koloru wokół krawędzi okien przy każdej utracie ostrości może pomóc ci znaleźć winowajcę.

JBMenzies
źródło
1

Użyłem menedżera zadań do wyszukiwania procesów w tle, a winowajcą był Synaptics Touchpad.

„Sterownik” był ciągle włączony, ale co kilka sekund pojawiał się kolejny proces Synaptics, powodując utratę koncentracji.

Odinstalowałem Synaptics i hej presto, nie tracąc koncentracji!

Cameron
źródło
1

W Regedit (przytrzymaj przycisk Start + R, a następnie wpisz regedit) zmień wartość HKEY_CURRENT_USER \ Control Panel \ Desktop \ ForegroundLockTimeout z 0 na 30d40. Zapisz i uruchom ponownie komputer.

Heikki Sonninen
źródło
0

Sprawdź narzędzie do tworzenia kopii zapasowych, takie jak Gladinet lub Nuance Cloud Connector. (Obaj używają silnika Gladinet, a tego rodzaju problem był im znany już w 2012 roku.) Działają bez okien / bezdllowej biblioteki DLL w programie Explorer.exe.

tanitani
źródło
0

Mój Samsung Galaxy S6 był w ciągłym „uaktualnianiu Androida” i po podłączeniu przez USB do ładowania, co 10 sekund straciłem problem z ostrością, ale żadne okno eksploratora nie wyskoczyło z przodu. Zmieniłem port USB i wybrałem tryb telefonu „Ładowanie USB” po tym, jak problem z ustawieniem ostrości zniknął.

Ale ciągły problem „Aktualizacji Androida” wciąż istnieje i nadal musi zostać rozwiązany.

TarmoPikaro
źródło
0

Mam ten sam problem. W moim przypadku był to program systemu Windows XP, który był uruchamiany na standardowym koncie użytkownika. Do uruchomienia potrzebne były podwyższone uprawnienia administratora. Więc chociaż działał w tle, nie widziałem go, ale często kradł ostrość mojego obecnego okna (eksploratora Windows, Firefoxa i innych programów). To jest bardzo denerwujące. Użyłem focus.exe od happy droid do zidentyfikowania winowajcy. Możesz także użyć Windows Focus Logger do tego samego celu.

Kamal
źródło
-1

Ten sam problem, z którym się spotkałem. Mój laptop jest trochę stary. Mam 2 GB pamięci RAM i Windows 7. Po godzinie pracy to samo dzieje się za każdym razem. Zauważyłem, że ten przypadek powstaje, gdy laptop się przegrzewa. Rozwiązanie: Zainstaluj automatyczne oprogramowanie do czyszczenia pamięci RAM. Minął miesiąc po zainstalowaniu automatycznego czyszczenia pamięci RAM i nigdy więcej nie spotkałem się z tym problemem.

Rudra Sagar
źródło