活动窗口(程序)意外地失去了对Windows 7的关注


23

我当前正在使用某种方法,将焦点从Windows中的活动窗口(活动程序)转移(窃取)焦点。

我在描述了同样的问题这个问题,也有一些例外:

  1. 我在(至少)两台不同的计算机上观察到了此行为,因此这不是特定于计算机的。

  2. 提到的其中一台计算机具有Windows 7 HE 64位,另一台计算机具有Windows 7 Pro 32位,因此此问题并不特定于Windows的特定版本或特定的硬件平台。

  3. 有时焦点会永远消失(必须单击窗口以继续使用它),有时焦点会转移到另一个后台进程(?),并在2-3秒后返回。

  4. 过去几周来,我没有在这些计算机上安装任何新东西(除了Windows Update和其他自动更新,例如Chrome浏览器自动更新),当然提到的问题在上次安装后好几天开始发生

我计算机的当前行为确实很奇怪,整个事情变得很烦人。例子:

  1. 我在Chrome中选择了一些文本,实际上看到的是,选择颜色从蓝色(在活动窗口中选择)变为灰色(在非活动窗口中选择)。

  2. 我正在用Word,Notepad ++或Chrome中的Gmail编辑电子邮件中的某些文档,并且编辑过程要么停止几秒钟(当焦点转移时),然后永久终止(焦点永远消失)。

我有活跃的,更新的且正在运行的Microsoft Security Essentials,它没有报告任何异常。

我有一种感觉,它最常发生在Google Chrome中。刚开始我很确定,几乎准备好指责此浏览器的最新更新。但是事实证明,我在Chrome中经常注意到这一点,因为这是我最常用的程序。

是否有人有类似问题或有任何想法或想法,是什么原因引起的或如何解决?


2
安全模式下(是否有网络连接)也会发生此问题吗?单击开始msconfig,然后选择启动选项卡。那里有什么节目?
and31415 2014年

1
很难“抓住”描述的问题,因为它不会经常发生。例如-过去两天没有跟踪。因此,我将不得不在安全模式下工作几天才能尝试“捕获”此问题。但是,谢谢你的主意。另外,请参阅下面的答案。
trejder 2014年

Answers:


17

正如and31415的建议,我仔细查看Startupmsconfig程序选项卡中的内容,但没有发现异常。

现在很明显,这是由某些外部程序(尽管以前没有注意到,尽管我最近没有安装任何新东西)而不是Windows引起的,占99%。这对我来说是最重要的一点。

我在Google上搜索了一下,并得到了一些想法/建议,即当我发现某个焦点被窃取后,我应该立即尝试按Alt+ F4。这应该退出可能导致此焦点隐身的过程。然后,我可以尝试使用Process Monitorfrom Sysinternals包来跟踪刚刚退出的过程。

这可能使我对导致此问题的原因有所了解。


1
从中msconfig,选择“ 服务”选项卡,然后启用“ 隐藏所有Microsoft服务”。也检查一下。这是一篇可能有用的正式KB文章:执行干净启动,以确定后台程序是否干扰了您的游戏或程序。另外,即使您没有发现任何异常,我认为列出所有第三方启动项目和服务也是一个好主意。
and31415

@trejder,您是否需要下载technet.microsoft.com/en-us/sysinternals/bb896645或其他内容,还是指Windows的内置功能,可让您查看最近退出的进程列表?谢谢!
瑞安

@Ryan Nope,作为答复- Process Monitor来自Sysinternals包装。
trejder

2
使用时Process Monitor,请转到“过滤器”菜单并添加以下过滤器:Process Exit然后不排除“操作”。我的触摸板驱动程序抛出错误,并尝试使用Windows问题报告进行报告。感谢%#!@提供这些问答网站,否则我会毁了我的笔记本电脑。
Daryl Van Sittert '16

我只是发生在我身上。原来是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
好主意和漂亮的代码。但是,由于这是一个供用户而非开发人员使用的网站(这是超级用户,而不是堆栈溢出),因此您应该对非C#开发人员如何运行您的代码添加一些解释?
trejder 2016年

我为此创建了一个改进版本,并将其放入我自己的答案中,包括您问题的答案@trejder。
Palec'7

可能将其转换为不需要C#编译器的PowerShell?
phuclv

