c#大漠操控雷电模拟器

 

 

首先在需要调用的页面 定义它

//雷电
private static LdCmd ldCmd = null;

然后在窗体加载时

//设置雷电路径
ldCmd = LdCmd.GetObject();
ldCmd.SimulatorPath = @"D:\leidian\LDPlayer4\";  //该路径根据实际安装地址更改,可以弄个文件夹选择器选择路径。

 

 LD类

 public class LdCmd
    {
        /// <summary>
        /// 模拟器安装路径
        /// </summary>
        public string SimulatorPath { get; set; }
        private static object obj = new object();
        private static LdCmd ldCmd = null;
        private LdCmd()
        {

        }
        public static LdCmd GetObject()
        {
            if (ldCmd == null)
            {
                lock (obj)
                {
                    if (ldCmd == null)
                    {
                        ldCmd = new LdCmd();
                    }
                }
            }
            return ldCmd;
        }
        /// <summary>
        /// 执行CMD窗口信息
        /// </summary>
        /// <param name="value">模拟器命令</param>
        /// <returns>执行后的信息</returns>
        private string ImplementCmd(string value)
        {
            Process p = new Process();
            //设置要启动的应用程序
            p.StartInfo.FileName = "cmd.exe";
            //是否使用操作系统shell启动
            p.StartInfo.UseShellExecute = false;
            // 接受来自调用程序的输入信息
            p.StartInfo.RedirectStandardInput = true;
            //输出信息
            p.StartInfo.RedirectStandardOutput = true;
            // 输出错误
            p.StartInfo.RedirectStandardError = true;
            //不显示程序窗口
            p.StartInfo.CreateNoWindow = true;
            //启动程序
            p.Start();
            //向cmd窗口发送输入信息
            p.StandardInput.WriteLine(value);
            p.StandardInput.WriteLine("exit");
            p.StandardInput.AutoFlush = true;
            //获取输出信息
            string strOuput = p.StandardOutput.ReadToEnd();
            //等待程序执行完退出进程
            p.WaitForExit();
            p.Close();
            return strOuput;
        }
        /// <summary>
        /// 清理应用数据
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="packageName">App包名</param>
        /// <returns></returns>
        public string ClearAppData(int index, string packageName)
        {
            return ImplementCmd(
                string.Format("{0}ld -s {1} pm clear {2}", SimulatorPath, index, packageName));
        }
        /// <summary>
        /// 安装应用
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="packagePath">模拟器路径</param>
        /// <returns></returns>
        public string InstallAPP(int index, string packagePath)
        {
            lock (obj)
            {
                return ImplementCmd(
                    string.Format("{0}dnconsole installapp --index {1} --filename {2}", SimulatorPath, index, packagePath));
            }
        }
        /// <summary>
        /// 卸载应用
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="packageName">APP包名</param>
        /// <returns></returns>
        public string UnInstallApp(int index, string packageName)
        {
            lock (obj)
            {
                return ImplementCmd(
                    string.Format("{0}dnconsole uninstallapp --index {1} --filename {2}", SimulatorPath, index, packageName));
            }
        }
        /// <summary>
        /// 启动应用
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value">包名/Activity类名</param>
        /// <returns></returns>
        public string StartApp(int index, string value)
        {
            return ImplementCmd(
                string.Format("{0}ld -s {1} am start -n {2}", SimulatorPath, index, value));
        }
        /// <summary>
        /// 打开模拟器
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <returns></returns>
        public string Launch(int index)
        {
            lock (obj)
            {
                return ImplementCmd(
                    string.Format("{0}dnconsole launch --index {1}", SimulatorPath, index));
            }
        }
        /// <summary>
        /// 退出指定模拟器
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <returns></returns>
        public string Quit(int index)
        {
            lock (obj)
            {
                return ImplementCmd(
                    string.Format("{0}dnconsole quit --index {1}", SimulatorPath, index));
            }
        }
        /// <summary>
        /// 重启模拟器
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="packageName">启动后并打开 packagename 应用, null 表示不打开任何应用</param>
        /// <returns></returns>
        public string Reboot(int index, string packageName = null)
        {
            lock (obj)
            {
                if (packageName == null)
                {
                    return ImplementCmd(
                        string.Format("{0}dnconsole action --index {1} --key call.reboot --value null",
                        SimulatorPath, index));
                }
                return ImplementCmd(
                    string.Format("{0}dnconsole action --index {1} --key call.reboot --value {2}",
                    SimulatorPath, index, packageName));
            }
        }
        /// <summary>
        /// CPU优化
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="rate">0~100</param>
        /// <returns></returns>
        public string Downcpu(int index, int rate)
        {
            lock (obj)
            {
                return ImplementCmd(
                    string.Format("{0}dnconsole downcpu {1} --rate {2}",
                    SimulatorPath, index, rate));
            }
        }
        /// <summary>
        /// 新增模拟器
        /// </summary>
        /// <param name="name">模拟器名字 默认为NULL</param>
        /// <returns></returns>
        public string AddSimulator(string name = null)
        {
            lock (obj)
            {
                if (name == null)
                {
                    return ImplementCmd(string.Format("{0}dnconsole add", SimulatorPath));
                }
                return ImplementCmd(string.Format("{0}dnconsole add --name {1}", SimulatorPath, name));
            }
        }
        /// <summary>
        /// 复制模拟器
        /// </summary>
        /// <param name="index">要复制的模拟器序号</param>
        /// <param name="name">模拟器名字  默认为NULL</param>
        /// <returns></returns>
        public string CopySimulator(int index, string name = null)
        {
            lock (obj)
            {
                if (name == null)
                {
                    return ImplementCmd(string.Format("{0}dnconsole copy --from {1}", SimulatorPath, index));
                }
                return ImplementCmd(string.Format("{0}dnconsole copy --name {1} --from {2}", SimulatorPath, name, index));
            }
        }
        /// <summary>
        /// 删除模拟器
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <returns></returns>
        public string RemoveSimulator(int index)
        {
            lock (obj)
            {
                return ImplementCmd(string.Format("{0}dnconsole remove --index {1}", SimulatorPath, index));
            }
        }
        /// <summary>
        /// 模拟器一件排序,在模拟器自带的多开器配置排序规则
        /// </summary>
        /// <returns></returns>
        public string SortWnd()
        {
            lock (obj)
            {
                return ImplementCmd(string.Format("{0}dnconsole sortWnd", SimulatorPath));
            }
        }
        /// <summary>
        /// 获取界面控件类名
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <returns></returns>
        public string GetAndroidClass(int index)
        {
            return ImplementCmd(string.Format("{0}ld -s {1} dumpsys window | findstr mCurrentFocus", SimulatorPath, index));
        }
        /// <summary>
        /// 唤起QQ群
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="number">QQ群号</param>
        /// <returns></returns>
        public string EvokeQQFlock(int index, string number)
        {
            return ImplementCmd(string.Format("{0}ld -s {1} am start -a android.intent.action.VIEW -d \"mqqapi://card/show_pslcard?src_type=internal\\&version=1\\&uin={2}\\&card_type=group\\&source=qrcode\"",
                SimulatorPath,
                index,
                number));
        }
        /// <summary>
        /// 唤起QQ好友
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="number">好友QQ号</param>
        /// <returns></returns>
        public string EvokeQQ(int index, string number)
        {
            return ImplementCmd(string.Format("{0}ld -s {1} am start -a android.intent.action.VIEW -d \"mqqwpa://im/chat?chat_type=wpa\\&uin={2}\"",
                SimulatorPath,
                index,
                number));
        }
        /// <summary>
        /// 查看已创建的模拟器状态 PS:依次是:索引,标题,顶层窗口句柄,绑定窗口句柄,是否进入android,进程PID,VBox进程PID
        /// </summary>
        /// <returns>返回List集合</returns>
        public List<string> ListSimulator()
        {
            lock (obj)
            {
                List<string> list = new List<string>();
                var res = Regex.Matches(ImplementCmd(string.Format("{0}dnconsole list2", SimulatorPath)), @"\d,[^>]*?,[0-9]{1,8},[0-9]{1,8},\d,[^>]*?[0-9]{1,8},[^>]*?[0-9]{1,8}");
                foreach (Match item in res)
                {
                    list.Add(item.Value);
                }
                return list;
            }
        }
        /// <summary>
        /// 设置IMEI
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetIMEI(int index, string value)
        {
            return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --imei {2}",
            SimulatorPath,
            index,
            value));
        }
        /// <summary>
        /// 设置IMSI
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetIMSI(int index, string value)
        {
            return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --imsi {2}",
            SimulatorPath,
            index,
            value));
        }
        /// <summary>
        /// 设置手机号码
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetLinenum(int index, string value)
        {
            return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --pnumber {2}",
            SimulatorPath,
            index,
            value));
        }
        /// <summary>
        /// 设置SIM卡序列号
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetSimserial(int index, string value)
        {
            return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --simserial {2}",
            SimulatorPath,
            index,
            value));
        }
        /// <summary>
        /// 设置AndroidID
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetAndroidid(int index, string value)
        {
            return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --androidid {2}",
            SimulatorPath,
            index,
            value));
        }
        /// <summary>
        /// 设置手机型号
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetModel(int index, string value)
        {
            return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --model {2}",
            SimulatorPath,
            index,
            value));
        }
        /// <summary>
        /// 设置手机商家
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetManufacturer(int index, string value)
        {
            return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --manufacturer {2}",
            SimulatorPath,
            index,
            value));
        }
        /// <summary>
        /// 设置模拟器MAC地址
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value"></param>
        /// <returns></returns>
        public string SetMac(int index, string value)
        {
            lock (obj)
            {
                return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --mac {2}",
                    SimulatorPath,
                    index,
                    value));
            }
        }
        /// <summary>
        /// 设置模拟器分辨率
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value">分辨率w,h,dpi</param>
        /// <returns></returns>
        public string SetResolution(int index, string value)
        {
            lock (obj)
            {
                return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --resolution {2}",
                    SimulatorPath,
                    index,
                    value));
            }
        }
        /// <summary>
        /// 设置模拟器CPU
        /// </summary>
        /// <param name="index">模拟器序号</param>
        /// <param name="value">CPU个数  1-4</param>
        /// <returns></returns>
        public string SetCpu(int index, string value)
        {
            lock (obj)
            {
                return ImplementCmd(string.Format("{0}dnconsole modify --index {1} --cpu {2}",
                    SimulatorPath,
                    index,
                    value));
            }
        }
    }

 

posted @ 2022-10-21 17:45  路边有一棵草  阅读(1278)  评论(0编辑  收藏  举报