public override void InitHandle() { IntPtr childAfter = IntPtr.Zero; StringBuilder className = new StringBuilder(256); StringBuilder text = new StringBuilder(256); NativeApi.EnumChildWindows(base.HWnd, (hwnd, lParam) => { NativeApi.GetClassName(hwnd, className, 255); string classNameStr = className.ToString(); if (classNameStr.StartsWith(CCCFillManager.ButtonClassName)) { NativeApi.GetWindowText(hwnd, text, 255); string title = text.ToString(); if (title == "保存" || title == "完成") { saveButton = hwnd; } else if (title == "追加") { addButton = hwnd; } text.Clear(); } else if (classNameStr.StartsWith(CCCFillManager.ComboBoxClassName) || classNameStr.StartsWith(CCCFillManager.EditClassName)) { if (ApiSetter.IsEditable(hwnd)) { inputCount++; } } className.Clear(); return(true); }, IntPtr.Zero); do { childAfter = NativeApi.FindWindowEx(base.HWnd, childAfter, null, null); NativeApi.GetClassName(childAfter, className, 255); if (className.ToString().StartsWith(CCCFillManager.ContainerClassName)) { container = childAfter; current = NativeApi.FindWindowEx(container, IntPtr.Zero, null, null); } } while (childAfter != IntPtr.Zero); }
private bool FillValue(string className, ref int index, IntPtr handle, FillValue3C value) { _asyncHandle.Wait(); string parameterValue = null; if (value == null) { return(false); } FillParameter3C parameter = _fillParameters[value.Key] as FillParameter3C; if (index == -1) { parameterValue = value.Value; } else { string[] values = value.Value == null ? null : value.Value.Split(parameter.Separators[0]); parameterValue = (values == null || values.Length <= index) ? (string.IsNullOrEmpty(value.Note) ? "" : value.Note) : values[index]; } StringBuilder text = null; switch (className) { case CCCFillManager.EditClassName: if (ApiSetter.IsEditable(handle, _handle) == false) { index--; break; } ApiSetter.SetText(handle, parameterValue); break; case CCCFillManager.ComboBoxClassName: if (ApiSetter.IsEditable(handle, _handle) == false) { index--; break; } ApiSetter.SetComboBoxSelected(_handle, handle, parameterValue, parameter.IsComboBoxPreciseMatch); break; case CCCFillManager.ButtonClassName: value.Separators = parameter.Separators; text = new StringBuilder(256); NativeApi.GetWindowText(handle, text, 255); if (text.ToString() == "附件" && value != null && string.IsNullOrEmpty(value.AttachFile) == false) { return(ApiSetter.ClickButton(handle, _handle, ListenAttachWindow, value)); } else if (text.ToString() == "编辑") { if (string.IsNullOrEmpty(value.OriginString)) { return(false); } if (string.IsNullOrEmpty(parameter.EditType)) { parameter.EditType = "add"; } switch (parameter.EditType.ToLower()) { case "add": return(ApiSetter.ClickButton(handle, _handle, ListenAddWindow, value)); case "radio": return(ApiSetter.ClickButton(handle, _handle, ListenRadioWindow, value)); case "select": return(ApiSetter.ClickButton(handle, _handle, ListenListBoxWindow, value)); case "multiselect": value.DoubleClick = true; return(ApiSetter.ClickButton(handle, _handle, ListenListBoxWindow, value)); case "text": return(ApiSetter.ClickButton(handle, _handle, ListenTextWindow, value)); case "column": return(ApiSetter.ClickButton(handle, _handle, ListenColumnWindow, value)); case "multinote": return(ApiSetter.ClickButton(handle, _handle, ListenMultiValueAndNoteWindow, value)); default: return(false); } } else { } break; } return(true); }