@phuclv一定要继续:D
奥马尔·阿尔沙克

7

有问题的后台任务可能会夺走焦点。它会打开一个窗口,该窗口会窃取焦点,并且很快就会关闭,但焦点不会返回。最近,Microsoft Office出现了一个错误

要发现此类进程,可以使用诸如Window Focus Logger镜像)之类的工具或类似于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。需要.NET 3.5或更高版本。

您可以使用csc.exe.NET Framework安装随附的C#编译器()对其进行编译,然后运行生成的可执行文件以获取开始(绿色)或结束(红色)进程的实时日志。使用Ctrl+ C终止它。


要查找编译器,请运行where /R %windir%\Microsoft.NET csc.exe。无论是32b还是64b,都应从安装的最新.NET版本中选择一个。保存C#代码Program.cs并编译为Program.exe

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

这段代码给我错误“找不到类型或名称空间'Process'”。因此,我需要添加对System.dll的引用。
威尔逊

奇怪,@威尔逊。您正在使用哪个版本的csc.exe?
Palec

1
顺便说一句,在命令行会csc.exe -reference:System.dll Program.cs呢。请参见-reference C#编译器选项docs
Palec'Mar

我有Microsoft (R) Visual C# Compiler version 2.6.0.62329 (5429b35d)
威尔逊

该版本似乎来自VS 2017的较旧版本(或其构建工具)。我无法重现当前VS 2017的问题(csc -version15.6.4,2.7.0.62715(db02128e))。不过,仍然感谢您分享问题及其解决方案。
Palec

4

就我而言,是wermgr.exe(Windows错误报告)一次又一次启动。我按照以下解决方案阻止它自动启动,从而解决了该问题。

  1. 开始按钮->在搜索框中,输入操作中心 -> Enter
  2. 单击维护旁边的箭头以展开。
  3. 在“ 检查问题报告的解决方案”下,单击“ 设置”
  4. 单击“ 为所有用户更改报告设置”
  5. 每次出现问题时,请检查旁边的单选按钮。在检查解决方案之前请问我
  6. 单击确定,确定出路。

3

使用Alt+F4退出中断程序的提示效果很好。相反,跟踪与刚刚退出程序SysInternalProcessManager,我没有跟踪的程序如下:

  1. 打开 Task manager
  2. 截屏打开流程
  3. 切换到浏览器,邮件等,然后“等待焦点丢失”
  4. Alt+F4退出中断程序
  5. 前往Task manager比较开放流程和屏幕截图
  6. 现在的“丢失”过程引起了问题

