2013-02-21 10 views
5

私は出現するウィンドウに反応することができる機能を持っています。今私は、表示されるウィンドウがメッセージボックスであるかどうかを知りたい。それが1つの場合は、私はそれのテキストを読んでみたい。ウィンドウがメッセージボックスであることを確認します

私はすでに

[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)この種のもののために設計されています。 –

答えて

1

私はあなたが正確にしようとしているのか分からないが、次のことができます。

  1. FindWindow
  2. GetDlgItemやテキストを抽出します使用例:
  3. GetWindowText

メッセージボックスがタイプ静的(0xFFFFの)であるので、あなたはこのようにGetDlgItemGetWindowTextを使用する必要があります:[アクセシビリティとオートメーション]のために管理クラスを使用しない理由

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

ありがとうございました。できます :) – Tomtom

関連する問題