2013-02-21 17 views
5

Ich habe eine Funktion, wo ich auf erscheinende Fenster reagieren kann. Jetzt möchte ich wissen, ob das erscheinende Fenster eine Messagebox ist. Und wenn es eins ist, möchte ich den Text davon lesen.Überprüfen, ob Fenster eine MessageBox ist

Ich bin bereits in der Lage, den Window-Titel, Class-Namen und die Prozess-ID von

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

Aber wie kann ich den Text eines messagebox herauszufinden, zu extrahieren?

Um alle Fenster bekomme ich dieses verwende:

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; 
    } 
} 
+2

Anstatt um mit Fenstermeldungen Stossen, etc, warum nicht auch die verwalteten Klassen für [Zugänglichkeit und Automation] verwenden (http://msdn.microsoft.com/en-us/library/ms753388.aspx), die für diese Art von Sache konzipiert sind. –

Antwort

1

Ich weiß nicht, was Sie genau möchten, jedoch können Sie:

  1. FindWindow
  2. GetDlgItem und den Text extrahieren mit
  3. GetWindowText

Da Message vom Typ statisch (0xFFFF) sind, sollten Sie GetDlgItem und GetWindowText wie folgt verwenden:

IntPtr dlgHandle = GetDlgItem(MboxHandle, 0xFFFF); 
GetWindowText(dlgHandle, yourStringBuilder, maxTextCount); 
+0

Vielen Dank Muttu. Es klappt :) – Tomtom

Verwandte Themen