Tôi có một chức năng mà tôi có thể phản ứng khi xuất hiện các cửa sổ. Bây giờ tôi muốn biết nếu cửa sổ xuất hiện là một Messagebox. Và nếu nó là một, tôi muốn đọc các văn bản của nó.Kiểm tra xem cửa sổ có phải là MessageBox
Tôi đã có thể trích xuất các Window-Tiêu đề, Class-Tên và Process-Id bởi
[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);
Nhưng làm thế nào tôi có thể tìm hiểu các văn bản của một bảng thông báo?
Để có được tất cả các cửa sổ tôi đang sử dụng này:
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;
}
}
Thay vì chọc xung quanh với những thông điệp cửa sổ, vv tại sao không sử dụng các lớp học quản lý cho [Khả năng tiếp cận và tự động hóa] (http://msdn.microsoft.com/en-us/library/ms753388.aspx) được thiết kế cho loại điều này. –