2013-02-21 105 views
5

我有一個功能,我可以對出現的窗口作出反應。現在我想知道如果出現的窗口是一個消息框。如果它是一個,我想閱讀它的文本。檢查窗口是否是消息框

我已經能夠通過

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

提取的窗口標題,類名和進程ID,但我怎樣才能找到一個消息的文本?

爲了讓我用這所有窗口:

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

,而不是窗口消息打交道了,等等,爲什麼不使用[輔助功能和自動化的管理類( http://msdn.microsoft.com/en-us/library/ms753388.aspx)這是專爲這種事情。 – 2013-02-21 10:16:06

回答

1

我不知道你在想什麼,但你可以:

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

由於消息框的類型是靜態的(0xFFFF)時,你應該使用GetDlgItemGetWindowText這樣的:

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

非常感謝你的配合。有用 :) – Tomtom 2013-02-21 12:02:32