#coding=utf-8__author__ = 'Administrator'__doc__ = '''
pythonwin中win32gui的用法
本文件演如何使用win32gui来遍历系统中所有的顶层窗口,
并遍历所有顶层窗口中的子窗口
说明:
1.原来消息发送全部调用的SendMessage,以为优化大师内部是独立的线程处理,但并不是,所以避免等待,直接使用PostMessage
2.自动清除。
'''#优化大师窗口信息
YHDS_WINDOW_TITTLE = 'Wopti Utilities'
YHDS_WINDOW_CLSNAME = 'TWomccMainForm'#常量
CONST_YJYH = '一键优化'
CONST_YJQL = '一键清理'
CONST_DIALOG_CLASS = '#32770'
CONST_STATIC_CLASS = 'Static'#设置
DEBUG = Falseimport sys
import win32gui
import win32con
import time
import subprocess
from pprint import pprint
from datetime import datetimedef gbk2utf8(s):return s.decode('gbk').encode('utf-8')def get_window_attr(hWnd):#中文系统默认title是gb2312的编码title = win32gui.GetWindowText(hWnd)title = gbk2utf8(title)clsname = win32gui.GetClassName(hWnd)return title,clsnamedef get_dialog_text(hWnd):#获取对话框的内容信息childs = get_child_windows(hWnd)for h in childs:r_title, r_name = get_window_attr(h)if r_name != CONST_STATIC_CLASS:continuer_title = r_title.strip()if len(r_title) > 0:return r_titlereturn ''def get_top_dialogs():'''获取顶层的所有对话框:return:'''hWndList = get_top_windows()dialogs = []for h in hWndList:_, clsname = get_window_attr(h)if clsname == CONST_DIALOG_CLASS:dialogs.append(h)return dialogsdef show_dialog():'''显示所有的对话框窗体:param hWnd::return:'''show_windows(get_top_dialogs())def show_window_attr(hWnd):'''显示窗口的属性:return:'''if not hWnd:returntitle,clsname = get_window_attr(hWnd)print '窗口句柄:%s ' % (hWnd)print '窗口标题:%s' % (title)print '窗口类名:%s' % (clsname)print ''def show_windows(hWndList):for h in hWndList:show_window_attr(h)def get_top_windows():hWndList = []win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWndList)return hWndListdef demo_top_windows():'''演示如何列出所有的顶级窗口:return:'''hWndList = get_top_windows()show_windows(hWndList)return hWndListdef get_child_windows(parent):hWndChildList = []win32gui.EnumChildWindows(parent, lambda hWnd, param: param.append(hWnd),  hWndChildList)return hWndChildListdef demo_child_windows(parent):'''演示如何列出所有的子窗口:return:'''if not parent:returnhWndChildList = get_child_windows(parent)show_windows(hWndChildList)return hWndChildListdef find_window(hWnd,clsname = None, title = None):if not clsname and not title:return Falsedef notNoneCompare(l, r):if not l:return Truereturn l == rr_title,r_clsname = get_window_attr(hWnd)return notNoneCompare(clsname, r_clsname) and notNoneCompare(title, r_title)def find_window_from_list(hWndList, clsname = None, title = None):for h in hWndList:if find_window(h, clsname, title):return hdef demo_win32gui():hWndList = demo_top_windows()assert len(hWndList)parent = hWndList[20]#这里系统的窗口好像不能直接遍历,不知道是否是权限的问题hWndChildList = demo_child_windows(parent)print('-----top windows-----')pprint(hWndList)print('-----sub windows:from %s------' % (parent))pprint(hWndChildList)def wait_get_top_window(clsname = None, title = None):if not clsname and not title:#无效参数returnwhile True:hWndList = get_top_windows()hWnd = find_window_from_list(hWndList, clsname= clsname, title= title)print('---正在搜索--- %s' % (datetime.now()))if hWnd:return hWnd#每间隔两秒钟查询一次time.sleep(2)def get_window_by_title_filter(hWndList, nameFilter):for h in hWndList:r_title, r_name = get_window_attr(h)#标题中包含过滤器的任何一项,则认为找到for f in nameFilter:if f in r_title:return hdef autoYHDS():#x坐标和y坐标分别是,窗口内的坐标def click(hWnd, x, y):#低位是x,高位是ylParam = y << 15 | xwin32gui.PostMessage(hWnd, win32con.WM_LBUTTONDOWN, lParam)win32gui.PostMessage(hWnd, win32con.WM_LBUTTONUP, lParam)def get_center_pos(hWnd):l, t, r, b = win32gui.GetWindowRect(hWnd)x = (r - l) / 2y = (b - t) / 2return x,ydef click_window(hWnd):x, y = get_center_pos(hWnd)click(hWnd, x, y)def click_and_do(hWnd, const_condition, work_name='Work', work = None):print('开始%s...' % (work_name))click_window(hWnd)#等待任务执行完成while True:time.sleep(2)r_title, _ = get_window_attr(hWnd)if r_title == const_condition and win32gui.IsWindowEnabled(hWnd):print('%s:完成' % (work_name))returnprint('正在%s,请等待...' % (work_name))if work:work()def onekey_optimize(hWnd):click_and_do(hWnd, CONST_YJYH, CONST_YJYH)def get_ok_and_cancel(hWnd):childs = get_child_windows(hWnd)ok = get_window_by_title_filter(childs, ['确定','是'])cancel = get_window_by_title_filter(childs, ['取消','否'])assert ok and cancelreturn ok, canceldef onekey_clean_work():dialogs = get_top_dialogs()filter = ['Windows优化大师', '删除多个项目']dialog = get_window_by_title_filter(dialogs, filter)if dialog:#根据对话框的类型来点击确定还是取消ok, cancel = get_ok_and_cancel(dialog)text = get_dialog_text(dialog)if '注册表备份' in text:click_window(cancel)else:click_window(ok)def onekey_clean(hWnd):click_and_do(hWnd, CONST_YJQL, CONST_YJQL, onekey_clean_work)'''print('开始一键清理...')#点击开始执行一键清理操作click_window(hWnd)time.sleep(2)#等待优化大师分析,等待分析结果dialog = wait_get_top_window(clsname=CONST_DIALOG_CLASS, title='Windows优化大师')ok, cancel = get_ok_and_cancel(dialog)#点击确定删除扫描到的文件和文件夹click_window(ok)time.sleep(2)#确定将所有的内容移动到垃圾箱dialog = wait_get_top_window(clsname=CONST_DIALOG_CLASS, title='删除多个项目')ok, cancel = get_ok_and_cancel(dialog)assert ok and cancelclick_window(ok)print('完成一键清理')'''def debug():#dialog = get_onekey_clean_yhds()#print dialog#show_dialog()dialogs = get_top_dialogs()filter = ['Windows优化大师', '删除多个项目']dialog = get_window_by_title_filter(dialogs, filter)print get_dialog_text(dialog)sys.exit()if DEBUG:debug()hWndList = get_top_windows()yhds = find_window_from_list(hWndList, YHDS_WINDOW_CLSNAME, YHDS_WINDOW_TITTLE)if not yhds:print('优化大师应用程序未启动')sys.exit(0)childs = get_child_windows(yhds)yjyh = find_window_from_list(childs, None, CONST_YJYH)yjql = find_window_from_list(childs, None, CONST_YJQL)if not yjyh or not yjql:print('找不到优化按钮')sys.exit(0)onekey_optimize(yjyh)onekey_clean(yjql)sys.exit(0)def startYHDS():p = subprocess.Popen('"E:\Program Files (x86)\Wopti\WoptiUtilities_CN.exe"')print('启动优化大师')h = wait_get_top_window(clsname=YHDS_WINDOW_CLSNAME, title=YHDS_WINDOW_TITTLE)assert htime.sleep(10)return preload(sys)
sys.setdefaultencoding('utf-8')#启动优化大师,优化完成后直接关闭
p = startYHDS()
autoYHDS()
p.kill()

