首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# FindWindowEx -我找不到Teamviewer

C# FindWindowEx -我找不到Teamviewer
EN

Stack Overflow用户
提问于 2022-01-22 07:02:55
回答 1查看 132关注 0票数 1

我有一个程序运行在我的PC上,通过TeamViewer控制另一台机器。除了发送鼠标单击要求TeamViewer位于前台之外,所有操作都很好。我有将鼠标点击发送到像记事本这样的程序的代码,在那里编辑面板被称为“编辑”。但是TeamViewer面板名为TV_REMOTEDESKTOP_CLASSFindWindowEx无法找到它的句柄。

这是我的代码:

代码语言:javascript
复制
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做错了什么并指出正确的方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-22 09:21:56

假设通过WinGetHandle("axie_machine"),您将使用(其标题的一部分)获取TeamViewer窗口的句柄,然后,实际上您将得到顶级窗口的句柄,而您的目标窗口的类为"TV_REMOTEDESKTOP_CLASS“并不是该窗口的子窗口。它是它的后代之一,但不是一个直接的孩子。在中间有一个父窗口,如下所示:

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

代码语言:javascript
复制
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“在我的电视版本,但它可能是不同的,如果你使用另一个版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70810710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档