Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在应用程序B中创建一个窗口,以便应用程序a可以使用它进行渲染,而不是使用它';自己的窗口_C++_Winapi - Fatal编程技术网

C++ 如何在应用程序B中创建一个窗口,以便应用程序a可以使用它进行渲染,而不是使用它';自己的窗口

C++ 如何在应用程序B中创建一个窗口,以便应用程序a可以使用它进行渲染,而不是使用它';自己的窗口,c++,winapi,C++,Winapi,各位,如果这听起来像是一个新手问题,我很抱歉,但我对整个Windows开发不是很熟悉。所以我得到了一个应用程序A,它可以做很多事情,一个特殊的功能是渲染鸭子图片。它在内部创建了一个名为“DrawingBoard”的窗口,稍后当程序准备好渲染时,它将尝试查找这个“DrawingBoard”窗口。我只被告知,这就是应用程序A如何找到渲染鸭子的窗口: static const TCHAR TITLE_NAME[] = "DrawingBoardParent"; static

各位,如果这听起来像是一个新手问题,我很抱歉,但我对整个Windows开发不是很熟悉。所以我得到了一个应用程序A,它可以做很多事情,一个特殊的功能是渲染鸭子图片。它在内部创建了一个名为“DrawingBoard”的窗口,稍后当程序准备好渲染时,它将尝试查找这个“DrawingBoard”窗口。我只被告知,这就是应用程序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);
     }
现在我需要创建应用程序B,我想在应用程序B上创建我自己的“DrawingBoard”窗口。因为应用程序A使用上述算法查找渲染窗口,而不是使用它自己的应用程序A“DrawingBoard”窗口,它将使用我的应用程序B“DrawingBoard”窗口

问题:

1) 这完全是可能的吗? 2) 假设两个应用程序A和B都有两个标题相同的窗口“DrawingBoard”。FindWindowEx(NULL,NULL,NULL,DrawingBoard)返回哪一个? 3) 如果FindWindowEx总是返回应用程序A“DrawingBoard”窗口的句柄。我如何破解它,使其返回应用程序B“DrawingBoard”窗口

谢谢大家的帮助

假设应用程序A和B都有两个标题相同的窗口
“DrawingBoard”
。哪个窗口返回

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

如果FindWindowEx始终返回应用程序的句柄,则返回“DrawingBoard”窗口。如何破解它,使其返回应用程序B“DrawingBoard”窗口

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


通过为窗口使用不同的名称,您可以避免被此应用程序发现。但是,您确实应该修复或删除有缺陷的程序。这是明智的前进之路

你需要修复完全损坏的应用程序A。不幸的是,我没有应用程序A的源代码:(因此,您必须删除有缺陷的应用程序,或使用不同的窗口名称。从创建窗口的线程以外的线程修改窗口会带来麻烦。如果您非常熟悉窗口管理器,则可以使其正常工作,并控制两个应用程序。由于您不控制其中一个应用程序,因此您必须查看另一个解决方案。