如何在App B中创建一个窗口,以便App A可以使用它来渲染而不是使用它自己的Window

时间:2015-11-07 11:33:06

标签: c++ winapi

伙计们,如果这听起来像是一个新手问题我很抱歉,但我对整个Windows开发并不十分熟悉。所以我给了App A,它做了很多事情,一个特殊的功能就是渲染一张鸭子图片。在内部,它创建了标题为“DrawingBoard”的Window,稍后当程序准备渲染时,它将尝试找到这个“DrawingBoard”窗口。我只被告知这是App A找到渲染鸭子的窗口的方式:

     static const TCHAR TITLE_NAME[] = "DrawingBoardParent";   
     static const TCHAR TITLE_CLASS_NAME[] = "DrawingBoard";

     HWND parent = FindWindowExA(NULL, NULL, NULL, TITLE_NAME);
     while (parent != NULL)
     {
        //find the child window by window title
        window = findWindowRecursive(parent, TITLE_CLASS_NAME);
        if (window != NULL)
        {
           break;
        }
        //no child by the given title name found, go down one level
        parent = FindWindowExA(NULL, parent, NULL, TITLE_NAME);
     }

现在我需要创建App B,我想在App B上创建自己的“DrawingBoard”窗口。因为App A使用上面的算法来查找渲染窗口,而不是使用它自己的App A“DrawingBoard”窗口,它将使用我的App B“DrawingBoard”窗口。

问题:

1)这是否属于可能性范围? 2)如果App A& B有两个窗口,标题相同“DrawingBoard”。 FindWindowEx中有哪一个(NULL,NULL,NULL,“”DrawingBoard“);返回? 3)如果FindWindowEx总是返回App A“DrawingBoard”窗口的句柄。我如何破解它以便它将返回App B“DrawingBoard”窗口。

感谢帮助人员。

1 个答案:

答案 0 :(得分:0)

  

如果App A& B有两个标题为"DrawingBoard"的窗口。 FindWindowEx(NULL, NULL, NULL, ""DrawingBoard")返回哪一个?

这是不明确的。它将返回其中一个。您无法影响返回的内容。

  

如果FindWindowEx总是返回App A" DrawingBoard"的句柄。窗口。我如何破解它以便它将返回App B" DrawingBoard"窗口。

你做不到。另一个应用程序坏了。它搜索它创建的窗口是破坏的,因为它可能产生错误的窗口,一个来自另一个进程的窗口。

您可以使用窗口的其他名称来避免被此应用程序捕获。但是你真的应该修复或删除有缺陷的程序。这是明智的前进方向。