web-dev-qa-db-ja.com

Windows 7でアクティブウィンドウ(プログラム)が予期せずフォーカスを失う

現在何かを使用しているため、Windowsでアクティブウィンドウ(アクティブプログラム)からフォーカスが移動(盗用)しています。

この質問 で説明されているのと同じ問題がありますが、いくつか例外があります:

  1. (少なくとも)2つの異なるコンピューターでこの動作を観察したため、これはマシン固有ではありません。

  2. 上記のコンピューターの1つにWindows 7 HE 64ビットがあり、別のコンピューターにはWindows 7 Pro 32ビットがあるため、この問題は特定のバージョンのWindowsまたは特定のハードウェアプラットフォームに固有のものではありません。

  3. フォーカスが完全に失われる場合があります(ウィンドウをクリックして継続して使用する必要があります)。別のバックグラウンドプロセス(?)に移動して、約2〜3秒後に戻ることがあります。

  4. 過去数週間、これらのコンピュータに新しいものをインストールしていません(Windows UpdateとChromeブラウザの自動更新)そして最後にインストールしてから何日も経ってから問題が発生し始めたことは確かです

私のコンピュータの現在の動作は本当に奇妙で、全体が煩わしくなります。例:

  1. Chromeでテキストを選択していますが、実際には、選択色が青(アクティブウィンドウでの選択)からグレー(非アクティブウィンドウでの選択)に変わっていることがわかります。

  2. Chrome)でWord、Notepad ++、Gmailのメールの一部のドキュメントを編集しています。編集プロセスは数秒間停止し(フォーカスがシフトしたとき)、永久に終了します(フォーカスが失われました)良い)。

私はアクティブで、更新され、動作していますMicrosoft Security Essentialsがあり、異常な報告はありません。

私はそれが最も頻繁にGoogle Chromeで発生するという感じがしました。最初、私はこのブラウザの最後の更新の一部を非難する準備がほぼできていると確信していました。しかし、これがChromeで異常に頻繁に気づいたことがわかりました。これは、これが私の最も頻繁に使用されるプログラムだからです。

誰かが同様の問題を抱えている、または抱えていたり、考えを持っていますか?

23
trejder

and31415がアドバイスしたように、Startupプログラムのmsconfigタブの内容を注意深く調べましたが、異常なものは何も見つかりませんでした。

これは99%がWindowsではなく一部の外部プログラム(以前は気付かなかったが、最近は何もインストールしていない)が原因であることが明らかになりました。これは私にとってここで最も重要なポイントです。

私はもう少しグーグルしていくつかのアイデア/アドバイスを得ました、すなわち私は押すようにすべきです Alt+F4 フォーカスの盗みに気付いた直後。これにより、このフォーカスステルスを引き起こす可能性のあるプロセスが終了します。次に、Process Monitor from Sysinternalsパッケージは、終了したばかりのプロセスをトレースします。

これにより、何がこの問題の原因であるかがわかります。

17
trejder

変動するプロセスを監視する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);
            }
        }
    }
}

プロセスの開始(緑)と終了(赤)を示す出力サンプル

Output sample

12
Omar Alshaker

焦点はおそらくバグのあるバックグラウンドタスクによって奪われます。フォーカスを奪うウィンドウを開き、非常にすばやく閉じますが、フォーカスは戻りません。最近、 Microsoft Officeにはそのようなバグがありました

このようなプロセスを検出するには、 tools like Window Focus Loggermirror )または Process Monitorに類似したカスタムC#プログラムを使用できます

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

Omar Alshakerによって提供されるコード の洗練され、バグ修正されたバージョン。また、C#6は必要ありません。NET3.5以降が必要です。

.NET Frameworkインストールに付属のC#コンパイラ(csc.exe)を使用してコンパイルし、結果の実行可能ファイルを実行して、開始(緑)または終了(赤)するプロセスのリアルタイムログを取得できます。使用する CtrlC 終了します。


コンパイラを見つけるには、where /R %windir%\Microsoft.NET csc.exeを実行します。 32bか64bかに関係なく、インストールされている最新の.NETバージョンから1つを選択します。 C#コードをProgram.csに保存し、Program.exeにコンパイルします。

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

