有没有办法让窗口在窗口中包含自定义应用程序
Is there a way to have a window contain custom applications in windows?
这有点古怪,虽然不完全,但我在想是否有办法创建一个可以包含自定义应用程序的窗口(即 *.exe)。例如,有一个主窗口,并在一个选项卡中包含应用程序 1,在另一个选项卡中包含应用程序 2。不确定到底要标记什么,所以只是抛出一些可能有用的标签。
可以这样做。调用 Win32 函数SetParent
,使应用程序的主窗口成为其中一个窗口的子窗口。
然而,试图这样做很少有好结果。总是其他应用程序不希望您这样做并且与之不兼容。这样做会严重限制这些进程的输入队列。
Raymond Chen 在博客中写道:调用跨进程父/子或所有者/拥有的窗口关系是否合法?
在不同进程的窗口之间建立父/子或所有者/拥有关系在技术上是否合法?
是的,这在技术上是合法的。
玩弄电锯在技术上也是合法的。
创建跨线程父/子或所有者/拥有的窗口关系隐式附加这些窗口所属线程的输入队列,并且此连接是可传递的:如果其中一个队列附加到第三个队列,则所有三个队列都相互附加。更一般地说,由父/子或所有者/拥有或共享线程关系链相关的所有窗口的队列相互附加。
当父/子或所有者/拥有关系跨进程时,这变得更加复杂,因为跨进程协调比跨线程协调更难。在流程中共享变量比在流程之间共享变量要容易得多。最重要的是,某些窗口消息在进程之间被阻止。
所以是的,这在技术上是合法的,但是如果您创建跨进程的父/子或所有者/所有者关系,后果可能很难管理。如果所涉及的一个或两个窗口不知道它正在参与跨进程窗口树,则它们几乎无法管理。(我经常在这样的背景下看到这个问题:有人想抓住属于另一个进程的窗口,强行将其嫁接到自己的进程中。另一个进程完全没有准备好以这种方式操纵它的窗口,事情可能会停止工作。实际上,如果将另一个窗口从顶级窗口更改为子窗口,则事情肯定会停止工作。
您甚至可以这样做是对为 16 位 Windows 编写的代码的向后兼容性 sop。它在现代Windows中确实没有位置。
可以使用WinForms MDI主机在窗口内运行窗口。但是,运行通用.exe文件,如果没有您希望它符合的特定标准,将是困难或不可能的。
如果您使用的是Visual Studio
右键单击工具箱
单击"选择项目..."
等待愚蠢的时间
browse to your exe
pick the controls
请注意,代码仍需要能够在运行时解析控件,这意味着部署 .NET 程序集,或者对于 ActiveX 部署互操作程序集并注册 COM dll。
在正在运行的窗体应用程序中托管单独的 exe 并非易事;您必须生成 exe (Process.Start),然后使用 win32 调用来获取适当的窗口句柄,目的是将窗口重新设置为您自己的窗口。这是一个合理的工作量,很容易出错,而且非常脆弱(如果你无聊它,就会发生糟糕的薄)。就个人而言:我根本不会。
- Javascript,包含窗口边缘内的图像
- 如何找到td类并检查它是否包含类,然后我需要显示弹出窗口
- 仅包含某些数组值的单个弹出窗口.JavaScript
- 尝试在主窗口中包含子窗口
- 打开包含帖子数据的弹出窗口
- 检查打开的浏览器窗口是否包含特定字符串
- 关闭包含 silverlight 的 Javascript 弹出窗口
- 在将灯箱添加到我的网站时遇到问题.只是得到一个只包含图片而不是弹出窗口的页面
- 将鼠标悬停在表行上时,如何显示包含该行字段数据的弹出窗口
- 如何在调整窗口大小时重新加载网页,并且仅当它包含特定的 HTML 元素时
- 如何在优胜美地中打开一个新的Chrome窗口,其中包含javascript自动化
- 当通过导入包含 jQuery 时,窗口加载事件不会触发
- 包含小程序的窗口
- JavaScript.打开包含一些内容的窗口
- 打开一个新窗口,其中包含从 XMLHttpRequest 返回的 blob 对象中的 PDF 数据
- HTML 弹出窗口,其中包含表单提交的链接
- 打开包含数据而不是 window.print 事件的新窗口
- 打开对话框,其中包含在使用 magnificPopup 构建的弹出窗口中跟随 URL 返回的结果
- 试图弹出包含一个表单的窗口,但表单未显示-extjs 5
- Javascript不会打开包含表格和表单的弹出窗口