La finestra attiva (programma) inaspettatamente perde lo stato attivo in Windows 7


23

Qualcosa sta spostando (rubando) lo stato attivo dalla mia finestra attiva (programma attivo) in Windows, poiché lo sto attualmente utilizzando.

Ho lo stesso problema descritto in questa domanda , con alcune eccezioni:

  1. Ho osservato questo comportamento su (almeno) due computer diversi, quindi questo non è specifico di una macchina.

  2. Uno dei computer citati ha Windows 7 HE a 64 bit, un altro ha Windows 7 Pro a 32 bit, quindi questo problema non è specifico per una particolare versione di Windows o per una particolare piattaforma hardware.

  3. A volte la messa a fuoco viene persa per sempre (è necessario fare clic sulla finestra per continuare a utilizzarla), a volte viene semplicemente spostata su un altro processo in background (?) E ritorna dopo circa 2-3 secondi.

  4. Non ho installato nulla di nuovo su nessuno di questi computer nelle ultime settimane (eccetto Windows Update e altri aggiornamenti automatici come l'aggiornamento automatico del browser Chrome) e certamente i problemi citati hanno iniziato a verificarsi molti giorni dopo l'ultima installazione .

L'attuale comportamento del mio computer è davvero strano e l'intera cosa diventa fastidiosa. Esempi:

  1. Sto selezionando del testo in Chrome e in realtà vedo che il colore della selezione cambia dal blu (selezione in una finestra attiva) al grigio (selezione in una finestra inattiva).

  2. Sto modificando alcuni documenti in Word, Notepad ++ o un'e-mail in Gmail in Chrome e il processo di modifica si interrompe per alcuni secondi (quando i cambi di messa a fuoco) viene terminato in modo permanente (messa a fuoco persa per sempre).

Ho Microsoft Security Essentials attivo, aggiornato e funzionante e non segnala nulla di insolito.

Ho avuto la sensazione che si verifichi più spesso in Google Chrome. All'inizio ero così sicuro che ero quasi pronto ad accusare alcuni degli ultimi aggiornamenti di questo browser. Ma alla fine l'ho notato insolitamente spesso in Chrome, perché questo è il mio programma più usato.

Qualcuno ha o ha avuto problemi simili o ha qualche idea, cosa può causare questo o come risolverlo?


2
Il problema si verifica anche in modalità provvisoria (con o senza rete)? Avvia msconfige seleziona la scheda Avvio . Che programmi ci sono?
and31415

1
È molto difficile "catturare" il problema descritto, perché non succede troppo spesso. Ad esempio: nessuna traccia negli ultimi due giorni. Quindi dovrei lavorare giorni in modalità provvisoria per provare a "catturare" questo. Ma grazie per l'idea. Inoltre, vedi la mia risposta di seguito.
Trejder,

Risposte:


17

Come mi ha consigliato and31415 , ho dato uno sguardo attento a ciò che è nella mia Startupscheda del msconfigprogramma, ma non ho trovato nulla di insolito.

Ora è chiaro che questo è causato al 99% da qualche programma esterno (anche se non notato prima e anche se non ho installato nulla di nuovo di recente), non da Windows. Questo è il punto più importante per me qui.

Ho cercato su Google un po 'di più e ho ricevuto alcune idee / consigli, vale a dire che dovrei provare a premere Alt+ F4subito dopo aver notato una perdita di concentrazione. Questo dovrebbe uscire dal processo che potrebbe causare questa azione invisibile. Quindi, posso provare a utilizzare Process Monitordal Sysinternalspacchetto per tracciare il processo che è appena terminato.

Questo potrebbe darmi un'idea di cosa sta causando questo problema.


1
Da msconfig, selezionare la scheda Servizi e abilitare Nascondi tutti i servizi Microsoft . Controlla anche quello. Ecco un articolo ufficiale di KB che può essere utile: esegui un avvio pulito per determinare se i programmi in background interferiscono con il tuo gioco o programma . Inoltre, anche se non vedi nulla di insolito, penso che sarebbe una buona idea elencare tutti gli articoli e i servizi di avvio di terze parti che hai.
and31415

@trejder, hai dovuto scaricare technet.microsoft.com/en-us/sysinternals/bb896645 o qualcos'altro, o ti riferisci a una funzionalità integrata di Windows che ti consente di consultare un elenco di processi che sono usciti di recente? Grazie!
Ryan,

@Ryan No, come nella risposta - Process Monitordal Sysinternalspacchetto.
Trejder,

2
Durante l'utilizzo Process Monitor, vai al menu Filtro e aggiungi il seguente filtro: L'operazione non è Process Exitquindi Escludi. Il driver del mio touchpad ha generato un errore e ha tentato di segnalarlo con Segnalazione problemi di Windows. Grazie% #! @ Per questi siti di domande e risposte altrimenti avrei distrutto il mio laptop.
Daryl Van Sittert,

Mi è appena successo. Si è rivelato essere C: \ Programmi (x86) \ ViveSetup \ PCClient \ HTCVRMarketplaceUserContextHelper.exe - un programma per HTC Vive. Ho cancellato l'intera directory. Sospetto che sia un problema con il loro aggiornamento all'inizio di questa settimana
MickyD

12

Ho programmato un programma C # per monitorare i processi fluttuanti. Ecco il codice se qualcuno ha bisogno di scoprire quale processo sta causando questo 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);
            }
        }
    }
}

