使用C#解决部分Win8.1系统窗口每隔几秒失去焦点的问题

使用了Win8.1 With Update 1后,发现重启系统后,当前激活的窗口总是每隔几秒失去焦点,过0.5~1秒焦点回来,导致输入无法正常工作,严重影响使用心情和效率。

在网上找了很久,也没找到相应的解决办法,大多提供的是关闭计划任务中禁用阿里巴巴的自动更新任务(http://www.paopaoche.net/gonglue/21442.html)。可是这个方法对我来说并不管用,而且那种是1小时运行一次,我的系统是每隔几秒就会出现一次。

忍受了1周,忍无可忍,于是决定自己解决。

窗口失去焦点,无非就是别的窗口将焦点抢占过去,如果能找到是什么程序抢占了窗口焦点,禁用之就可以解决。

因为是解决Windows问题,使用微软自家的C#解决问题。

打开VS创建C# Windows应用程序工程,使用一个Lable显示信息,一个Timer定时获取当前激活窗口(毫秒级),并且将信息显示到Lable即可。当前台窗口焦点改变,从Lable中可以看到当前前台程序。

最终发现,是Broadcom 802.11 Network Adapter Wireless Network Tray Applet抢占了窗口焦点。

网上对其作用解释为:安装在一些使用无线网卡的戴尔计算机上。它产生一个系统托盘图标,通过它,用户可以直接访问无线网卡的各种配置功能。

看来没什么作用,将其在任务管理器启动项中禁用,重启系统,无线网卡功能正常,问题完美解决。

附上监控程序部分逻辑代码(未使用任何编码规范,未加任何注释),窗口代码使用窗口设计器生成即可。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern IntPtr GetForegroundWindow();//获取当前激活窗口

        [DllImport("user32", SetLastError = true)]
        public static extern int GetWindowText(
        IntPtr hWnd, //窗口句柄
        StringBuilder lpString, //标题
        int nMaxCount  //最大值
        );

        [DllImport("user32.dll")]
        private static extern int GetClassName(
            IntPtr hWnd, //句柄
            StringBuilder lpString, //类名
            int nMaxCount //最大值
        );

        public Form1()
        {
            InitializeComponent();

            timer1.Start();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            IntPtr myPtr = GetForegroundWindow();

            // 窗口标题
            StringBuilder title = new StringBuilder(255);
            GetWindowText(myPtr, title, title.Capacity);

            // 窗口类名
            StringBuilder className = new StringBuilder(256);
            GetClassName(myPtr, className, className.Capacity);

            label1.Text = myPtr.ToString() + "\n" + title.ToString() + "\n" + className.ToString();
        }
    }
}

使用C#解决部分Win8.1系统窗口每隔几秒失去焦点的问题,布布扣,bubuko.com

时间: 2024-10-24 06:33:04

使用C#解决部分Win8.1系统窗口每隔几秒失去焦点的问题的相关文章

使用C#解决部分Win8.1系统窗体每隔几秒失去焦点的问题

