Python学习(六) 史上最全Pywinauto模块自动化操作软件_pywinauto combobox(1)

		# 获取 当前的窗 通过标题
		dlg_new = app.window(title="Start a New Project")
		dlg_new.wait("ready", timeout=5)  # 等待窗体响应 有很多状态 可以看方法内部的介绍
		dlg_new.print_control_identifiers()# 打印出 窗体的结构 你可以查找对应的控件
		# 标识一下
		dlg_new.draw_outline() 在窗体的周边划线 

找到按钮进行点击

		btn_cancle = dlg_new[r'Cancle']
		btn_cancle.click()

使用快捷键

		dlg_Open = app.window(title=r"Untitled - Setup Factory")
		dlg_Open.wait("exists enabled visible ready", timeout=5)
		dlg_Open.draw_outline()

		# dlg\_Open.print\_control\_identifiers()
		# 使用快捷键 打开suf
		dlg_Open.type_keys("^O")

对应快捷键的写法
在这里插入图片描述我遇到的问题 就是选择combobox里面的选项

		# 选择组合框中的
		dlg_Mul.ComboBoxWrapper.select("Always overwrite existing file")

4 在使用pywinauto 的时候 报错 坑了很久 是程序是32的 而我使用的是64位python.exe

# 解决不能运行自己做的exe的问题
import os
os.environ.update({"\_\_COMPAT\_LAYER":"RUnAsInvoker"})
# 解决报错 是32位程序需要 使用32位python.exe
import warnings
warnings.simplefilter('ignore', category=UserWarning)

在使用过程中 需要不断的试错 适当的时候让程序sleep 因为没有程序没有完全打开 脚本就不能进行下去
我们可以获取当前焦点

		dlg_Pro.get_active()
		dlg_Pro.get_focus()

SUFDesign 就是这样
在这里插入图片描述
下附全部脚本
Unity C#

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
using System.Text;
using System.Diagnostics;

/// <summary>
/// 将I盘下的各个工程的资源和播放器移动到H盘下 方便制作安装包
/// </summary>
enum itemType
{
    测量 = 1,
    工艺 = 2,
    工程力学 = 3,
    安装识图 = 4,
    装配式 = 5,
    平法 = 6,
    精装修 = 7,
    构造 = 8,
    安全文明工地 = 9,
    计量计价 = 10,
    道路工程 = 11,
    桥梁工程 = 12,
    手工算量 = 13,

    钢结构 = 14,
    建筑电气施工 = 15,
    道桥识图 = 16,
    隧道工程 = 17,

    工程识图 = 18,
    造价识图 = 20

}
public class PublishEditorWindow : EditorWindow
{
    #region 复制文件


    private static itemType currentItemType = itemType.安装识图;
    private static float Window_height = 400;
    private static float Window_width = 1000;
    private static float LeftArea_width;
    private static float RightArea_height;
    private GUIStyle fontStyle;

    //private static string Source\_DirvePath = @"H:/PatchTool/RGZSoft/";
    private static string Source_DirvePath = @"D:/工作安装包/PatchTool/RGZSoft";
    //private static string Target\_DirvePath = @"I:/rgzsoft/RGZSoft/";
    private static string Target_DirvePath = @"D:/工作安装包/网页版本打包项";
    /// <summary>
    /// 目的资源路径
    /// </summary>
    private static string Source_player_module = "module";
    private static string Source_weike = @"WeiKe/WKPlayerResources/WKAssets";


    /// <summary>
    /// 当前资源路径
    /// </summary>
    private static string Target_player_module = "module";
    private static string Target_weike = @"WeiKe/WKPlayerResources/WKAssets";

    private static string sourceAssetsPath;
    private static string sourcePlayerPath;
    private static List<string> sourceWkPath;
    private static string TargetAssetsPath;
    private static string TargetPlayerPath;
    private static string TargetWkPath;

    private static bool IsAssetCopy = true;
    private static bool IsPlayerCopy = true;
    private static bool IsWkCopy = true;
    private static bool IsWkPlayer = true;
    private static string str;

