C# FindWindowsEx 无法获取子句柄

问题描述 投票:0回答:0

我想启动一个外部应用程序并获取其连接按钮的句柄。 我得到了顶级“000A0B32”,我可以 100% 正确。 然后我试图获取子元素“000F0C58”并获取其下方的“连接”按钮。但是获取“000F0C58”经常失败。 取而代之的是“000F0C58”,你可以在顶层得到同级别的“000D0B94”

Spy++

我在 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);
            }
        }
    }
}
c# user32 hwnd
© www.soinside.com 2019 - 2024. All rights reserved.