MSDN文档在哪里描述了多个进程如何在Google Chrome等其他进程中控制和拥有其他窗口?
答案 0 :(得分:3)
HWND hNotepad = FindWindow (NULL, TEXT("Untitled - Notepad"));
HWND hMusicFolder = FindWindow (NULL, TEXT("Music"));
SetParent (hMusicFolder, hNotepad);
这将我的音乐文件夹窗口放在记事本中,每个窗口都属于自己的进程,这甚至不是我自己的进程。哦,亲爱的。
这是在XP SP2上完成的。
答案 1 :(得分:0)
您可以使用FindWindow在其他进程中查找句柄。有一系列消息可用于遍历窗口层次结构以查找句柄。
然后,您可以使用PostMessage操作句柄。
有一个库WTL,微软给出了源代码。您可以使用该库,因为其中的控件都有一个可以附加到任何窗口句柄的Attach方法。您可能需要稍微破解它以使用PostMessage而不是SendMessage。
答案 2 :(得分:0)
我不相信有任何关于此的明确文档,因为Win32 API中没有任何支持它的内容。您可以使用SetParent或SetWindowLongPtr与GWLP_HWNDPARENT分别更改为窗口的父级和所有者,并且您可以使用SendMessage()自由选择任何窗口消息到另一个进程窗口。
如果您想在两个差异进程之间移动任何数据,您正在查看Inter-process Communication(IPC),Windows有多种方法可以做。
答案 3 :(得分:0)
我不知道Chrome是以同样的方式做到这一点,但是过程中COM服务器多年来一直在做类似的事情。例如,当您将COM对象嵌入到文档中时,双击该对象以将其打开以进行编辑,您可以通过以下两种方式之一打开它。提供该内容的应用程序可以提供在宿主应用程序内进行处理的DLL。或者,您可以获得就地激活,其中提供嵌入内容的应用程序在托管应用程序内部打开。它通常会将自己的菜单条目添加到菜单中,并接管显示区域。
使就地激活工作很难,因为它需要在彼此之间几乎无视的应用程序之间进行协作。然而,在类似Chrome的情况下,所涉及的过程都是一起开发的,并且对彼此如何工作有着深入的了解,所以这样做不应该那么复杂。
我应该补充一点,我并没有真正看过Chrome,所以我不确定这是怎么回事。我只是指出这绝对是可能的,我们中的很多人都是年之前做过的。现在它并没有那么重要,但我很确定操作系统应该仍然支持它。