当前位置: 首页> 文旅> 旅游 > 邢台seo技术_武汉建设招标投标信息网_百度seo排名技术必不可少_广安百度推广代理商

邢台seo技术_武汉建设招标投标信息网_百度seo排名技术必不可少_广安百度推广代理商

时间:2025/7/9 21:57:19来源:https://blog.csdn.net/weixin_65816128/article/details/146284044 浏览次数:1次
邢台seo技术_武汉建设招标投标信息网_百度seo排名技术必不可少_广安百度推广代理商

视频连接:auto_install_py_java-CSDN直播

pywinauto 是一个用于自动化 Windows 图形用户界面(GUI)的 Python 库,支持通过程序控制窗口、按钮、输入框等控件,适用于自动化测试、批量操作和任务脚本化。

代码如下:

import platform
import os
import subprocess
from pywinauto.application import Application
import time
import psutil
import ctypes
import sys
import winregdef check_win32_64():machine = platform.machine()system = platform.system()if system.lower() != 'windows':return '不是Windows系统'if machine.endswith('64'):return '不是64位系统'def check_python_java():p_j = {'python': 0, 'java': 0}ret = subprocess.run(['python', '--version'], capture_output=True, text=True)status_code = ret.returncodeif 0 == status_code:p_j['python'] = 1ret = subprocess.run(['java', '-version'], capture_output=True, text=True)status_code = ret.returncodeif 0 == status_code:p_j['java'] = 1def find_python_pid(python):install_file = os.path.join(os.getcwd(), 'resource', python)before = {p.pid for p in psutil.process_iter()}# 启动安装程序ret = subprocess.Popen(install_file)time.sleep(2)  # 等待进程启动after = {p.pid for p in psutil.process_iter()}new_pids = after - beforenew_pids = new_pids - {ret.pid}for pid in new_pids:p_name = psutil.Process(pid).name()if p_name == python:python_id = pidreturn python_iddef find_java_pid(java):# 设置管理员权限def is_admin():try:return ctypes.windll.shell32.IsUserAnAdmin()except:return Falseis_admin()if not is_admin():ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)sys.exit()install_file = os.path.join(os.getcwd(), 'resource', java)before = {p.pid for p in psutil.process_iter()}# 启动安装程序ret = subprocess.Popen(install_file)time.sleep(2)  # 等待进程启动after = {p.pid for p in psutil.process_iter()}new_pids = after - beforenew_pids = new_pids - {ret.pid}for pid in new_pids:p_name = psutil.Process(pid).name()if p_name == java:java_id = pidreturn java_iddef auto_install(install_path, soft=''):""":param install_path: exe文件路径:param soft:   'python'  or 'java':return:"""def find_soft_pid(install_path, soft=''):install_file = os.path.join(os.getcwd(), 'resource', install_path)before = {p.pid for p in psutil.process_iter()}# 启动安装程序ret = subprocess.Popen(install_file)# print(ret.pid)time.sleep(2)  # 等待进程启动after = {p.pid for p in psutil.process_iter()}new_pids = after - beforenew_pids = new_pids - {ret.pid}for pid in new_pids:p_name = psutil.Process(pid).name()if p_name == soft:python_id = pidreturn python_idfind_soft_pid(install_path, soft)def install_java(java='jre-8u441-windows-x64.exe'):install_dir = "D:\\java_jre"dir_name = install_dir.split('\\')[-1]if not os.path.exists(install_dir):os.mkdir(install_dir)time.sleep(0.1)java_id = find_java_pid(java)app = Application(backend='uia').connect(process=java_id)# app.wait('ready',timeout=10)time.sleep(1)dlg_install = app.window(title_re='Java')dlg_install.wait("visible", timeout=10)dlg_install.child_window(title="更改目标文件夹", auto_id="changeFolderCtrl", control_type="CheckBox").click_input()time.sleep(0.1)dlg_install.child_window(title="安装", auto_id="installBtn", control_type="Button").click()# time.sleep(1)dlg_install.child_window(title="更改(C)...", auto_id="changeFolderBtn", control_type="Button").click()D_dist = dlg_install.child_window(title_re=".*D:.*", control_type="TreeItem")D_dist.double_click_input()dlg_install.child_window(title=dir_name, control_type="TreeItem").select()time.sleep(0.1)dlg_install.child_window(title="确定", control_type="Button").click_input()# dlg_install.print_control_identifiers()time.sleep(0.5)dlg_install.child_window(title="下一步(N) >", auto_id="nextBtn", control_type="Button").click()java_add_path(install_dir)while psutil.pid_exists(java_id):passdef java_add_path(jre_path):try:# 1. 设置 JAVA_HOMEkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment",0, winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)winreg.SetValueEx(key, "JAVA_HOME", 0, winreg.REG_EXPAND_SZ, jre_path)winreg.CloseKey(key)# 2. 更新系统 Pathkey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,r"SYSTEM\CurrentControlSet\Control\Session Manager\Environment",0, winreg.KEY_QUERY_VALUE | winreg.KEY_SET_VALUE | winreg.KEY_WOW64_64KEY)path_value, _ = winreg.QueryValueEx(key, "Path")# print(path_value)new_path = f"{path_value};%JAVA_HOME%\\bin"winreg.SetValueEx(key, "Path", 0, winreg.REG_EXPAND_SZ, new_path)winreg.CloseKey(key)except Exception:passdef install_python(python='python-3.9.5-amd64.exe'):install_dir = "D:\\Python3.9"if not os.path.exists(install_dir):os.mkdir(install_dir)py_id = find_python_pid(python)app = Application(backend='uia').connect(process=py_id)dlg_install = app.window(title_re='Python')# dlg_install.print_control_identifiers()add_path = dlg_install.child_window(title="Add Python 3.9 to PATH", control_type="CheckBox")add_path.click_input()time.sleep(0.1)cust_install = dlg_install.child_window(title="Customize installation", control_type="Button")cust_install.click()# time.sleep(1)dlg_install.child_window(title="Next", control_type="Button").click()# time.sleep(1)dlg_install.child_window(title="Customize install location", auto_id="1033", control_type="Edit").set_edit_text(install_dir)dlg_install.child_window(title="Install", control_type="Button").click()while psutil.pid_exists(py_id):passif __name__ == "__main__":install_java()time.sleep(1)install_python()

关键字:邢台seo技术_武汉建设招标投标信息网_百度seo排名技术必不可少_广安百度推广代理商

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: