我有一个程序运行在我的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做错了什么并指出正确的方向吗?
发布于 2022-01-22 09:21:56
假设通过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“在我的电视版本,但它可能是不同的,如果你使用另一个版本。
https://stackoverflow.com/questions/70810710
复制相似问题