    private string towkBg;
    private string fromwkBg;
    private string fromwkXml;
    private string towkXml;

    private string fromWkPlayerPath;
    private string toWkPlayerPath;

    [MenuItem ("PublishTools/移动各项目资源", false, 1)]
    private static void PublishWebglTool ()
    {
        PublishEditorWindow publish = GetWindowWithRect<PublishEditorWindow> (new Rect (0, 0, Window_width, Window_height), false, "移动项目资源");
        publish.ShowPopup ();
        LeftArea_width = Window_width / 3 \* 2;
        RightArea_height = Window_width - LeftArea_width;
        sourceWkPath = new List<string> ();
    }

    private void DrawLabel ( string content, GUIStyle style = null )
    {
        EditorGUILayout.BeginHorizontal ();
        GUILayout.Label ("已选择的源播放器路径:", style);
        GUILayout.TextField (sourcePlayerPath);
        EditorGUILayout.EndHorizontal ();
    }
    private void OnGUI ()
    {
        fontStyle = GUI.skin.FindStyle ("flow node 0");
        //fontStyle.normal.textColor = Color.white;
        fontStyle.fontSize = 12;
        GUIStyle style = new GUIStyle ();
        style.fixedWidth = 130;
        style.normal.textColor = Color.red;
        GUILayout.BeginArea (new Rect (LeftArea_width, 0, RightArea_height, Window_height), "", "box");
        EditorGUILayout.BeginVertical ();
        EditorGUILayout.LabelField ("请选择要移动的项目:");
        EditorGUILayout.LabelField ("项目名称");

        currentItemType = (itemType)EditorGUILayout.EnumPopup (currentItemType, GUILayout.Height (25));
        if (GUILayout.Button ("确定"))
        {
            CompactStringPath ();
        }
        EditorGUILayout.LabelField ("如果你选择复制选择的项目,请按下方按钮:");
        if (GUILayout.Button ("复制已选的项目"))
        {
            CopySelectItem ();
        }
        EditorGUILayout.LabelField ("如果你选择复制全部的项目,请按下方按钮:");
        if (GUILayout.Button ("复制全部项目"))
        {
            CopyMultipleDirectory ();
        }
        EditorGUILayout.EndVertical ();


        GUILayout.Space (50);
        if (GUILayout.Button ("清理缓存"))
        {
            EditorUtility.UnloadUnusedAssets ();
        }
        GUILayout.EndArea ();

        //绘制左边
        GUILayout.BeginArea (new Rect (0, 0, LeftArea_width, Window_height), "", "box");
        EditorGUILayout.BeginVertical ();
        GUILayout.Space (5);
        EditorGUILayout.BeginHorizontal ();
        //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath); 
        GUILayout.Label ("已选择的源文件路径:", style);
        GUILayout.TextField (sourceAssetsPath);
        EditorGUILayout.EndHorizontal ();
        GUILayout.Space (2);
        EditorGUILayout.BeginHorizontal ();
        //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath);
        GUILayout.Label ("已选择的源播放器路径:", style);
        GUILayout.TextField (sourcePlayerPath);
        EditorGUILayout.EndHorizontal ();
        GUILayout.Space (2);
        EditorGUILayout.BeginHorizontal ();
        //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath);
        GUILayout.Label ("已选择的源微课资源路径:", style);
        GUILayout.TextField (GetStrByList (sourceWkPath));
        EditorGUILayout.EndHorizontal ();
        GUILayout.Space (2);
        EditorGUILayout.BeginHorizontal ();
        //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath);
        GUILayout.Label ("已选择的微课播放器路径:", style);
        GUILayout.TextField (fromWkPlayerPath);
        EditorGUILayout.EndHorizontal ();
        GUILayout.Space (5);

        EditorGUILayout.BeginHorizontal ();
        GUILayout.Label ("目标互动资源路径:", style);
        GUILayout.TextField (TargetAssetsPath);
        EditorGUILayout.EndHorizontal ();

        GUILayout.Space (2);
        EditorGUILayout.BeginHorizontal ();
        //EditorGUILayout.LabelField ("要复制的目标路径:",TargetPath);
        GUILayout.Label ("目标播放器路径:", style);
        GUILayout.TextField (TargetPlayerPath);
        EditorGUILayout.EndHorizontal ();
        GUILayout.Space (2);
        EditorGUILayout.BeginHorizontal ();
        //EditorGUILayout.LabelField ("要复制的目标路径:",TargetPath);
        GUILayout.Label ("目标微课资源路径:", style);
        GUILayout.TextField (TargetWkPath);
        EditorGUILayout.EndHorizontal ();

        EditorGUILayout.BeginHorizontal ();
        //EditorGUILayout.LabelField ("已选择的源文件路径",CurrentPath);
        GUILayout.Label ("目标微课播放器路径:", style);
        GUILayout.TextField (toWkPlayerPath);
        EditorGUILayout.EndHorizontal ();
        GUILayout.Space (5);

        IsAssetCopy = EditorGUILayout.Toggle ("互动资源", IsAssetCopy);
        IsPlayerCopy = EditorGUILayout.Toggle ("播放器资源", IsPlayerCopy);
        IsWkCopy = EditorGUILayout.Toggle ("微课资源(全部)", IsWkCopy);
        IsWkPlayer = EditorGUILayout.Toggle ("微课播放器", IsWkPlayer);
        EditorGUILayout.EndVertical ();

        GUILayout.Space (20);
        GUIStyle button_style;
        button_style =/\* GUI.skin.FindStyle ("flow node 1");\*/new GUIStyle ();
        button_style.fontSize = 17;
        button_style.fontStyle = FontStyle.Bold;
        //button\_style.margin = new RectOffset (0,0,0,0);
        button_style.alignment = TextAnchor.MiddleLeft;
        button_style.normal.textColor = Color.red;
        EditorGUILayout.BeginHorizontal ();
        GUILayout.Label ("当前已选项目是: ", GUILayout.Width (100));
        button_style.normal.textColor = Color.green;
        GUILayout.Label (currentItemType.ToString (), button_style, GUILayout.Width (200));

        EditorGUILayout.EndHorizontal ();
        GUIStyle st = GUI.skin.FindStyle ("flow node 2");
        st.fontSize = 15;
        st.alignment = TextAnchor.UpperCenter;
        GUILayout.Space (10);
        if (GUILayout.Button ("制作版本号\n(慎点!)",st, GUILayout.Height (50), GUILayout.Width (150)))
        {
            CallBuildTool ();
        }
        GUILayout.EndArea ();

        //绘制右边

    }


