怎么获取没有标题的消息框

-汪帆- 2012-07-24 05:58:56
我通过我的程序打开另外一个程序A,然后模拟这个程序A的一些操作,操作进行到一个form的时候,
在form里面弹出了一个MessageBox,没有标题,里面只有一个确定按钮
form我已经获取到了,尝试用下面的方法获取MessageBox,但是返回的句柄为0
#32770是用spy获取到的消息框的类名



[DllImport("User32.dll")]
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

IntPtr hwndPlus = FindWindowEx(form.Handle, IntPtr.Zero, "#32770", null);



我是想让程序自动关闭MessageBox,模拟回车也试过了SendKeys.Send(Keys.Enter.ToString()),但是不起作用
...全文
101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
-汪帆- 2012-07-25
  • 打赏
  • 举报
回复
问题已解决,分享一下:

private int messageBoxHandle = 0; // 消息框的句柄

/// <summary>
/// 枚举所有窗口时的回调函数
/// </summary>
/// <param name="hwnd">枚举所有窗口时当前访问的句柄</param>
/// <param name="parentHandle">要查找的窗口的父窗口的句柄</param>
/// <returns></returns>
public delegate bool CallBack(int hwnd, int parentHandle);

[DllImport("user32.dll")]
public static extern int EnumWindows(CallBack callBack, int parentHandle);

[DllImport("user32")]
public static extern int GetParent(int hwnd);

// 获取从parentHandle弹出的消息框
public bool GetMessageBox(int hwnd, int parentHandle)
{
int pHwnd = GetParent(hwnd);
if (pHwnd == parentHandle)
{
this.messageBoxHandle = hwnd;
}
return true;
}

/*** 调用 ***/
// 查找消息框的句柄
EnumWindows(this.GetMessageBox, form.Handle.ToInt32());
ChrisAK 2012-07-24
  • 打赏
  • 举报
回复
#32770是对话框类窗体共用的窗体类,枚举这种窗体再做其它判断就可以了.
要找到一个窗体有很多种方法,FindWindow只是其中之一.

比如:
通过父窗体找:GetParent.

通过进程和线程找:GetWindowThreadProcessId

当然,用这些的前提是你会枚举窗体.

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