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需要的知识!

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2016-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java爬坑系列

C语言dll文件的说明以及生成、使用方法

  最近在搞一些小项目,由于要涉及到跟其它语言进行交互,动态链接库变成了不二的选择。为此也查阅了很多资料,将动态链接库的相关知识在此做一个整理。 一、动态链接...

58060
来自专栏跟着阿笨一起玩NET

js的alert和confirm美化

window对象的alert和confirm标准方法在不同浏览器的显示效果不太相同,有个相同点是都不是很美观。我们的想法是使用js和css分别仿照它们,提供另一...

24220
来自专栏前端那些事

async和enterproxy控制并发数量

聊聊并发与并行 并发我们经常提及之,不管是web server,app并发无处不在,操作系统中,指一个时间段中几个程序处于已经启动运行到完毕之间,且这几个程序都...

366100
来自专栏蓝天

三种web性能压力测试工具http_load webbench ab小结

题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://www.acme.com/sof...

21410
来自专栏非著名程序员

Android Studio详细安装流程和配置、主题

? 原文作者:欧神. 杨 / OCN Yang 原文地址:http://ocnyang.com/2016/09/13/AndroidStudioSet/ 特别...

28660
来自专栏Django中文社区

评论

创建评论应用 相对来说,评论其实是另外一个比较独立的功能。Django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码写到这个应用里。我们...

66660
来自专栏python小白到大牛

学习Python一个星期用Scrapy爬取天气预报实践一番

写一个真正意义上一个爬虫,并将他爬取到的数据分别保存到txt、json、已经存在的mysql数据库中。

20520
来自专栏java架构师

跨域请求数据解决方案整理

跨域请求数据解决方案主要有如下解决方法: JSONP方式 表单POST方式 服务器代理 Html5的XDomainRequest Flash request 分...

36070
来自专栏数据小魔方

R语言爬虫实战——知乎live课程数据爬取实战

本文是一篇R语言爬虫实战练习篇,同样使用httr包来完成,结合cookies登录、表单提交、json数据包来完成整个数据爬取过程,无需书写复杂的xpath、cs...

48460
来自专栏FreeBuf

玩转Google的XSS游戏

作者 Taskiller Hi基友们,本文主要描述Google前些天发布的关于XSS漏洞游戏的玩法,地址在这里。 https://xss-game.appsp...

267100

扫码关注云+社区

领取腾讯云代金券