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"); } }
/// <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); //} }
internal void Close() { WinAPIs.CloseHandle(hProcess); }
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); } }
/// <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); } } }