我有一个功能,我可以对出现的窗口作出反应。现在我想知道出现的窗口是否是Messagebox。如果它是一个,我想阅读它的文本。
我已经能够通过
提取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;
}
}
答案 0 :(得分:1)
我不知道你在做什么,但你可以:
FindWindow
GetDlgItem
并使用GetWindowText
由于MessageBoxes的类型为static(0xFFFF),因此您应该使用GetDlgItem
和GetWindowText
,如下所示:
IntPtr dlgHandle = GetDlgItem(MboxHandle, 0xFFFF);
GetWindowText(dlgHandle, yourStringBuilder, maxTextCount);