就我而言,是twcu.exe一个以开头的程序TP-Link Configuration tool。由外部WIFI-USB记忆棒使用。如此处(在file.net上的twcu.exe)和此处(在computerbase.de [german]上的twcu.exeTP-Link Configuration tool所报告的那样,WIFI连接本身并不需要。我从自动启动(msconfig> system start)中将其删除,重新启动计算机,它仍然可以完美地连接到WIFI-焦点丢失问题也消失了!


2

NMBgMonitor.exe从启动服务中删除以解决此问题。

我也遇到了同样的问题,谷歌浏览器窗口失去焦点几秒钟,然后又返回。通过查看任务管理器的“服务”选项卡,我注意到,每当失去焦点时,NMBgMonitor就会处于活动状态(这与Nero有关)。


2

以我为例,可能还有所有lenovo pc /膝上型电脑的情况,问题是lenovo svcguihlpr.exe每隔几分钟开始工作,并且在没有显示UI的情况下进行聚焦...此过程是Lenovo Access Connections应用程序,为管理提供了很好的ui wifi和宽带网络..我从没用过,我什至从任务栏上将其ui删除,但它仍然可以工作...

今天,我发现这是问题所在并将其卸载!

玩得很尽兴..

顺便说一句,我通过做最愚蠢的事情发现了它,拿起我的手机,开始录制视频,然后运行任务管理器,然后继续我的工作..一旦失去焦点,我就会等一秒钟,停止记录并检查哪些进程向上移动,svcguihlpr在顶部不到一秒钟。

希望对别人有帮助。


对于没有问题xD说“非常有趣”很有趣
Motassem MK

2

我遇到了这个问题,我以为计时是随机的,但不是这样,

就我而言,这很琐碎:墙纸变了!
我有一张幻灯片作为墙纸,每当它改变时,焦点便移到桌面上!

我希望阅读评论的人可能会遇到这种情况,并且事情就这么简单。

(我不知道微软是否会解决此问题,因为我在最新版本的Windows 10(1803-17134.112)上存在问题)


1

我也经常失去焦点。阅读到有人设法使用记录器来跟踪WerSvc导致问题。即使实际上这是Windows错误报告服务,但我还是尝试在Windows任务管理器-服务-服务中将其禁用。

然后失去焦点的问题就停止了。

也许你们可以尝试一下。


1

这个问题使我发疯!因此,我决定编写一个程序来告诉我谁或什么使我的程序失去了重点。当您玩《帝国时代》并且游戏随机进入桌面时,真让人讨厌。

这是调查结果...

Verizon!是的,我已经安装了一些Verizon助手应用程序,这是罪魁祸首!
进入-控制面板->程序和功能,
然后卸载与Verizon有关的所有内容。

我忘记了程序的名称,通常以Vz开头...,而且IW也有服务...我真的忘记了,因为我迫不及待地想从它们中杀死机器上的任何东西(这使我发疯了),但是当您卸载Verizon应用程序时,问题就消失了。


1

就我而言,我通过转到Windows进程管理器并检查是否有任何程序正在不断启动和关闭来解决该问题。我可以注意到,我下载的程序(我认为这是Windows 8启动)每7秒重新启动一次。我删除了与之相关的所有内容,并且一切正常!


1

我遇到的问题是活动窗口每隔几秒钟就会失去焦点。我必须单击鼠标左键继续输入。疯了

我注意到,每次发生时,窗户边缘周围的配色方案都会改变。这似乎是一种无需进行实际输入即可看到失去焦点的简便方法。

因此,我启动了Windows任务管理器,然后单击“进程”选项卡。观看了一会儿之后,我可以看到Adobe桌面管理器在失去焦点变化的同时脱颖而出并出现在列表中。

我下载并重新安装了Adobe Creative Cloud桌面应用程序。(注意:我无法卸载它,所以我只是在现有的下载文件上安装了该下载文件。如果无法正常工作,则有一个特殊的程序可以卸载Creative Cloud。)这完全解决了我的问题。

对于使用Creative Cloud的用户,这可能是程序。对于那些没有这种感觉的人,看着处理标签以及每次失去焦点时窗户边缘周围的颜色变化可能会帮助您找到罪魁祸首。


1

我使用任务管理器查找后台进程,而Synaptics触摸板是罪魁祸首。

“驱动程序”一直处于运行状态,但是Synaptics的另一个过程每隔几秒钟就会弹出,并导致焦点丢失。

我卸载了Synaptics,嘿,presto,不再失去焦点!


1

在Regedit中(按住“开始”按钮+ R,然后键入regedit),将HKEY_CURRENT_USER \ Control Panel \ Desktop \ ForegroundLockTimeout值从0更改为30d40。保存并重新启动计算机。


0

检查备份实用程序,例如Gladinet或Nuance Cloud Connector。(两者都使用Gladinet的引擎,这种问题已在2012年被他们知道。)他们正在基于Explorer.exe运行无窗口/无任务的dll。


0

我的三星Galaxy S6一直处于“升级Android”状态,通过USB连接进行充电时,我每隔10秒就会失去焦点问题,但是前面没有弹出浏览器窗口。焦点问题消失后,我已经更改了USB端口并从电话选择了“ Usb Charging”模式。

但是持续存在的“升级Android”问题仍然存在,仍需要解决。


0

我也有同样的问题。我的情况是在标准用户帐户上运行的Windows XP程序。它需要管理员提升的权限才能运行。因此,尽管它确实在后台运行,但我没有看到它,但是它经常偷走了我当前窗口(Windows资源管理器,firefox和其他程序)的焦点。这很烦人。我通过快乐机器人使用focus.exe 来确定罪魁祸首。您也可以出于相同目的使用Windows Focus Logger


-1

我遇到了同样的问题。我的笔记本电脑有点旧。它具有2GB的RAM和Window7。运行一个小时后,每次都会发生相同的事情。我注意到笔记本电脑过热时会发生这种情况。解决方案:安装自动RAM Cleaner软件。安装自动RAM清洁器已经一个月了,我再也没有遇到这个问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.