Esempio di output che mostra l'avvio del processo (verde) e il termine (rosso)

Campione di output


11
Buona idea e bel codice. Ma dato che questo è un sito per utenti , non per sviluppatori (questo è Super User, non Stack Overflow), allora dovresti aggiungere qualche spiegazione su come lo sviluppatore non C # è in grado di eseguire il tuo codice?
trejder,

Ho creato una versione migliorata di questo e l'ho inserito nella mia risposta , comprese le risposte alle tue domande, @trejder.
Palec,

probabilmente convertire questo in PowerShell che non ha bisogno di un compilatore C #?
phuclv,

@phuclv sicuramente vai avanti: D
Omar Alshaker,

7

L'attenzione viene probabilmente rubata da un'attività in background buggy. Apre una finestra che ruba lo stato attivo e si chiude molto rapidamente, ma lo stato attivo non ritorna. Ultimamente, Microsoft Office ha avuto un tale bug .

Per scoprire tali processi, è possibile utilizzare strumenti come Window Focus Logger ( mirror ) o un programma C # personalizzato simile a 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();
            }
        }
    }
}

Versione lucida e corretta del codice fornita da Omar Alshaker . Inoltre non richiede C # 6. Richiede .NET 3.5 o versioni successive.

È possibile compilarlo utilizzando il compilatore C # ( csc.exe) fornito con l'installazione di .NET Framework ed eseguire l'eseguibile risultante per ottenere un registro in tempo reale dei processi che iniziano (verde) o terminano (rosso). Usa Ctrl+ Cper terminarlo.


Per trovare il compilatore, esegui where /R %windir%\Microsoft.NET csc.exe. Scegli quello dall'ultima versione di .NET installata, indipendentemente da 32b o 64b. Salvare il codice C # Program.cse compilarlo in Program.exe:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe Program.cs

Questo codice mi dà l'errore "Impossibile trovare il tipo o lo spazio dei nomi 'Processo'". Quindi avevo bisogno di aggiungere un riferimento a System.dll.
Wilson,

Strano, @Wilson. Quale versione di csc.exe stai usando?
Palec,

1
A proposito, la riga di comando sarà csc.exe -reference:System.dll Program.csquindi. Vedere i documenti dell'opzione del compilatore C # di riferimento .
Palec,

HoMicrosoft (R) Visual C# Compiler version 2.6.0.62329 (5429b35d)
Wilson,

Quella versione sembra provenire da una versione precedente di VS 2017 (o dai suoi strumenti di compilazione). Non riesco a riprodurre il problema con l'attuale VS 2017 (15.6.4, csc -version2.7.0.62715 (db02128e)). Tuttavia, grazie per aver condiviso il problema e la sua soluzione.
Palec,

4

Nel mio caso è stato che wermgr.exe (segnalazione errori di Windows) è stato avviato più volte. Ho seguito la soluzione di seguito per impedirne l'avvio automatico e questo ha risolto il problema.

  1. Pulsante Start -> Nella casella di ricerca digitare Centro operativo -> Enter.
  2. Fare clic sulla freccia accanto a Manutenzione per espandere.
  3. In Cerca soluzioni ai rapporti sui problemi , fai clic su Impostazioni .
  4. Fai clic su Modifica impostazioni rapporto per tutti gli utenti .
  5. Controlla il pulsante di opzione accanto a Ogni volta che si verifica un problema, chiedimi prima di verificare la soluzione .
  6. OK uscita, facendo clic su OK.

