5

我有一个功能,我可以对出现的窗口做出反应。现在我想知道出现的窗口是否是一个消息框。如果它是一个,我想阅读它的文本。

我已经能够通过以下方式提取 Window-Title、Class-Name 和 Process-Id

[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);

但是我怎样才能找到消息框的文本呢?

要获得所有窗口,我正在使用它:

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;
    }
}
4

1 回答 1

1

我不知道你到底在尝试什么,但你可以:

  1. FindWindow
  2. GetDlgItem并使用提取文本
  3. GetWindowText

由于 MessageBoxes 是静态类型 (0xFFFF),因此您应该像这样使用GetDlgItemGetWindowText

IntPtr dlgHandle = GetDlgItem(MboxHandle, 0xFFFF);
GetWindowText(dlgHandle, yourStringBuilder, maxTextCount);
于 2013-02-21T11:52:28.533 回答