    private void CompactStringPath ()
    {
        Resources.UnloadUnusedAssets ();

        //源资源
        sourceAssetsPath = PathTool.CombinePath (Source_DirvePath, GetDirNameByType (currentItemType));
        sourcePlayerPath = PathTool.CombinePath (Source_DirvePath, Target_player_module, GetDirNameByType (currentItemType));

        fromWkPlayerPath = PathTool.CombinePath (Source_DirvePath, Source_player_module, "WeiKe");
        toWkPlayerPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType.ToString () + "微课", Target_player_module, "WeiKe");
        str = GetWkNameByType (currentItemType);
        if (str.Contains ("+"))
        {
            string[] sourceWkPath_Arr = str.Split ('+');
            sourceWkPath.Clear ();
            foreach (var i in sourceWkPath_Arr)
            {
                if (!sourceWkPath.Contains (i))
                    sourceWkPath.Add (PathTool.CombinePath (Source_DirvePath, Target_weike, i));
            }
        }
        else
        {
            sourceWkPath.Clear ();
            sourceWkPath.Add (PathTool.CombinePath (Source_DirvePath, Target_weike, GetWkNameByType (currentItemType)));
        }
        TargetAssetsPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType.ToString () + "互动", GetDirNameByType (currentItemType));
        TargetPlayerPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType.ToString () + "互动", Target_player_module, GetDirNameByType (currentItemType));
        TargetWkPath = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType + "微课", Target_weike, GetWkNameByType (currentItemType));

        towkBg = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType + "微课", Target_weike, "WKLoadBG");

        fromwkBg = PathTool.CombinePath (Source_DirvePath, Source_weike, "WKLoadBG");
        towkXml = PathTool.CombinePath (Target_DirvePath, currentItemType.ToString (), currentItemType + "微课", Target_weike, "WK\_ID对照表.xml");
        fromwkXml = PathTool.CombinePath (Source_DirvePath, Source_weike, "WK\_ID对照表.xml");


        UnityEngine.Debug.Log ("源文件互动路径sourceAssetsPath" + sourceAssetsPath);
        UnityEngine.Debug.Log ("源文件互动播放器路径sourcePlayerPath" + sourcePlayerPath);
        UnityEngine.Debug.Log ("源文件微课资源路径sourceWkPath" + string.Join (" ", sourceWkPath.ToArray ()));
        UnityEngine.Debug.Log ("源文件WK\_ID对照表 " + fromwkXml);
        UnityEngine.Debug.Log ("源文件微课背景图路径 " + fromwkBg);
        UnityEngine.Debug.Log ("源文件微课播放路径 " + fromWkPlayerPath);

        UnityEngine.Debug.Log ("目标互动路径TargetAssetsPath" + TargetAssetsPath);
        UnityEngine.Debug.Log ("目标互动播放器路径TargetPlayerPath" + TargetPlayerPath);
        UnityEngine.Debug.Log ("目标微课资源路径TargetWkPath" + TargetWkPath);
        UnityEngine.Debug.Log ("目标微课背景图路径 towkBg" + towkBg);
        UnityEngine.Debug.Log ("目标WK\_ID对照表 " + towkXml);
        UnityEngine.Debug.Log ("目标文件微课播放器 " + toWkPlayerPath);
    }
    private string GetStrByList ( List<string> str_list )
    {
        StringBuilder sb = new StringBuilder ();
        foreach (string s in str_list)
        {
            sb.Append (s);
            if (s != str_list[str_list.Count - 1])
                sb.Append ("\n");
        }
        return sb.ToString ();
    }

    private void CopySelectItem ()
    {
        //互动资源
        if (IsAssetCopy)
            CopySelectDirectory (sourceAssetsPath, TargetAssetsPath);
        //互动播放器
        if (IsPlayerCopy)
            CopySelectDirectory (sourcePlayerPath, TargetPlayerPath);
        //微课资源
        if (IsWkCopy)
        {
            foreach (var i in sourceWkPath)
            {
                CopySelectDirectory (i, TargetWkPath);
            }
            //背景图
            CopySelectDirectory (fromwkBg, towkBg);
            //wk对照表
            File.Copy (fromwkXml, towkXml, true);
        }
        //微课播放器
        if (IsWkPlayer)
            CopySelectDirectory (fromWkPlayerPath, toWkPlayerPath);

        UnityEngine.Debug.Log (string.Format ("<color=red>复制完成{0}</color>", currentItemType));
    }
    /// <summary>
    /// 复制选择的文件夹
    /// </summary>
    /// <param name="sourcePath">源文件路径</param>
    /// <param name="targetPath">目标文件路径</param>
    private static void CopySelectDirectory ( string sourcePath, string targetPath )
    {
        if (!Directory.Exists (targetPath))
        {
            Directory.CreateDirectory (targetPath);
        }
        DirectoryInfo dirInfo = new DirectoryInfo (sourcePath);
        List<FileInfo> fileList = new List<FileInfo> (dirInfo.GetFiles ());
        fileList.ForEach (c =>
        {
            EditorUtility.DisplayProgressBar ("正在复制", c.FullName, (int)(fileList.IndexOf (c) + 1 / fileList.Count));
            string destPath = PathTool.CombinePath (targetPath, c.Name);
            File.Copy (c.FullName, destPath, true);
            UnityEngine.Debug.Log (c.FullName + "复制到to" + destPath + "成功");
        });

        List<DirectoryInfo> folders = new List<DirectoryInfo> (dirInfo.GetDirectories ());
        folders.ForEach (c =>
        {
            string targetpath = PathTool.CombinePath (targetPath, c.Name);
            UnityEngine.Debug.Log (string.Format ("文件夹中 源文件{0},目标文件{1}", c.FullName, targetpath));
            CopySelectDirectory (c.FullName, targetpath);
        });
        EditorUtility.ClearProgressBar ();
    }
    /// <summary>
    /// 复制全部的文件夹
    /// </summary>
    /// <param name="sourcePath"></param>
    /// <param name="targetPaht"></param>
    private static void CopyMultipleDirectory ()
    {

    }
    /// <summary>
    /// 获得互动名称
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    private static string GetDirNameByType ( itemType type )
    {
        string dirname = string.Empty;
        switch (type)
        {
            case itemType.安装识图:
                dirname = "AnZhuangShiTu";
                break;
            case itemType.测量:
                dirname = "CeLiang";
                break;
            case itemType.钢结构:
                dirname = "GangJieGou";
                break;
            case itemType.工程识图:
                dirname = "GongChengShiTu";
                break;
            case itemType.工艺:
                dirname = "GongYi";
                break;
            case itemType.构造:
                dirname = "Struct";
                break;
            case itemType.计量计价:
                dirname = "JiLiangJiJia";
                break;
            case itemType.精装修:
                dirname = "jingzhuangxiu";
                break;
            case itemType.工程力学:
                dirname = "GCLX";
                break;
            case itemType.平法:
                dirname = "PingFa";
                break;
            case itemType.造价识图:
                dirname = "CostKnowledge";
                break;
            case itemType.装配式:
                dirname = "ZhuangPeiShi";
                break;
            case itemType.建筑电气施工:
                dirname = "InstallProject";
                break;
            case itemType.桥梁工程:
                dirname = "BridgeProject";
                break;
            case itemType.道桥识图:
                dirname = "BridgeFigure";
                break;
            case itemType.隧道工程:
                dirname = "SuiDaoProject";
                break;
            default:
                break;
        }
        return dirname;
    }
    /// <summary>
    /// 获得wk名称
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    private static string GetWkNameByType ( itemType type )
    {
        string wkName = string.Empty;
        switch (type)
        {
            case itemType.安装识图:
                wkName = "AZST";
                break;
            case itemType.测量:
                wkName = "CL";
                break;
            case itemType.钢结构:
                wkName = "GJG";
                break;
            case itemType.工程识图:
                wkName = "GZst";
                break;
            case itemType.工艺:
                wkName = "GRgy";
                break;
            case itemType.构造:
                wkName = "GRgz";
                break;
            case itemType.计量计价:
                wkName = "GRjljj";
                break;
            case itemType.精装修:
                wkName = "ZSzx";
                break;
            case itemType.工程力学:
                wkName = "GCLX";
                break;
            case itemType.平法:
                wkName = "";
                break;
            case itemType.造价识图:
                wkName = "GZst";
                break;
            case itemType.装配式:
                wkName = "ZPS";
                break;
            case itemType.建筑电气施工:
                wkName = "GRaz";
                break;
            case itemType.桥梁工程:
                wkName = "QLGC";
                break;
            case itemType.道桥识图:
                wkName = "";
                break;
            case itemType.隧道工程:
                wkName = "SGGY+GZRZ+WYFJ";
                break;
            default:
                break;
        }
        return wkName;
    }

    #endregion

    #region 调用打包工具
    private static string FilePath = @"F:\workspace\PythonTest\PythonCallHardware\venv\Scripts\python.exe";
    // [MenuItem("PublishTools/制作版本号",false,2)]
    private static void CallBuildTool ()
    {
        string file = @"F:/workspace/PythonTest/PythonCallHardware/Scripts/CallBuildTools.py";
        ProcessStartInfo start = new ProcessStartInfo ();
        start.FileName = FilePath;
        start.Arguments = file + " " + currentItemType;
        start.UseShellExecute = false;
        //参数用空格分隔
        //start.Arguments = path + " " + type + " " + mode;
        start.RedirectStandardOutput = true;
        start.RedirectStandardInput = true;
        start.RedirectStandardError = true;
        start.CreateNoWindow = false;
        Process process = Process.Start (start);
    }
    #endregion
}

