C# FindWindowEx - 我找不到 Teamviewer 面板

C# FindWindowEx - I Can't Find Teamviewer Panel

我的 PC 上有一个程序 运行,它通过 TeamViewer 控制另一台机器。除了发送鼠标单击需要 TeamViewer 位于前台外,一切正常。我有代码将鼠标点击发送到记事本等程序,其中编辑面板称为“编辑”。但是 TeamViewer 面板被调用 TV_REMOTEDESKTOP_CLASS 并且 FindWindowEx 找不到它的句柄。

这是我的代码:

IntPtr handle = WinGetHandle("axie_machine");
if (handle != IntPtr.Zero)
{
    var panel = FindWindowEx(handle, IntPtr.Zero, "TV_REMOTEDESKTOP_CLASS", null);
    PerformRightClick(panel, new Point(200, 200));
}

这是显示面板细节的 Spy++ 图片

FindWindowEx returns 0x000000.

谁能看到我在 FindWindowEx 上做错了什么并指出正确的方向?

假设 WinGetHandle("axie_machine"),您使用(部分)标题获得了 TeamViewer window 的句柄,那么,您实际上获得了 top-level window 你的目标 window which class is "TV_REMOTEDESKTOP_CLASS" is not a child of.它是它的后代之一,但不是直接 child。中间有一个 parent window,如您所见:

因此,更改您的代码以获取目标“面板”的 parent window,然后使用它到达目标。代码应如下所示:

IntPtr tvWindowHandle = WinGetHandle("axie_machine");
if (tvWindowHandle != IntPtr.Zero)
{
    var panelParent = FindWindowEx(tvWindowHandle, IntPtr.Zero, "ATL:03B8D350", null);
    if (panelParent != IntPtr.Zero)
    {
        var panel = FindWindowEx(panelParent, IntPtr.Zero, "TV_REMOTEDESKTOP_CLASS", null);
        PerformRightClick(panel, new Point(200, 200));
    }
}

注意:您可能想要 double-check class 的 parent window。在我的电视版本中它是“ATL:03B8D350”,但如果您使用的是其他版本,它可能会有所不同。