使用了Win8.1 With Update 1后,发现重新启动系统后,当前激活的窗体总是每隔几秒失去焦点.过0.5~1秒焦点回来.导致输入无法正常工作,严重影响使用心情和效率. 在网上找了非常久,也没找到对应的解决的方法.大多提供的是关闭计划任务中禁用阿里巴巴的自己主动更新任务(http://www.paopaoche.net/gonglue/21442.html). 但是这种方法对我来说并无论用,并且那种是1小时执行一次.我的系统是每隔几秒就会出现一次. 忍受了1周,忍无可忍,于是决定自己解决

ubuntu之路——解决ubuntu+win8双系统循环进入启动界面导致无法启动win8的问题

几个月前装的ubuntu14.04之后,由于引导不当的问题,启动界面中启动项win8一直无效,总是循环进入启动项选择界面. 之前在ubuntu中文论坛找相关问题,最后在一个陈年旧帖中发现在启动界面中按"e"编辑启动项后引导启动,总算成功了.不过每次重启都会回复到之前的状态,如果每次去启动都需要去修改,那就悲剧了=  =.任何启动问题,基本都可以在ubuntu下修改grub解决. 下面给出我在ubuntu下成功引导win8的方法. 启动ubuntu,进入/boot/grub/目录 使用s

关于WIN8.1系统第三方软件找不到映射的网络盘的盘符的解决办法

本人换了WIN8.1系统后,用第三方软件(如Solidworks)直接打开映射的网络盘里的文件时,却找不到映射的网络盘的盘符(直接打开"我的电脑"是可以看到的) 通过几天的找寻终于在一个国外网站上找到了解决办法,现分享给朋友们: 打开注册表: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System 找到 Key: EnableLUA 把Value data的值从1改成 0,并重启电脑即可!

win8.1系统开始屏幕添加锁屏按钮的详细的方法

我们在win8电脑的使用中,有小伙伴在使用中有锁屏的功能的方法,这对我们的操作时很有帮助的,今天看到有小伙伴在使用中在开始菜单中出现了没有锁屏的情况,这样的情况我们怎么解决呢,今天小编就来跟大家分享一下win8.1系统开始屏幕添加锁屏按钮的详细的方法,一起跟小编来看看详细的方法吧. 具体的方法和详细的步骤如下: 1.首先来到桌面,右键点左下角图标打开菜单,选择"控制面板": 2.来到"控制面板"后,在"查看方式"为"类别"的情

解决方法:64位系统-未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序

原文:解决方法:64位系统-未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"提供程序 win7或win8 64位下调试程序,出现这样的错误提示:未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序 解决方法如下: 方法一:“设置应用程序池默认属性”/“常规”/”启用32位应用程序”,设置为 true. 如下图所示: 方法二:生成->配置管理器->平台->点击Any Cpu选项卡->新建->新建平台->X

win8以上系统查看iis网站进程内存占用情况

由于win8以上系统在任务管理器中已经屏蔽了具体的IIS网站的进程,在进程以及详细中无法区分是哪个站点了,所以我们需要先知道各站点对应的进程pid,然后再到任务管理器中根据具体的pid查看资源占用情况. 具体操作方法: 1.win微标+x,选择 命令提示符(管理员)(A) 2.在cmd窗口中输入下面命令,可以直接复制,即可查看所有运行中的站点的pid: c:\Windows\System32\inetsrv\appcmd list wp 注意事项: 1.命令提示符必须是管理员权限 2.如果输入命

win8 &win10系统下Guest 帐号本地主机登录

win8系统下启用Guest帐户,但发现无法实现本地主机登录, 输入.\guest及密码后,提示该登录方式被禁用. 故障解决方法: 因为Guest帐户默认情况下被本地安全策略禁止了从本地登录,如下图所示, 将guest从拒绝本地登录的列表中删除后即可实现从本地主机登录Guest, win10系统同理. win8 &win10系统下Guest 帐号本地主机登录

在Win8.1系统下如何安装运行SQL Server 2005 (以及安装SQL Server 2005 Express打补丁)

博主最近在Win8.1上安装SQL Server2005,不料每每到报错(为此博主不惜重装了系统) 后来发现在Win8.1上需要替换两个文件,这才顺利解决这个问题. http://www.ithome.com/html/win8/57118.htm 按正常情况,在Win8/Win8.1系统下安装微软的SQL Server 2005套件会存在兼容问题,即使安装完,最后的结果就是导致其服务项无法正常启动. 如果用户创建使用的项目非要按照SQL Server 2005的标准进行运行和调试情况下,那如何

用u盘和iso镜像文件装win8.1系统

原料: 1.老毛桃U盘启动盘PE工具 2.win8.1 ISO格式文件(本人使用的是WIN8.1微软官方最终64位简体中文专业版,可使用'百度云搜'搜索) 方法: 1.开机进入u盘(不懂谷歌),选择[01]运行老毛桃win03PE2013增强版,回车. 2.进入到PE系统,将下载好的win8.1系统解压(不要放到u盘的文件夹里),并且将文件名为"bootmgr"的文件重新命名为win8mgr(这个必须重命名,不然无法完成安装),然后重启. 3.选择[11]安装原版win7/win8(非