日期:2014-05-18  浏览次数:20895 次

已经获取到窗体句柄,怎么根据该句柄获取到某一个控件的句柄呢?


假设这个窗体的句柄是mainFrmIntPtr 我怎么获取到 自动开始 那个按钮的句柄.

我的目的就是发送一个窗体消息,实现单击 自动开始 按钮的效果.

我是用C#调用User32.dll的函数来实现发送窗体消息的.

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

IntPtr i = FindWindowEx(mainFrmIntPtr, IntPtr.Zero, null, "&C 控制");

结果i等于0.哪儿有问题?

------解决方案--------------------
不行就继续枚举

[DllImport("user32.dll")]
public static extern int EnumChildWindows(IntPtr hWndParent, EnumWindowsProc ewp, int lParam);


public delegate bool EnumWindowsProc(IntPtr p_Handle, int p_Param);
------解决方案--------------------
用 spy++ 看看具体的关系,然后逐层使用FindWindowEx
------解决方案--------------------
用SendKeys.Send模拟按键
------解决方案--------------------
没有句柄,这种菜单或者工具栏里的菜单或者按钮,都是画出来的,像Label一样,一般没有句柄。模拟按键吧。