我想启动一个外部应用程序并获取其连接按钮的句柄。 我得到了顶级“000A0B32”,我可以 100% 正确。 然后我试图获取子元素“000F0C58”并获取其下方的“连接”按钮。但是获取“000F0C58”经常失败。 取而代之的是“000F0C58”,你可以在顶层得到同级别的“000D0B94”
我在 FindWindowsEx 中显式显示父句柄。 我不明白为什么我得到不相关的句柄。 “000F0C58”和“000D0B94”都没有Caption,不能为FindWindowsEx添加条件
我正在研究如何从所有句柄中获取匹配的内容(如进程 ID),但这只是一个替代方案。我相信正确使用 FindWindowsEx 会保证结果,我想知道我做错了什么。
你可能已经注意到,我的英语不好。 简单的英语或代码示例将帮助我。
Process.Start(@"C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe")
{
Process[] vpnui = this.GetProcessesByName("vpnui");
if (vpnui.Length != 0 && vpnui[0] != null)
{
mainChildHwnd = FindWindowEx(vpnui[0].MainWindowHandle, IntPtr.Zero, "#32770", null);
if (mainChildHwnd != null && mainChildHwnd != IntPtr.Zero)
{
IntPtr connectButtonHwnd = FindWindowEx(mainChildHwnd, IntPtr.Zero, "Button", "Connect");
if (connectButtonHwnd != null && connectButtonHwnd != IntPtr.Zero)
{
SendMessage(connectButtonHwnd, WM_LBUTTONDOWN, MK_LBUTTON, 0x000A000A);
SendMessage(connectButtonHwnd, WM_LBUTTONUP, 0x00000000, 0x000A000A);
}
}
}
}