C++ 如何在应用程序B中创建一个窗口,以便应用程序a可以使用它进行渲染,而不是使用它';自己的窗口
各位,如果这听起来像是一个新手问题,我很抱歉,但我对整个Windows开发不是很熟悉。所以我得到了一个应用程序A,它可以做很多事情,一个特殊的功能是渲染鸭子图片。它在内部创建了一个名为“DrawingBoard”的窗口,稍后当程序准备好渲染时,它将尝试查找这个“DrawingBoard”窗口。我只被告知,这就是应用程序A如何找到渲染鸭子的窗口:C++ 如何在应用程序B中创建一个窗口,以便应用程序a可以使用它进行渲染,而不是使用它';自己的窗口,c++,winapi,C++,Winapi,各位,如果这听起来像是一个新手问题,我很抱歉,但我对整个Windows开发不是很熟悉。所以我得到了一个应用程序A,它可以做很多事情,一个特殊的功能是渲染鸭子图片。它在内部创建了一个名为“DrawingBoard”的窗口,稍后当程序准备好渲染时,它将尝试查找这个“DrawingBoard”窗口。我只被告知,这就是应用程序A如何找到渲染鸭子的窗口: static const TCHAR TITLE_NAME[] = "DrawingBoardParent"; static
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的源代码:(因此,您必须删除有缺陷的应用程序,或使用不同的窗口名称。从创建窗口的线程以外的线程修改窗口会带来麻烦。如果您非常熟悉窗口管理器,则可以使其正常工作,并控制两个应用程序。由于您不控制其中一个应用程序,因此您必须查看另一个解决方案。