Mam funkcję, w której mogę reagować na pojawiające się okna. Teraz chcę wiedzieć, czy pojawiające się okno to Messagebox. A jeśli tak jest, chcę przeczytać jego tekst.Sprawdź, czy okno to MessageBox
jestem już w stanie wyodrębnić okien Tytuł, nazwa-klasy i procesu Id przez
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
internal static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
[DllImport("user32.dll")]
internal static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
Ale jak mogę dowiedzieć się tekst messagebox?
Aby uzyskać wszystkie okna używam to:
internal static class WindowFinder
{
private static readonly List<IntPtr> listWindows = new List<IntPtr>();
private static bool IsWindowOrDialog(IntPtr hwnd, int lParam)
{
if (NativeMethods.IsHungAppWindow(hwnd) || !NativeMethods.IsWindowVisible(hwnd))
return true;
listWindows.Add(hwnd);
return true;
}
internal static IEnumerable<IntPtr> GetAllWindows()
{
listWindows.Clear();
NativeMethods.EnumWindows(IsWindowOrDialog, IntPtr.Zero);
return listWindows;
}
}
Zamiast grzebać z komunikatów okien itp dlaczego nie korzystać z zarządzanych zajęcia dla [Dostępności i Automatyzacji] (http://msdn.microsoft.com/en-us/library/ms753388.aspx), które są przeznaczone do tego rodzaju rzeczy. –