public class PythonCallBuild : EditorWindow
{
    #region 调用python自动化打包
    static PythonCallBuild window;
    private static itemType CurrentType = itemType.测量;
    private static bool ISWEIKE = false;
    private static bool ISHUDONG = false;
    [MenuItem ("PublishTools/调用Python自动化打包", false, 3)]
    private static void CallBuild ()
    {
        window = GetWindow<PythonCallBuild> ();
        window.autoRepaintOnSceneChange = false;
        window.maxSize = new Vector2 (430, 305);
        window.Show ();
    }


    //互动2 微课是1
    static string CurrentModeType = "1";
    private void OnGUI ()
    {
        EditorGUILayout.BeginHorizontal ();
        CurrentType = (itemType)EditorGUILayout.EnumPopup ("选择项目:", CurrentType, GUILayout.Width (300));
        EditorGUILayout.EndHorizontal ();
        GUILayout.Label ("------------------------------------------------------------------------------------------------------------------------------");
        EditorGUILayout.BeginHorizontal ();
        using (var posGroup = new EditorGUILayout.ToggleGroupScope ("类别(只能选一个)", true))
        {
            ISWEIKE = EditorGUILayout.ToggleLeft ("微课", ISWEIKE);
            ISHUDONG = EditorGUILayout.ToggleLeft ("互动", ISHUDONG);

        }

        EditorGUILayout.EndHorizontal ();
        GUILayout.Space (10);
        GUILayout.BeginHorizontal ();
        GUILayout.Label ("------------------------------------------------------------------------------------------------------------------------------");

        GUILayout.Label ("当前选择项目:");
        GUILayout.Label (CurrentType.ToString ());
        GUILayout.EndVertical ();
        if (GUILayout.Button ("开始调用", GUILayout.Width (100), GUILayout.Height (40)))
        {
            if (ISWEIKE)
                CurrentModeType = "1";
            else if (ISHUDONG)
                CurrentModeType = "2";
            else
                return;
            CallPythonExe (((int)CurrentType).ToString (), CurrentModeType);
        }
    }
    private static void CallPythonExe ( string type, string mode )
    {

        ProcessStartInfo StartInfo = new ProcessStartInfo ();
        //python脚本的路径
        string path = @"F:/workspace/PythonTest/PythonCallHardware/Scripts/CallHarware.py";
        //(注意:用的话需要换成自己的)没有配环境变量的话,可以像我这样写python.exe的绝对路径
        //(用的话需要换成自己的)。如果配了,直接写"python.exe"即可
        StartInfo.FileName = @"F:\workspace\PythonTest\PythonCallHardware\venv\Scripts\python.exe";
        //p.StartInfo.FileName = @"C:\Program Files\Python35\python.exe";

        // sArguments为python脚本的路径 python值的传递路线strArr[]->teps->sigstr->sArguments 
        //传递参数时 每个参数需要用空格 隔开
        //在python中用sys.argv[ ]使用该参数
        StartInfo.UseShellExecute = false;
        StartInfo.Arguments = path + " " + type + " " + mode;
        StartInfo.RedirectStandardOutput = true;
        StartInfo.RedirectStandardInput = true;
        StartInfo.RedirectStandardError = true;
        StartInfo.CreateNoWindow = false;
        Process process = Process.Start (StartInfo);
        //process.OutputDataReceived += new DataReceivedEventHandler (Out\_RecvData);
        StreamReader reader = process.StandardOutput;
        string result = "";
        while (result != null)
        {
            result = reader.ReadLine ();
            if (string.IsNullOrEmpty (result))
                break;
            UnityEngine.Debug.Log (result.ToString ());
        }
    }