3

Il suggerimento con l'utilizzo Alt+F4per uscire dal programma di interruzione ha funzionato bene. Invece di tracciare il programma appena uscito con SysInternal's ProcessManager, ho tracciato il programma come segue:

  1. Aperto Task manager
  2. Fai uno screenshot dei processi aperti
  3. Passa a Browser, Mail ecc. E "Attendi perdita di messa a fuoco"
  4. Premere Alt+F4per uscire dal programma di interruzione
  5. Vai a Task managere confronta i processi aperti con screenshot
  6. Il processo ora "mancante" ha causato il problema

Nel mio caso lo era twcu.exe, un programma che inizia con TP-Link Configuration tool. È utilizzato da chiavette WIFI-USB esterne. Come riportato qui ( twcu.exe su file.net ) e qui ( twcu.exe su computerbase.de [tedesco] ), TP-Link Configuration toolnon è necessario per la connessione WIFI stessa. L'ho rimosso da Avvio automatico ( msconfig> system start), ho riavviato il computer e si connette ancora perfettamente al WIFI - e i problemi di perdita di messa a fuoco sono spariti!


2

Ho rimosso NMBgMonitor.exedai servizi di avvio per risolvere il problema.

Ho anche avuto lo stesso problema con la finestra di Google Chrome che ha perso lo stato attivo per diversi secondi e poi è tornata. Osservando la scheda Servizi del Task Manager, ho notato che ogni volta che si perdeva lo stato attivo, NMBgMonitor era attivo (ha qualcosa a che fare con Nero).


2

nel mio caso, e probabilmente tutte le custodie per pc / laptop di lenovo, il problema era con lenovo svcguihlpr.exe che inizia a funzionare ogni pochi minuti e a concentrarsi senza l'interfaccia utente mostrata ... questo processo è l'app Lenovo Access Connections che offre un'interfaccia utente piacevole per la gestione reti wifi e banda larga .. non l'ho mai usato, l'ho persino rimosso dalla barra delle applicazioni ma funziona ancora ...

oggi ho scoperto che era il problema e l'ho disinstallato!

così tanto divertimento..

a proposito, l'ho trovato facendo la cosa più idiota possibile, prendendo il mio telefono, avviando un video registrando lo schermo dove eseguivo il task manager e continuavo il mio lavoro .. una volta persa la messa a fuoco ho aspettato un secondo, ho interrotto la registrazione e verificato quali processi si sono spostati verso l'alto, svcguihlpr è stato in cima per meno di un secondo ..

spero che possa aiutare gli altri.


è stato divertente dire "così divertente" di non avere un problema xD
Motassem MK,

2

Ho avuto questo problema, ho pensato che i tempi fossero casuali ma non lo era,

nel mio caso è stato banale come: cambi di carta da parati!
Ho avuto una presentazione come sfondo e ogni volta che cambia l'attenzione si concentra sul desktop!

Spero che questo possa essere il caso di qualcuno che legge i commenti e sarebbe semplice come questo.

