优化大师每天定点自动优化脚本
来源:互联网 发布:怎样获得淘宝优惠券 编辑:程序博客网 时间:2024/05/01 01:05
#coding=utf-8__author__ = 'Administrator'__doc__ = '''pythonwin中win32gui的用法本文件演如何使用win32gui来遍历系统中所有的顶层窗口,并遍历所有顶层窗口中的子窗口说明:0.因为电脑上安装杀毒软件,很慢,用360更慢,所以考虑用优化大师,但是优化大师点击太费劲了,所以写了本脚本1.原来消息发送全部调用的SendMessage,以为优化大师内部是独立的线程处理, 但并不是,所以避免等待,直接使用PostMessage2.自动清除。3.每天早上7点和中午1点开始自动清理'''#优化大师窗口信息YHDS_WINDOW_TITTLE = 'Wopti Utilities'YHDS_WINDOW_CLSNAME = 'TWomccMainForm'#常量CONST_YJYH = '一键优化'CONST_YJQL = '一键清理'CONST_DIALOG_CLASS = '#32770'CONST_STATIC_CLASS = 'Static'#设置DEBUG = Falseimport sysimport win32guiimport win32conimport timeimport subprocessfrom pprint import pprintfrom datetime import datetimeimport scheduleimport loggingimport psutildef 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: continue r_title = r_title.strip() if len(r_title) > 0: return r_title return ''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: return title,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: return hWndChildList = get_child_windows(parent) show_windows(hWndChildList) return hWndChildListdef find_window(hWnd,clsname = None, title = None): if not clsname and not title: return False def notNoneCompare(l, r): if not l: return True return l == r r_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: #无效参数 return while 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,高位是y lParam = y << 15 | x win32gui.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) / 2 y = (b - t) / 2 return x,y def 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)) return print('正在%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 cancel return ok, cancel def 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 cancel click_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) return if DEBUG: debug() hWndList = get_top_windows() yhds = find_window_from_list(hWndList, YHDS_WINDOW_CLSNAME, YHDS_WINDOW_TITTLE) if not yhds: print('优化大师应用程序未启动') return 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('找不到优化按钮') return onekey_optimize(yjyh) onekey_clean(yjql)def start_YHDS(): 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 h print 'PID=%d' % (p.pid,) time.sleep(60) return pdef job_clean(): #启动优化大师,优化完成后直接关闭 p = start_YHDS() autoYHDS() print('Kill PID=%d' % (p.pid,)) p.kill()if __name__ == '__main__': reload(sys) sys.setdefaultencoding('utf-8') #每天早上的7点和中午的13点进行清理工工作 schedule.every().day.at("7:00").do(job_clean) schedule.every().day.at("13:00").do(job_clean) #事件循环 while True: schedule.run_pending() time.sleep(1)
1 0
- 优化大师每天定点自动优化脚本
- 自动使用优化大师-2
- 每天自动建库脚本
- 每天自动备份mysql脚本
- 每天自动备份mysql脚本
- [Mysql数据库] 每天自动备份mysql脚本
- [Mysql数据库] 每天自动备份mysql脚本
- [Mysql数据库] 每天自动备份mysql脚本
- linux每天自动备份mysql脚本
- 每天定时自动优化MySQL数据库
- 【shell脚本】nginx每天自动切割日志脚本
- asp.net每天定点执行任务
- asp.net 每天定点执行任务
- 写个Python脚本每天自动下载VOA录音
- windows下mysql数据库每天自动备份php脚本
- Linux 每天自动释放系统内存的脚本
- centos每天自动备份mysql数据库方法及脚本
- 每天自动备份MySQL数据库的shell脚本
- 11-散列1 电话聊天狂人
- matlab图片清晰度调整
- POI 插入行
- MFRC522模块开发笔记
- Android 内功心法(1.9)——java设计模式之装饰模式
- 优化大师每天定点自动优化脚本
- spring依赖注入
- leetcode increasing-triplet-subsequence
- JAVA前端与后端参数传递方法小结
- ViewPage + Fragment 实现订单管理的效果
- 第二章 单机存储系统
- php CURL 发送请求详解
- 词法分析器
- 转载Java导入excel数据到数据库。