    //class ProjectType(enum.Enum):
    //'''
    //项目类别
    //'''
    //CeLiang = 1
    //GongYi = 2
    //GCLX = 3
    //AnZhuangShiTu = 4
    //ZhuangPeiShi = 5
    //PingFa = 6
    //JingZhuangXiu = 7
    //GouZhao = 8
    //AnQuanWenMingGongDi = 9
    //JiLiangJiJia = 10
    //DaoLuGongCheng = 11
    //QiangLiangGongCheng = 12
    //ShouGongSuanLiang = 13
    //GangJieGou=14,
    //# 建筑电气施工
    //JianZhuDianQiShiGong=15,
    //DaqQiaoShiTu=16,
    //SuiDaoGongCheng=17,
    //# 不确定
    //GongChengShiTu=18,
    #endregion

    static void Out_RecvData ( object sender, DataReceivedEventArgs e )
    {
        if (!string.IsNullOrEmpty (e.Data))
        {
            UnityEngine.Debug.Log (e.Data);
        }
    }



}
/// <summary>
/// 工具类
/// </summary>
public class PathTool
{
    public static string CombinePath ( params string[] str )
    {
        string TmpPath = str[0];
        for (int i = 0; i < str.Length; i++)
        {
            if (i != 0)
                TmpPath = Path.Combine (TmpPath, str[i]);
        }
        TmpPath = TmpPath.Replace ("\\", "/");
        return TmpPath;
    }

