C#中捕捉对话框的文本内容

 问题的解决思路就是使用EnumWindows遍历所有的顶级父窗口,对每个顶级父窗口使用EnumChildWindows遍历它的所有控件,每个控件其实也是窗口,拿到该控件的句柄后,就可以调用GetWindowText来获取文本信息了。

  具体实现时,首先需要定义以上API函数的回调函数代理:

/// <summary>
/// 回调函数代理
/// </summary>
  public delegate bool CallBack(int hwnd, int lParam);
然后必须针对每个API函数定义代理的实例函数:
/// <summary>
/// 进程回调处理函数
/// </summary>
/// <param name="hwnd"></param>
/// <param name="lParam"></param>
/// <returns></returns>
  public static bool ThreadWindowProcess(int hwnd, int lParam)
{
EnumChildWindows(hwnd,callBackEnumChildWindows, 0);
return true;
}
/// <summary>
/// 窗口回调处理函数
/// </summary>
/// <param name="hwnd"></param>
/// <param name="lParam"></param>
/// <returns></returns>
  public static bool WindowProcess(int hwnd, int lParam)
{
EnumChildWindows(hwnd,callBackEnumChildWindows, 0);
return true;
}
/// <summary>
/// 子窗口回调处理函数
/// </summary>
/// <param name="hwnd"></param>
/// <param name="lParam"></param>
/// <returns></returns>
  public static bool ChildWindowProcess(int hwnd, int lParam)
{
StringBuilder title = new StringBuilder(200);
int len;
len = GetWindowText(hwnd, title, 200);
if(len > 0)
{
if(title.ToString().IndexOf(GlobalManager.ErrorMessage) != -1 )
{
FindError = true;
}
}
return true;
}
最后要定义回调代理的实例
/// <summary>
/// 进程窗口回调函数代理
/// </summary>
  public static CallBack callBackEnumThreadWindows = new CallBack(ThreadWindowProcess);
/// <summary>
/// 窗口回调函数代理
/// </summary>
  public static CallBack callBackEnumWindows = new CallBack(WindowProcess);
/// <summary>
/// 子窗口回调函数代理
/// </summary>
  public static CallBack callBackEnumChildWindows = new CallBack(ChildWindowProcess);
使用的例子:
/// <summary>
/// 客户端是否弹出对话框
/// </summary>
/// <returns></returns>
  public bool IsClientPopupWindows()
{
bool FindError = false;
EnumWindows(callBackEnumWindows,0);
return FindError;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值