(Non so se microsoft potrà mai risolvere questo problema, dato che ho il problema sull'ultima build di Windows 10 (1803 - 17134.112))


1

Anche la finestra perdeva costantemente la messa a fuoco. Leggi che qualcuno è riuscito a tracciare WerSvc sta causando problemi utilizzando un logger. Anche se in realtà si tratta di un servizio di segnalazione errori di Windows, ma ho provato a disabilitarlo in Task Manager di Windows - Servizi - Servizi.

Quindi il problema di perdita di messa a fuoco si è fermato.

Forse voi ragazzi potete provarlo.


1

Questo problema mi ha fatto impazzire! Così ho deciso di scrivere un programma per dirmi chi o cosa sta focalizzando l'attenzione sul mio programma. Davvero fastidioso quando stai giocando a Age of Empires e il gioco va casualmente sul desktop.

Ecco i risultati ....

Verizon! Sì, avevo installato un'app di supporto Verizon ed era il colpevole!
Vai in - Pannello di controllo -> Programmi e funzionalità
e disinstalla tutto ciò che riguarda Verizon.

Dimentico i nomi dei programmi, di solito sono iniziati con un Vz ..., e c'è anche un servizio IW ... Dimentico onestamente dal momento che non vedevo l'ora di uccidere qualsiasi cosa sulla mia macchina da loro (mi ha fatto impazzire ), ma quando si disinstalla l'app Verizon. il problema scompare.


1

Nel mio caso, ho risolto il problema andando al gestore dei processi di Windows e controllando se alcuni programmi venivano avviati e chiusi costantemente. Ho notato che un programma che ho scaricato (penso che fosse chiamato Windows 8 Start) si riavviava ogni 7 secondi. Ho cancellato tutto ciò che lo riguardava e ha funzionato!


1

Stavo avendo il problema che la finestra attiva perdesse il focus ogni pochi secondi. Dovrei fare clic con il tasto sinistro per continuare a digitare. Esasperante.

Ho notato che la combinazione di colori per le aree attorno ai bordi delle finestre cambiava ogni volta che accadeva. Sembrava un modo semplice per vedere la perdita di messa a fuoco senza scrivere.

Quindi, ho avviato Task Manager di Windows e ho fatto clic sulla scheda Processi. Dopo aver guardato per un po ', ho visto che il desktop manager di Adobe stava scomparendo e sulla lista contemporaneamente con la perdita di messa a fuoco del cambiamento di colore.

Ho scaricato e reinstallato l'applicazione desktop Adobe Creative Cloud. (Nota: non sono riuscito a disinstallarlo, quindi ho appena installato il download su quello esistente. Esiste un programma speciale per disinstallare Creative Cloud se non funziona.) Questo ha risolto completamente il mio problema.

Per quelli con Creative Cloud, questo potrebbe essere il programma. Per quelli senza, guardare la scheda di elaborazione e il cambio di colore attorno ai bordi delle finestre con ogni perdita di messa a fuoco può aiutarti a trovare il colpevole.


1

Ho usato il task manager per cercare i processi in background e Synaptics Touchpad era il colpevole.

Il "driver" era costantemente attivo, ma un altro processo di Synaptics stava spuntando ogni pochi secondi e causando la perdita di attenzione.

Ho disinstallato Synaptics e hey presto, non perdere più attenzione!


1

In Regedit (tieni premuto il pulsante Start + R, quindi digita regedit), modifica il valore HKEY_CURRENT_USER \ Control Panel \ Desktop \ ForegroundLockTimeout da 0 a 30d40. Salvare e riavviare il computer.


0

Cerca un'utilità di backup come Gladinet o Nuance Cloud Connector. (Entrambi usano il motore di Gladinet e questo tipo di problema era già noto a loro nel 2012.) Stanno eseguendo una DLL senza finestre / senza attività basata su Explorer.exe.


0

Il mio Samsung Galaxy S6 era in costante "Aggiornamento di Android" e quando collegato tramite USB per la ricarica, ho perso il problema di messa a fuoco ogni 10 secondi, ma nessuna finestra di esploratore è spuntata in primo piano. Ho cambiato la porta USB e selezionato la modalità "Ricarica Usb" dal telefono, dopo che il problema di messa a fuoco è scomparso.

Ma il problema costante "Aggiornamento di Android" è ancora presente e deve essere ancora risolto.


0

Ho lo stesso problema. Il mio caso era un programma Windows XP eseguito su un account utente standard. Aveva bisogno di diritti di amministratore elevati per l'esecuzione. Quindi, mentre veniva eseguito in background, non lo vedevo, spesso rubava il focus della mia finestra corrente (Windows Explorer, Firefox e altri programmi). È molto fastidioso Ho usato focus.exe di Happy Droid per identificare il colpevole. Inoltre è possibile utilizzare Windows Focus Logger per lo stesso scopo.


-1

Lo stesso problema che ho riscontrato. Il mio laptop è un po 'vecchio. Ho 2 GB di RAM e Windows 7. Dopo aver funzionato per un'ora, la stessa cosa accade ogni volta. Ho notato che questo caso si presenta quando il laptop si stava surriscaldando. Soluzione: installare un software di pulizia automatica della RAM. È passato un mese dall'installazione del pulitore RAM automatico e non ho mai più affrontato il problema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.