一种定位程序失去焦点的办法,元凶竟然是tx电脑管家!

一。开头

玩游戏的人可能会遇到玩着玩着游戏就弹出去了的情况,相当影响游戏体验。其实原因就是游戏的焦点被另外一个程序夺走了。一种简单的办法就是把全屏游戏设置为窗口化,这样游戏可能就不会弹出去,但是仍然会失去焦点,体现在游戏对键盘无响应。这个时候需要再点一下游戏窗口,才能又获取到焦点。

还有修改注册表的方法,可以参考这个帖子,我暂时还没试过:https://zhuanlan.zhihu.com/p/33227113

不过本文主要讲的是一种特殊情况,上面那帖子里也说了,到底是哪个程序把我们的焦点夺走了呢,有一个叫whoareyou.exe的程序,可以查出答案。直接双击运行这个程序,然后把它放那不管它,过一会儿看里面都显示出哪些程序,就知道是谁夺走了焦点。

如上图,WindowsTerminal.exe就是运行whoareyou.exe的时候打开的命令行窗口,肯定不是它的锅啦。而红框里的这个东西,我肯定是没有运行的,所以就是它夺走了我的焦点。

注意:如果你运行了whoareyou之后,你又去打开或者切换到别的界面,那它们都会显示到这个命令行窗口里,所以你需要自己去辨别一下,哪些是由于你自己的操作打开的东西,把它们排除。

二。重点

本文的重点并不是whoareyou,一般来说whoareyou就可以找到元凶了,不过我遇到的就是那个特殊的情况,就是上面那个图里的vcredist_x86.exe,这是一个vc运行库安装程序,然而它不可能是元凶啊,它自己是不可能主动运行的,肯定是有别的程序(元凶)去运行它。并且如果我把它删除了,元凶还会再把它下载下来,然后运行它。

 让人纠结的是,它会不断地被运行,间隔时间从十几分钟到几十分钟不等。从安装日志里面可以看到它每次的运行时间。至于它为啥要运行这么多次呢,因为我电脑上已经装了一个比它新的运行库,没法再装这个旧的了,所以会装失败,然后就不停地装,真是xx。

 我一开始想着是不是在任务计划里面能找到它,结果任务计划里的运行时间跟上面的日志的时间都对不上。

再后来突然想到,如果我把vcredist_x86.exe删除了,元凶会再把它下载下来,那下载下来的时候,得写硬盘啊,如果我提前把资源监视器打开,并且按写磁盘的速度降序排序,那下载vcredist_x86.exe的那一项很可能会排到前面,则最左边那一列“磁盘活动”就是元凶的进程名了。

 当然,我不可能一直盯着看,它这个运行时间也不确定,盯着十几分钟也够无聊的,问题是有时候可能几十分钟甚至更久,所以我们可以搞个程序来监测,程序逻辑非常简单,首先我把C:\Users\kv183\AppData\Local\Temp\vcredist_x86.exe删除,然后运行我的程序,并且打开资源监视器,让资源监视器显示在屏幕上。

而我的程序会每0.5秒监测一下这个文件是不是又产生了,一旦发现它产生了,就开始截屏,1秒截一张,截个50张。(注,这些参数都可以根据需要自己调整),为啥要截50张呢,因为资源监视器显示的内容好像不是那么实时的,比如程序已经下载到硬盘上了,它可能过个一两秒才显示在资源监视器里。

不过有一点要注意的是,截图归截图,别立马把截的图写到文件里,因为一旦你写文件,那你这个程序自已就会出现在资源监视器里啦,尽量不要影响我们的监测,截了50张图之后一起写。

先上图。

 可以看到,元凶就是腾迅电脑管家!

上代码,用python写的,需要安装的三方库有numpy,opencv-python,pillow。

import cv2 as cv
import numpy as np
from PIL import ImageGrab
import time
import os

file_path = r'C:\Users\kv183\AppData\Local\Temp\vcredist_x86.exe'
found = False
while not found:
    if os.path.exists(file_path):
        found = True
        break

    time.sleep(0.5)

imgs = []
for i in range(50):
    img = ImageGrab.grab(bbox=(0, 0, 1920, 1080))
    img = np.array(img.getdata(), np.uint8).reshape(img.size[1], img.size[0], 3)
    img = cv.cvtColor(img, cv.COLOR_RGB2BGR)
    imgs.append(img)
    time.sleep(1)

img_dir = r'd:\catch_you'
os.makedirs(img_dir, exist_ok=True)

for index, img in enumerate(imgs):
    cv.imwrite(os.path.join(img_dir, '{:02d}.jpg'.format(index)), img)

-------------------------------------

更新:

后来有朋友私信我,腾迅电脑管家的这个问题升到15.2.22559.217及以上的版本就能解决啦,我试过了,确实可行!

猜你喜欢

转载自blog.csdn.net/ogebgvictor/article/details/127931721