public static bool Enter(string login, string pass) { IntPtr hLoginWnd; hLoginWnd = WinowsFind.FindWindow("#32770", "Идентификация пользователя"); if (hLoginWnd == IntPtr.Zero) { hLoginWnd = WinowsFind.FindWindow("#32770", "User identification"); } if (hLoginWnd == IntPtr.Zero) { return(false); } if (hLoginWnd != IntPtr.Zero) { IntPtr nBtnOk = FindWindowByIndex(hLoginWnd, 1, "Button"); IntPtr hLogin = FindWindowByIndex(hLoginWnd, 1, "Edit"); IntPtr nPassw = FindWindowByIndex(hLoginWnd, 2, "Edit"); setWindowText(hLogin, login); setWindowText(nPassw, pass); WinowsFind.SetFocus(nBtnOk); WinowsFind.PostMessage(nBtnOk, BM_CLICK, new IntPtr(0), new IntPtr(0)); } return(true); }
/// <summary> /// Отправить текст в окно с данными пользователя /// </summary> /// <param name="hWnd"></param> /// <param name="text"></param> private static void setWindowText(IntPtr hWnd, string text) { try { WinowsFind.SetFocus(hWnd); WinowsFind.SendMessage(hWnd, WM_SETTEXT, IntPtr.Zero, null); foreach (char c in text) { Thread.Sleep(50); IntPtr val = new IntPtr((Int32)c); WinowsFind.PostMessage(hWnd, WM_CHAR, val, new IntPtr(0)); } } catch (Exception) { throw; } }
/// <summary> /// Найти дискриптор окна по индексу /// </summary> /// <param name="hWndParent"></param> /// <param name="index"></param> /// <param name="type"></param> /// <returns></returns> private static IntPtr FindWindowByIndex(IntPtr hWndParent, int index, string type) { if (index == 0) { return(hWndParent); } else { int ct = 0; IntPtr result = IntPtr.Zero; do { result = WinowsFind.FindWindowEx(hWndParent, result, type, null); if (result != IntPtr.Zero) { ++ct; } }while (ct < index && result != IntPtr.Zero); return(result); } }