我有一个WPF可执行文件,我希望另一个程序启动它并将此启动程序设置为我的WPF可执行文件的父窗口(主要目的是当启动程序关闭时,WPF可执行文件也会关闭)。我想我可以这样做:我将Hwnd作为一个命令行参数(如integer-string)传递,并且我可以调用SetParent或WPF可执行代码内的任何函数来指定父级。但是,我无法让它工作。任何人都可以告诉我该怎么做,或者其他任何方式来做到这一点?谢谢!启动WPF可执行文件并设置父级?
回答
你不能。窗口句柄是每个进程。
此外,你不想。在另一个线程中有一个父窗口 - 这会导致两个线程的消息队列被连接,即它们有效地共享相同的消息队列。所以现在如果或者线程锁定,或者做了一些冗长的处理,两个线程都被冻结。 (就我所知,没有办法稍后分离消息队列。)想象一下,试图扩展这个跨进程。
如果您必须启动一些新代码并使用现有窗口作为父项,则无法进行跨进程。您必须将WPF代码加载到您的流程中,并调用其中的方法,将父窗口作为参数传递。将代码加载到进程中的最简单方法是将您的WPF应用程序更改为类库(.dll),并添加对该.dll的引用,或使用反射动态加载它。
正如@Joe说白了,你不能做到这一点通俗易懂...我想我能“猜”你在....
让你可能有一个WinForm MDI父(其EXE的话)和您想要启动另一个WPF窗口(另一个exe)作为其子。我对么?
Hmmmm,那么你就必须创建一个新的WinForm
子窗口,在它WinFormWPFHostApp
,然后参考WPF的组件,以这个项目,并尝试从其他WPF应用程序托管MainWindow
的Content
。
参考this文章...
谢谢你的回复。我想我们的情况更加复杂:我们在MS Access中有一个传统的SW wirtten。我们希望切换到.Net,但这一定很长。所以现在我们想用.Net来实现一些新的需求,但显然必须将它与我们传统的MS Access软件整合在一起。所以,我的问题来了。 – tete
- 1. 如何以实时优先级启动可执行文件?
- 2. Visual Studio启动可执行文件并自行启动它的区别?
- 3. 启动本地可执行文件Javascript
- 4. 从网站启动可执行文件?
- 5. 莺可执行文件无法启动
- 6. WPF启动画面执行
- 7. Aptana 3 - 设置PHP可执行文件
- 8. 从可执行文件设置变量
- 9. 与DLL弹簧启动可执行文件的可执行文件
- 10. 什么可执行文件启动了我的可执行文件?
- 11. 启动可执行文件时出错,未连接配置的ios设备
- 12. 主要可执行文件运行启动程序可执行文件,然后启动程序运行主要可执行文件
- 13. WPF - 从样式设置器ControlTemplate内部访问父级控件
- 14. 在Xcode中设置活动的可执行文件
- 15. 在Xcode中设置默认的活动可执行文件
- 16. 通过Netbeans上的文件启动任意可执行文件
- 17. 如何设置从Windows批处理文件启动可执行文件时的进程优先级,而无需启动终端
- 18. 在QML组件中与父级分开设置父上下文
- 19. 在父级上执行UserControl事件
- 20. 春分启动可执行
- 21. 启动器不可执行
- 22. xcode:在路径上没有可启动的可执行文件
- 23. 如何从命令行启动XCode可执行文件
- 24. 在Visual Studio中启动.NET可执行文件进行调试?
- 25. 在CustomTaskPane控件上设置父级?
- 26. PHP启动同时执行文件
- 27. php设置值在父级
- 28. 如何在Windows重启后自动启动自己的可执行文件?
- 29. 如何从现代浏览器中启动可执行文件?
- 30. 从Python脚本启动时,外部可执行文件崩溃
谢谢你的回复。尽管我对互操作性的经验不多,但我明白你的观点。但我想问一个更技术性的问题:如果我将.exe更改为.dll(所以现在它在同一个线程中),我可以如何设置父级?我尝试使用Declare Function来使用Windows API的Findwindow和SetParent函数,但仍不知道如何获取可执行窗口的Hwnd。谢谢! – tete
设置Window.Owner属性。 http://msdn.microsoft.com/en-us/library/system.windows.window.owner.aspx –