1

我有一个程序在我的 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返回 0x000000。

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

4

1 回答 1

1

假设WinGetHandle("axie_machine"),您使用(部分)其标题获得 TeamViewer 窗口的句柄,然后,您实际上获得了类为“TV_REMOTEDESKTOP_CLASS”的目标窗口不是子级的顶级窗口的句柄的。它是它的后代之一,但不是直系孩子。如您在此处看到的,两者之间有一个父窗口:

在此处输入图像描述

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

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));
    }
}

注意:您可能需要仔细检查父窗口的类。在我的电视版本中是“ATL:03B8D350”,但如果您使用其他版本,它可能会有所不同。

于 2022-01-22T09:21:56.130 回答