有关win32的多进程窗口所有权的MSDN文档在哪里? (chrome使用此)

时间:2009-12-11 00:57:04

标签: multithreading winapi process

MSDN文档在哪里描述了多个进程如何在Google Chrome等其他进程中控制和拥有其他窗口?

4 个答案:

答案 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中没有任何支持它的内容。您可以使用SetParentSetWindowLongPtr与GWLP_HWNDPARENT分别更改为窗口的父级和所有者,并且您可以使用SendMessage()自由选择任何窗口消息到另一个进程窗口。

如果您想在两个差异进程之间移动任何数据,您正在查看Inter-process Communication(IPC),Windows有多种方法可以做。

答案 3 :(得分:0)

我不知道Chrome是以同样的方式做到这一点,但是过程中COM服务器多年来一直在做类似的事情。例如,当您将COM对象嵌入到文档中时,双击该对象以将其打开以进行编辑,您可以通过以下两种方式之一打开它。提供该内容的应用程序可以提供在宿主应用程序内进行处理的DLL。或者,您可以获得就地激活,其中提供嵌入内容的应用程序在托管应用程序内部打开。它通常会将自己的菜单条目添加到菜单中,并接管显示区域。

使就地激活工作很难,因为它需要在彼此之间几乎无视的应用程序之间进行协作。然而,在类似Chrome的情况下,所涉及的过程都是一起开发的,并且对彼此如何工作有着深入的了解,所以这样做不应该那么复杂。

我应该补充一点,我并没有真正看过Chrome,所以我不确定这是怎么回事。我只是指出这绝对是可能的,我们中的很多人都是之前做过的。现在它并没有那么重要,但我很确定操作系统应该仍然支持它。