/// <summary> /// 与所有UI进行对比,取最相似的发送消息 /// </summary> private void Start2() { while (true) { Thread.Sleep(500);//截图不应过于频繁 ImageInfo form_img = new ImageInfo(); try { form_img = WinApi.GetWindowCapture(processInfo._Handle); int diff = 999; int index = 999; if (form_img != null && form_img._img != null) { for (int i = 0; i < list_UI.Count; i++) { UiInfo ui_info = list_UI[i].uiInfo; ImageInfo now_ui = Common.GetNowUi(form_img._img, ui_info._img); UpdateImage(now_ui._img); int temp = Common.GetImageDiffCount(now_ui, ui_info._img); if (temp < diff) { diff = temp; index = i; } } if (index < list_UI.Count && diff < 10) { WinApi.SendMsg(list_UI[index].uiInfo._clickLoca.X, list_UI[index].uiInfo._clickLoca.Y, processInfo._Handle); Thread.Sleep(500); } else { string[] temps = txtFree.Text.Split(','); if (temps.Length > 1) { WinApi.SendMsg(int.Parse(temps[0]), int.Parse(temps[1]), processInfo._Handle); } Thread.Sleep(300); } } form_img?._img?.Dispose(); form_img = null; } catch (Exception ex) { form_img?._img?.Dispose(); form_img = null; } } }
/// <summary> /// 逐一对比,如果相似(汉明距离小于10)就发送消息 /// </summary> private void Start1() { while (true) { Thread.Sleep(500);//截图不应过于频繁 ImageInfo form_img = new ImageInfo(); try { form_img = WinApi.GetWindowCapture(processInfo._Handle); if (form_img != null && form_img._img != null) { for (int i = 0; i < list_UI.Count; i++) { UiInfo ui_info = list_UI[i].uiInfo; ImageInfo now_ui = Common.GetNowUi(form_img._img, ui_info._img); UpdateImage(now_ui._img); if (Common.IsSameImage(ui_info._img, now_ui)) { WinApi.SendMsg(ui_info._clickLoca.X, ui_info._clickLoca.Y, processInfo._Handle); Thread.Sleep(500); break; } else { string[] temps = txtFree.Text.Split(','); if (temps.Length > 1) { WinApi.SendMsg(int.Parse(temps[0]), int.Parse(temps[1]), processInfo._Handle); } Thread.Sleep(300); } now_ui._img.Dispose(); now_ui = null; } } form_img?._img?.Dispose(); form_img = null; } catch (Exception ex) { form_img?._img?.Dispose(); form_img = null; } } }
/* * * * 5678 * 3478 * 2468 * * * 000 1 * 001 2 * 010 3 * 011 4 * 100 5 * 101 6 * 110 7 * 111 8 * */ #region ==============================方法 /// <summary> /// 添加UI /// </summary> /// <param name="ui"></param> private void AddNewUI(Bitmap img, Point img_loca, Point click_loca, bool isLoad) { UiInfo ui = new UiInfo(img.Clone() as Bitmap, img_loca, click_loca); if (isLoad) { ui._img._relativeLocal = img_loca; ui._clickLoca = click_loca; } UiControl ui_ctr = new UiControl(); ui_ctr.TabIndex = list_UI.Count; ui_ctr.Location = CalculateUiLoca(list_UI.Count); ui_ctr.uiInfo = ui; ui_ctr.DoFixImage = FixImage; ui_ctr.DoDeleteImage = DeleteImage; ui_ctr.TextLoca = ui._clickLoca.X + "," + ui._clickLoca.Y; ui_ctr.UiImage = ui._img._img; this.tabControl1.TabPages[0].Controls.Add(ui_ctr); this.list_UI.Add(ui_ctr); }