自动使用优化大师-2相关推荐

  1. 优化大师每天定点自动优化脚本

    #coding=utf-8__author__ = 'Administrator'__doc__ = ''' pythonwin中win32gui的用法 本文件演如何使用win32gui来遍历系统中所 ...

  2. 推荐-高质量C++/C编程指南(林锐)

     目 录 前 言... 6 第1章 文件结构... 11 1.1 版权和版本的声明... 11 1.2 头文件的结构... 12 1.3 定义文件的结构... 13 1.4 头文件的作用... 13 ...

  3. win7优化大师_Win7设置某个用户自动登录的方法

    win7系统如何设置用户自动登录呢? 方法一. 1.打开魔方优化大师,找到优化设置大师,依次"用户管理","用户登录管理"功能: 2.勾选"以下列账号 ...

  4. windows优化大师怎么用_贴在windows电脑屏幕上可以自动同步手机的跨平台便签软件...

    经常听人问,便签自动同步是什么意思?自动同步简单的来说,就是在电脑便签上记录的内容,在操作完成之后,输入/修改/删除的便签内容,会自动同步云端,手机便签.网页便签以及其他端便签上登录同一便签账号,即可 ...

  5. android自动化优化工具,一键自动优化系统大师下载

    [软件简介] 1.一键系统自动优化大师是一款功能强大的手机系统优化软件: 2.一键,只需一键,你的系统就可以得到优化,并且还会帮你自动优化哦,一键就OK,超级简单好用: 3.同时还提供了对系统进行系统 ...

  6. 如何设置电脑自动登录系统?不用输入用户名和密码

    设置方法大致有以下几种:第一种方法,针对初级用户,可以通过Windows优化大师.超级兔子之类的系统优化工具进行设置,这种方法简单方便.第二种方法,修改注册表.运行Regedit命令,打开注册表编辑器 ...

  7. win7设置计算机临时用户,Win7小技巧:用户账户自动登录方法汇总

    Win7之家( www.win7china.com):Win7小技巧:用户账户自动登录方法汇总 为了计算机安全,相信使用Windows7系统的朋友大多都为自己的用户账户设置了或简单或复杂的密码,其实对 ...

  8. chromium关闭更新_你的Win10系统20H2了吗此乃Win10年度最靠谱的更新还有Win10优化大师助阵...

    Windows 10 20H2正式版涵盖了非常多的性能改进.Bug漏洞修复以及部分新的功能特性,比如"全新的开始菜单".Alt-Tab.任务栏.通知等功能的改进等等,测试下来综合体 ...

  9. 计算机桌面显示本地磁盘c,开机自动打开本地磁盘C的解决办法

    开机自动打开文件夹或C盘说明在启动系统时执行了打开这个文件夹的命令,我们可以按照下面的步骤检查: ①选择"开始/运行"输入"msconfig"后选择" ...

