Exemplo n.º 1
0
 public PlayerStatusReader(Process process)
 {
     this.process  = process;
     this.hProcess = WinAPIs.OpenProcess(process, WinAPIs.ProcessAccessFlags.VirtualMemoryRead);
     if ((int)this.hProcess == -1)
     {
         throw new Exception("Can't open process");
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// 将手机虚拟器嵌入某个window容器
        /// </summary>
        /// <param name="mobileFormHandle">手机虚拟器窗口句柄</param>
        /// <param name="containerHandle">window容器窗口句柄</param>
        /// <param name="containerX">window容器窗口相对于屏幕的横坐标</param>
        /// <param name="containerY">window容器窗口相对于屏幕的纵坐标</param>
        /// <param name="containerWidth">window容器窗口宽度</param>
        /// <param name="containerHeight">window容器窗口高度</param>
        private void InsertMobileFormIntoContainer(IntPtr mobileFormHandle, IntPtr containerHandle, int containerX, int containerY, int containerWidth, int containerHeight)
        {
            //IntPtr targetHandle = WinAPIs.FindWindowEx(mobileFormHandle, IntPtr.Zero, "RenderWindow", null);

            //if (targetHandle != IntPtr.Zero)
            //{
            int setParentResult = WinAPIs.SetParent(mobileFormHandle, containerHandle);

            int moveTargetResult = WinAPIs.MoveWindow(mobileFormHandle, 0, 0, containerWidth, containerHeight, true);
            //    int hideMobileFrameResult = WinAPIs.ShowWindow(mobileFormHandle, 0);
            //}
        }
Exemplo n.º 3
0
 internal void Close()
 {
     WinAPIs.CloseHandle(hProcess);
 }
Exemplo n.º 4
0
        private async void Btn_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;

            try
            {
                if (btn.Content.ToString() == resourceManager.GetString("Launch", cultureInfo))
                {
                    int groupIndex = int.Parse(btn.Tag.ToString());

                    RunningGroupIndex = groupIndex;

                    double tempRow = (double)VmManager.Instance.Column / (double)ConfigVals.RowNums;

                    int _row = (int)Math.Ceiling(tempRow);

                    int[,] insideGroupIndexArray = new int[_row, ConfigVals.RowNums];

                    container.Controls.Clear();

                    string ip = GetLocalIP();

                    for (int i = 0; i < _row; i++)
                    {
                        for (int j = 0; j < ConfigVals.RowNums; j++)
                        {
                            int insideGroupIndex = i * ConfigVals.RowNums + j;

                            if (insideGroupIndex > VmManager.Instance.Column - 1)
                            {
                                continue;
                            }

                            int vmIndex = VmManager.Instance.VmIndexArray[groupIndex, insideGroupIndex];

                            insideGroupIndexArray[i, j] = vmIndex;

                            if (vmIndex != -1)
                            {
                                Panel vmContainer = new Panel()
                                {
                                    Width    = 320,
                                    Height   = 480,
                                    Location = new Point()
                                    {
                                        X = j * (320 + 3) + 3,
                                        Y = i * (480 + 3) + 3,
                                    }
                                };

                                container.Controls.Add(vmContainer);

                                string currtime  = DateTime.Now.ToString("yyyyMMddHHmmssff");
                                string currindex = vmIndex.ToString().PadLeft(4, '0');

                                ProcessUtils.Init(vmIndex, new Simulator()
                                {
                                    Cpu    = 1,
                                    Memory = 1024,
                                    Width  = 320,
                                    Height = 480,
                                    Dpi    = 120,
                                    //Imei = ip + currindex
                                    //Imei = "auto",
                                    Androidid = ip + currindex
                                });

                                ProcessUtils.Run(vmIndex);
                                //加入到对应关系集合中
                                VmManager.Instance.AddVmModel(vmIndex, new Abstract.VmModel()
                                {
                                    Imei = ip + currindex, Index = vmIndex, AndroidId = ip
                                });
                                var latestVmProcess = Process.GetProcessesByName("dnplayer").OrderByDescending(p => p.StartTime).FirstOrDefault();

                                if (latestVmProcess == null)
                                {
                                    string error = resourceManager.GetString("Error_No_Vm_Process", cultureInfo);
                                    LogUtils.Error($"{error} vmIndex:{vmIndex}");
                                    throw new Exception(error);
                                }

                                DateTime now1 = DateTime.Now;

                                while (latestVmProcess.MainWindowHandle == IntPtr.Zero)
                                {
                                    if (DateTime.Now.Subtract(now1).TotalSeconds > 7)
                                    {
                                        string error = resourceManager.GetString("Error_Main_Window_Handle_Timeout", cultureInfo);
                                        LogUtils.Error(error);
                                        //MessageBox.Show("轮询模拟器的主窗口句柄超时!");
                                        break;
                                    }
                                }

                                int setParentResult = WinAPIs.SetParent(latestVmProcess.MainWindowHandle, vmContainer.Handle);

                                if (setParentResult != 65552)
                                {
                                    LogUtils.Error($"SetParent result:{setParentResult}, vmIndex:{vmIndex}");
                                }

                                int moveWindowResult = WinAPIs.MoveWindow(latestVmProcess.MainWindowHandle, 0, -35, 320, 515, true);

                                if (moveWindowResult != 1)
                                {
                                    LogUtils.Error($"MoveWindow result:{moveWindowResult}, vmIndex:{vmIndex}");
                                }

                                //Log.Logger.Information($"VmIndex:{vmIndex}, SetParent Result:{setParentResult}, MoveWindow Result:{moveWindowResult}");

                                //btn.Text = "关闭";
                            }
                        }
                    }

                    //string installNewestAppLog = await AppUpgradeHelper.Instance.InstallNewestApp();
                    //LogUtils.Information(installNewestAppLog);
                }
                else
                {
                    btnCloseAll_Click(null, null);
                }
            }
            catch (Exception ex)
            {
                LogUtils.Error($"{ex}");

                MessageBox.Show(ex.Message);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 开启一组模拟手机
        /// </summary>
        public async void OpenGroupMobile(int groupIndex)
        {
            RunningGroupIndex = groupIndex;

            DeviceConnectionManager.Instance.LaunchAndroidTestOnTheBackground(5000);

            double tempRow = (double)VmManager.Instance.Column / (double)ConfigVals.RowNums;

            int _row = (int)Math.Ceiling(tempRow);

            int[,] insideGroupIndexArray = new int[_row, ConfigVals.RowNums];

            container.Controls.Clear();

            string ip = GetLocalIP();

            for (int i = 0; i < _row; i++)
            {
                for (int j = 0; j < ConfigVals.RowNums; j++)
                {
                    int insideGroupIndex = i * ConfigVals.RowNums + j;

                    if (insideGroupIndex > VmManager.Instance.Column - 1)
                    {
                        continue;
                    }

                    int vmIndex = VmManager.Instance.VmIndexArray[groupIndex, insideGroupIndex];

                    insideGroupIndexArray[i, j] = vmIndex;

                    if (vmIndex != -1)
                    {
                        Panel vmContainer = new Panel()
                        {
                            Width    = 320,
                            Height   = 480,
                            Location = new Point()
                            {
                                X = j * (320 + 3) + 3,
                                Y = i * (480 + 3) + 3,
                            }
                        };

                        container.Controls.Add(vmContainer);

                        string currtime  = DateTime.Now.ToString("yyyyMMddHHmmssff");
                        string currindex = vmIndex.ToString().PadLeft(4, '0');

                        ProcessUtils.Init(vmIndex, new Simulator()
                        {
                            Cpu    = 1,
                            Memory = 1024,
                            Width  = 320,
                            Height = 480,
                            Dpi    = 120,
                            //Imei = ip + currindex
                            //Imei = "auto",
                            Androidid = ip + currindex
                        });

                        ProcessUtils.Run(vmIndex);
                        //加入到对应关系集合中
                        VmManager.Instance.AddVmModel(vmIndex, new Abstract.VmModel()
                        {
                            Imei = ip + currindex, Index = vmIndex, AndroidId = ip
                        });
                        var latestVmProcess = Process.GetProcessesByName("dnplayer").OrderByDescending(p => p.StartTime).FirstOrDefault();

                        if (latestVmProcess == null)
                        {
                            string error = SystemLanguageManager.Instance.ResourceManager.GetString("Error_No_Vm_Process", SystemLanguageManager.Instance.CultureInfo);
                            LogUtils.Error($"{error} vmIndex:{vmIndex}");
                            throw new Exception(error);
                        }

                        DateTime now1 = DateTime.Now;

                        while (latestVmProcess.MainWindowHandle == IntPtr.Zero)
                        {
                            if (DateTime.Now.Subtract(now1).TotalSeconds > 7)
                            {
                                string error = SystemLanguageManager.Instance.ResourceManager.GetString("Error_Main_Window_Handle_Timeout", SystemLanguageManager.Instance.CultureInfo);
                                LogUtils.Error(error);
                                //MessageDialogManager.ShowDialogAsync("轮询模拟器的主窗口句柄超时!");
                                break;
                            }
                        }

                        int setParentResult = WinAPIs.SetParent(latestVmProcess.MainWindowHandle, vmContainer.Handle);

                        if (setParentResult != 65552)
                        {
                            LogUtils.Error($"SetParent result:{setParentResult}, vmIndex:{vmIndex}");
                        }

                        int moveWindowResult = WinAPIs.MoveWindow(latestVmProcess.MainWindowHandle, 0, -35, 320, 515, true);

                        if (moveWindowResult != 1)
                        {
                            LogUtils.Error($"MoveWindow result:{moveWindowResult}, vmIndex:{vmIndex}");
                        }

                        //Log.Logger.Information($"VmIndex:{vmIndex}, SetParent Result:{setParentResult}, MoveWindow Result:{moveWindowResult}");

                        //btn.Text = "关闭";
                    }

                    await Task.Delay(500);
                }
            }
        }