Python监视用户计算机桌面窗口焦点的变化情况

代码运行后,可以实时监视用户计算机桌面上拥有焦点的窗口,如果焦点有切换就会给出提示。

from ctypes import *

from time import sleep

from datetime import datetime

#方便调用Windows底层API函数

user32 = windll.user32

kernel32 = windll.kernel32

psapi = windll.psapi

#实时查看当前窗口

def getProcessInfo():

    global windows

    #获取当前位于桌面最顶端的窗口句柄

    hwnd = user32.GetForegroundWindow()

    pid = c_ulong(0)

    #获取进程ID

    user32.GetWindowThreadProcessId(hwnd, byref(pid))

    processId = str(pid.value)

    #获取可执行文件名称

    executable = create_string_buffer(512)

    h_process = kernel32.OpenProcess(0x400|0x10, False, pid)

    psapi.GetModuleBaseNameA(h_process, None, byref(executable), 512)

    #获取窗口标题

    windowTitle = create_string_buffer(512)

    user32.GetWindowTextA(hwnd, byref(windowTitle), 512)

    #关闭句柄

    kernel32.CloseHandle(hwnd)

    kernel32.CloseHandle(h_process)

    #更新最近两个窗口的信息

    windows.pop(0)

    windows.append([executable.value.decode('gbk'),windowTitle.value.decode('gbk')])

def main():

    global windows

    windows = [None, None]

    while True:

        getProcessInfo()

        #如果用户切换窗口则进行提示

        if windows[0] != windows[1]:

            print('='*30)

            print(str(datetime.now())[:19],windows[0],'==>',windows[1])

        sleep(0.2)

if __name__ == '__main__':

    main()

部分运行结果如下:

2016-08-14 09:12:52 ['Explorer.EXE', ''] ==> ['pythonw.exe', 'focusSwitch.py - C:/Python35/focusSwitch.py (3.5.1)']

==============================

2016-08-14 09:12:56 ['pythonw.exe', 'focusSwitch.py - C:/Python35/focusSwitch.py (3.5.1)'] ==> ['QQBrowser.exe', '微信公众平台']

==============================

2016-08-14 09:13:11 ['QQBrowser.exe', '微信公众平台'] ==> ['Explorer.EXE', '']

==============================

2016-08-14 09:13:12 ['Explorer.EXE', ''] ==> ['pythonw.exe', '*Python 3.5.1 Shell*']

==============================

2016-08-14 09:13:22 ['pythonw.exe', '*Python 3.5.1 Shell*'] ==> ['Explorer.EXE', '']

==============================

2016-08-14 09:13:32 ['Explorer.EXE', ''] ==> ['pythonw.exe', '*Python 3.5.1 Shell*']

温馨提示:单击文章顶部作者名字旁边浅蓝色的“Python小屋”进入公众号,关注后可以查看更多内容!

欢迎转发给您的朋友,或许这正是Ta需要的知识!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要在Python监视屏幕变化,可以使用Pillow库和PyAutoGUI库。Pillow库可以用来获取屏幕快照,而PyAutoGUI库可以用来比较两次屏幕快照之间的差异。下面是一个简单的示例代码: ```python from PIL import Image import pyautogui # 获取屏幕分辨率 screenWidth, screenHeight = pyautogui.size() # 获取屏幕快照 previousImage = ImageGrab.grab() while True: # 获取屏幕快照 currentImage = ImageGrab.grab() # 比较两次屏幕快照之间的差异 difference = pyautogui.locateOnScreen(currentImage, previousImage) if difference is not None: # 屏幕发生了变化 print('Screen has changed!') # 将当前屏幕快照设置为上一次屏幕快照 previousImage = currentImage ``` 在上面的代码中,我们使用了一个while循环来不断获取屏幕快照并比较两次屏幕快照之间的差异。如果两次屏幕快照不同,则说明屏幕发生了变化。你可以根据具体需求来修改代码。 ### 回答2: Python可以使用第三方库来监视屏幕变化。其中,一个常用的库是PyAutoGUI。 PyAutoGUI是一个可以模拟鼠标和键盘操作的库,它提供了一些可以监视屏幕变化的函数。通过调用PyAutoGUI的screenshot函数,可以获取屏幕的截图。然后可以将截图保存为图像文件,或者通过其他方式进行处理。 以下是一个使用PyAutoGUI监视屏幕变化的简单示例: ```python import pyautogui def monitor_screen_change(): previous_screenshot = None while True: current_screenshot = pyautogui.screenshot() # 获取当前屏幕截图 if previous_screenshot is not None: if current_screenshot != previous_screenshot: # 比较前后两个截图是否相同 print("屏幕发生变化!") previous_screenshot = current_screenshot # 可以在这里设置检测频率,例如使用time模块的sleep函数来暂停一段时间 monitor_screen_change() ``` 在这个示例中,程序会不断获取屏幕的截图,并将当前截图与前一个截图进行比较。如果两个截图不相同,就会输出"屏幕发生变化!"的提示。 需要注意的是,这个示例只是一个简单的监测屏幕变化的例子。根据具体需求,可能还需要对截图进行处理、设置检测频率等。同时,PyAutoGUI也提供了其他的函数和功能,可以进一步进行屏幕监视和操作。 ### 回答3: Python可以使用第三方库实现屏幕变化监视。比较常用的库有`pyautogui`和`opencv`。 `pyautogui`库提供了图像识别和鼠标键盘控制的功能,可以用于监视屏幕变化。可以使用它提供的`locateOnScreen()`函数在屏幕上搜索特定的图像,如果找到了该图像,就说明屏幕发生了变化。通过多次使用该函数,可以监视不同部分的屏幕变化。 另一个选择是使用`opencv`库进行屏幕变化监视。`opencv`是一个计算机视觉库,可以用于图像处理和分析。可以使用`cv2`模块的`cv2.imread()`读取屏幕截图,然后将其转换为灰度图像。之后,将当前屏幕截图和之前的截图进行比较,如果它们之间有足够的差异,就说明屏幕发生了变化。 综上所述,无论是使用`pyautogui`还是`opencv`,都可以在Python中实现屏幕变化监视。这些库可以帮助我们捕捉屏幕上的图像并做进一步的处理,从而实现监视屏幕变化的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值