Win32:是否有可能构建一个包含其他应用程序的应用程序?

时间:2009-01-19 21:02:59

标签: language-agnostic winapi

我想知道,您如何编写一个基本上包含其他应用程序的应用程序?

我问的原因是我想建立一个应用程序来“征服”我当前爆炸的窗户。我之前使用过虚拟窗口管理器而且它们都很好,但我可以用我提到的应用程序做很多事情。

或者,是否有人知道一个易于使用/直观的应用程序将窗口限制在屏幕的“区域”?像GridMove这样的东西,但更直观,更轻松?

5 个答案:

答案 0 :(得分:1)

我认为你所描述的通常被称为窗口管理器。 Windows shell本身就是一个(糟糕的)窗口管理器的例子。您可能想要研究一些替代方案。我知道将KDE移植到Windows已经取得了一些成功,因此您可能希望查看该项目的当前状态。

微软还提供了一个PowerToy(IIRC),可以为您提供虚拟桌面支持,但它确实很糟糕。您是否考虑过只使用第二台显示器(也许是MultiMon任务栏之类的实用程序,以便在另一台显示器上获得第二个任务栏)?

答案 1 :(得分:1)

您可以创建一个窗口,然后您可以枚举所有具有样式WS_OVERLAPPEDWINDOW的Windows,选择属于您要容纳的应用程序的窗口,然后在窗口上调用SetParent,设置您创建的窗口的父级。您还可以使用FindWindow按标题查找窗口。

房子里面的所有窗户永远不会离开房子窗户的边界,但他们仍然遵循所有相同的规则。您仍然可以点击并拖动窗口等。

这里的问题是,如果房屋内的应用程序创建了另一个窗口,其父窗口很可能是桌面窗口,而不是房屋窗口。

答案 2 :(得分:1)

以下是使用FindWindow / SetParent创建组合不同应用程序的选项卡式视图的代码Jedi Window Dock

我还写了一个应用程序(不是免费的,不是开源的),将这个想法进一步称为WindowTabs

我会给你的唯一警告是,并非所有应用程序都像是父级。如果你写.NET,那里有一些“Gotcha's”(这就是为什么WindowTabs不使用育儿)。

另外,一般来说,一旦你做了一个SetParent,你就会加入一个Wi​​n32级别的线程,这意味着如果一个挂起,所有这些都是toast。

答案 3 :(得分:0)

Multiple Document Interfaces可以帮助你。

尽管多次投票,但我坚持这个答案,因为OP从未说过“爆炸窗口”的来源。我已经看到一次打开几个窗口的业务应用程序(或者打开几个实例“节省时间”的用户),其中MDI对他们来说是一个很好的功能。

如果OP是需要另一个窗口管理器的高级用户,因为他一次运行多个应用程序,那么这实际上并不适用。这也不是我要解决的问题 - 它会找到一种减少窗口的方法。

答案 4 :(得分:0)

一般来说,总有一台VM。

根据您尝试做的具体情况,它可能过度或可能无效。但VMWare将允许您在VM和本地计算机之间复制/粘贴文件和文本,因此它不是一个真正的窗口管理器。考虑到iTunes +典型浏览器占用多少内存,系统要求甚至不是那么令人愤慨。