私の場合、それはwermgr.exe(Windowsエラー報告)が何度も起動したことです。以下の解決策に従って自動的に起動しないようにして、問題を解決しました。

  1. 開始ボタン->検索ボックスに入力アクションセンター-> Enter
  2. Maintenanceの横の矢印をクリックして展開します。
  3. 問題レポートの解決策を確認するの下で、設定をクリックします。
  4. すべてのユーザーのレポート設定を変更をクリックします。
  5. [問題が発生するたびに]の横のラジオボタンをオンにします解決策を確認する前に確認してください
  6. [OK]をクリックして、問題を解決します。
4
Pampam

割り込みプログラムを終了するためにAlt+F4を使用するヒントはうまく機能しました。終了したばかりのプログラムをSysInternalProcessManagerでトレースする代わりに、次のようにプログラムをトレースしました。

  1. Task managerを開く
  2. 開いているプロセスのスクリーンショットを撮る
  3. ブラウザ、メールなどに切り替えて、「フォーカスが失われるのを待つ」
  4. Alt+F4を押して、割り込みプログラムを終了します
  5. Task managerに移動し、開いているプロセスとスクリーンショットを比較します
  6. 現在「欠落」しているプロセスが問題の原因でした

私の場合はtwcu.exeで始まり、TP-Link Configuration toolで始まるプログラムでした。外部のWIFI-USBスティックで使用されます。ここ( twcu.exe at file.net )およびここ( twcu.exe at computerbase.de [german] )で報告されているように、TP-Link Configuration toolは必要ありませんWIFI接続自体。 Autostart(msconfig> system start)から削除し、コンピューターを再起動しましたが、それでもWIFIに問題なく接続し、フォーカスが失われました。

3
Tobias

私は削除しました NMBgMonitor.exeスタートアップサービスから問題を解決します。

Googleでも同じ問題が発生しましたChromeウィンドウが数秒間フォーカスを失ってから戻ってきました。タスクマネージャーの[サービス]タブを見ると、フォーカスが失われるたびにNMBgMonitorがアクティブであることがわかりました(Neroと関係があります)。

2
funk79

私の場合、そしておそらくすべてのレノボPC /ラップトップの場合、問題はレノボsvcguihlpr.exeにあり、数分ごとに動作し、UIが表示されずにフォーカスを取得しました...このプロセスは、管理用の素晴らしいUIを提供するLenovo Access Connectionsアプリですwifiとブロードバンドネットワーク。私はそれを使用したことがなく、タスクバーからuiを削除しましたが、それでも動作します...

今日私はそれが問題であることを発見し、それをアンインストールしました!

とても楽しい..

ちなみに、私は可能な限り最も馬鹿げたことをして、携帯電話を取り、画面のビデオ録画を開始して、タスクマネージャーを実行し、作業を続けました。フォーカスが失われると、1秒待って、レコードを停止しました。どのプロセスが上に移動したかを確認したところ、svcguihlprが1秒未満上にありました。

他の人の役に立つことを願っています。

2
Oded Maimon

私にはこの問題があり、タイミングはランダムだと思いましたが、ランダムではありませんでした。

私の場合、それは次のように取るに足らないことでした:wallpaper changes!
私は壁紙としてスライドショーを持っていて、それが変わるたびに、フォーカスはデスクトップに行きます!

これが誰かがコメントを読んでいる場合に当てはまることを願っています。

(Microsoftがこれを修正するかどうかはわかりません。ImがWindows 10の最新ビルド(1803-17134.112)に問題があるためです。)

2
Motassem MK

窓も常にフォーカスを失っていました。ロガーを使用して、WerSvcの追跡に成功した誰かが問題を引き起こしていることを確認します。それが実際にWindowsエラー報告サービスである場合でも、Windowsタスクマネージャー-サービス-サービスでそれを無効にしようとしました。

その後、フォーカスを失う問題が停止しました。

たぶんあなたはそれを試すことができます。

1
Leon