    public static void CreatDirectory ( string path )
    {
        if (!string.IsNullOrEmpty (path))
        {
            bool isExist = Directory.Exists (path);
            if (isExist == false)
                Directory.CreateDirectory (path);
        }
    }
}



这是python脚本

# coding=utf-8
import os
import sys
from pywinauto.application import Application

import time
import enum
# 解决报错
import warnings
warnings.simplefilter('ignore', category=UserWarning)
class AutoBuild(object):

	def \_\_init\_\_(self):
		self.sufFileName = ""
		self.open_SufPath = ""
		# suf 盘符位置
		self.Drive_path = "D:\工作安装包\网页版本suf"
		# 资源位置
		self.ProjectFile = 'D:\工作安装包\网页版本打包项'
		# self.CurrentType=sys.argv[1]
		self.CurrentType = 1
		self.CurrentModel = 1

	def run(self):
		self.CurrentType = int(sys.argv[1])
		self.CurrentModel = int(sys.argv[2])
		self.ProjecttypeEnum = ProjectType(self.CurrentType)
		self.modelType = ModelType(self.CurrentModel)
		print(self.ProjecttypeEnum)
		print(self.modelType)
		# 获取suf路径
		print('\*' \* 10)
		self.open_SufPath = self.GetSufByProject(self.ProjecttypeEnum)
		print(self.open_SufPath)
		# 打开sufdesign

		app = Application(backend='uia').start(r"F:\work\SetupFactory\SUFDesign.exe", timeout=10)
		# 把进程和当前获得句柄联系起来
		app = Application().connect(path=r"F:\work\SetupFactory\SUFDesign.exe", timeout=10)
		time.sleep(1)



还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!


王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。


对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!


【完整版领取方式在文末!!】


***93道网络安全面试题***


![](https://img-blog.csdnimg.cn/img_convert/6679c89ccd849f9504c48bb02882ef8d.png)








![](https://img-blog.csdnimg.cn/img_convert/07ce1a919614bde78921fb2f8ddf0c2f.png)





![](https://img-blog.csdnimg.cn/img_convert/44238619c3ba2d672b5b8dc4a529b01d.png)





内容实在太多,不一一截图了


### 黑客学习资源推荐


最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

#### 1️⃣零基础入门


##### ① 学习路线


对于从来没有接触过网络安全的同学,我们帮你准备了详细的**学习成长路线图**。可以说是**最科学最系统的学习路线**,大家跟着这个大的方向学习准没问题。


![image](https://img-blog.csdnimg.cn/img_convert/acb3c4714e29498573a58a3c79c775da.gif#pic_center)


##### ② 路线对应学习视频


同时每个成长路线对应的板块都有配套的视频提供:


![image-20231025112050764](https://img-blog.csdnimg.cn/874ad4fd3dbe4f6bb3bff17885655014.png#pic_center)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值