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

MessageBox は静的 (0xFFFF) 型であるため、次のように使用する必要がGetDlgItemありGetWindowTextます。

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