この問題は私を狂わせました!それで、私は自分のプログラムからだれが何に焦点を当てているのかを教えてくれるプログラムを書くことにしました。 Age of Empiresをプレイしていて、ゲームがランダムにデスクトップに移動するとき、本当に迷惑です。

これが調査結果です...

ベライゾン!はい、Verizonヘルパーアプリをインストールしましたが、それが原因でした。
移動-コントロールパネル->プログラムと機能
そしてVerizonに関連するものをすべてアンインストールします。

私は通常Vzで始まるプログラムの名前を忘れます...そして、サービスもIWがあります...自分のマシンにあるものをそれらから殺すのを待つことができなかったので、正直に忘れてしまいます(それは私を狂気に駆り立てました) )、ただしVerizonアプリをアンインストールすると、問題は解消されます。

1
Neal

アクティブウィンドウのフォーカスが数秒ごとに失われるという問題がありました。入力を続けるには左クリックする必要があります。狂気。

ウィンドウのウィンドウの端の周りの領域の配色は、発生するたびに変わることに気づきました。これは、実際に入力しなくてもフォーカスが失われたことを確認する簡単な方法のようです。

そこで、Windowsのタスクマネージャを起動して、[プロセス]タブをクリックしました。しばらく見てみると、Adobeデスクトップマネージャーが、色のフォーカスの変化を失うと同時に、リストから外れ、リストに表示されていることがわかりました。

Adobe Creative Cloudデスクトップアプリケーションをダウンロードして再インストールしました。 (注:アンインストールできなかったため、ダウンロードを既存のものの上にインストールしました。これが機能しない場合、Creative Cloudをアンインストールするための特別なプログラムがあります。)これで問題は完全に解決しました。

Creative Cloudをお持ちの方は、これがプログラムかもしれません。ない場合は、処理タブと、フォーカスが失われるたびにウィンドウの端の周りの色が変化することを確認すると、原因を見つけるのに役立ちます。

1
JBMenzies

タスクマネージャーを使用してバックグラウンドプロセスを探しましたが、Synapticsタッチパッドが原因でした。

「ドライバー」は常にオンでしたが、Synapticsによる別のプロセスが数秒ごとにポップアップし、フォーカスが失われていました。

Synapticsとprestoをアンインストールしました。フォーカスを失うことはありません。

1
Cameron

Regedit(スタートボタン+ Rを押したままregeditを押します)で、HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundLockTimeout値を0から30d40に変更します。コンピュータを保存して再起動します。

1
Heikki Sonninen

私の場合は、Windowsのプロセスマネージャーに移動し、プログラムが常に起動して閉じられているかどうかを確認することで問題を修正しました。ダウンロードしたプログラム(Windows 8 Startと呼ばれていました)が7秒ごとに再起動していることに気づきました。私はそれに関連するすべてを削除しました、そしてそれはうまくいきました!

1
Ghais

GladinetやNuance Cloud Connectorなどのバックアップユーティリティを確認します。 (どちらもGladinetのエンジンを使用しており、この種の問題は2012年にすでにわかっていました。)彼らはExplorer.exe内でウィンドウレス/タスクレスDLLを実行しています。

0
tanitani

Samsung Galaxy S6は常に「Androidのアップグレード中」であり、充電のためにUSB経由で接続すると、フォーカスの問題が10秒ごとに失われましたが、エクスプローラーウィンドウが前面に表示されませんでした。フォーカスの問題が解消した後、USBポートを変更し、電話から「USB充電」モードに選択しました。

しかし、常に「Androidのアップグレード」の問題があり、解決する必要があります。

0
TarmoPikaro

私は同じ問題を抱えています。私の場合、それはWindows XPプログラムであり、標準ユーザーアカウントで実行されていました。実行するには管理者の高度な権限が必要でした。そのため、バックグラウンドで実行されていましたが、表示されませんでした。頻繁に現在のウィンドウ(Windowsエクスプローラー、Firefox、およびその他のプログラム)のフォーカスを盗みました。これは非常に煩わしいものです。 happy droid によってfocus.exeを使用し、原因を特定しました。 Windows Focus Logger 同じ目的。

0
Kamal