最新文章

  1. winform C#的委托事件在winform窗体中传值,也可用于刷新另一窗体(窗体A刷新窗体B)...
  2. DOM操作表格的各种属性[z]
  3. request获取网页单选框的值
  4. loj 1316(spfa预处理+状压dp)
  5. Mac终端给命令设置别名alias的办法
  6. [2021.1.31多校省选模拟12]随机变换的子串(线段树维护分治/字符串/自动机思想)
  7. 第3步 (请先看第2步再看第3步) 新建完spring+springmvc+mybatis项目 需要推送gitee仓库进行管理 巨详细
  8. Pytorch 为什么每一轮batch需要设置optimizer.zero_grad
  9. [jQuery基础] jQuery节点操作
  10. android鸿洋布局,Android基础ConstrainLayout约束布局的介绍和使用
  11. 数据结构和算法———P3 时间复杂度和空间复杂度
  12. IT人的春节对联集锦
  13. 解决Eclipse开发工具Debug调试JDK源码无法查看变量值
  14. 【房价预测】基于matlab GUI BP神经网络房价预测【含Matlab源码 972期】
  15. 菜鸟教程: Linux cat 命令
  16. 数据库面试题:Redis如何保证数据一致性
  17. npm的“--force“和“--legacy-peer-deps“参数
  18. Debian 系统找不到基本命令的解决方法
  19. 详解matlab均衡算法equalize()
  20. 爬虫实战——求是网周刊文章爬取

热门文章

  1. Jfree实现统计图
  2. 四舍五入和银行家舍入法
  3. 四川大学计算机综合实践报告,四川大学计算机操作系统第四实验报告
  4. P1880 [NOI1995]石子合并
  5. git绿色、红色图标不显示
  6. 网络江湖演义(一) ×××士刘韧 王泽宾
  7. 公式里面的arg是什么意思?
  8. 初学者Photoshop:如何制作令人信服的假纹身
  9. scp是个好工具,咋用呢?
  10. 小白学Rust(一):Rust产生随机数