winforms 表单内的应用程序

z8dt9xmd  于 2023-03-03  发布在  其他
关注(0)|答案(2)|浏览(161)

我试图在VB.net中运行一个窗口窗体内的应用程序。如果我运行记事本或计算器等应用程序,我可以做到这一点。我的目标是运行我的默认电子邮件客户端发送电子邮件和应用程序运行在我的窗口窗体外,有时给我这个错误:"系统操作无效异常:'进程已退出,因此请求的信息不可用"。是否有解决此问题的方法?
这就是我所做的

Public Class Form1
Dim myProcess As Process = New Process()
Public Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As System.IntPtr

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal
    '
    'myProcess.StartInfo.FileName = "notepad.exe"
    myProcess.StartInfo.FileName = "mailto:test.mail@gmail.com"
    '
    myProcess.Start()
    myProcess.WaitForInputIdle()
    SetParent(myProcess.MainWindowHandle, Me.Handle)
End Sub

结束类别
有人能帮帮我吗?谢谢

wz1wpwve

wz1wpwve1#

你想做的是一个黑客,这么说吧,因为你试图“嵌入”的客户端不支持它。无论如何,你的解决方案将因电子邮件客户端而异。有可能你的电子邮件客户端甚至可以是一个浏览器,现在的浏览器跨越多个进程,你看到的窗口不一定是你启动的窗口,甚至Outlook也是如此。其中,您使用一个主窗口启动进程,而消息窗口可以是另一个顶层窗口,其父窗口是桌面。
在您的情况下,使用MAPI可能是更好的主意。请查看this

muk1a3rh

muk1a3rh2#

你的帖子说你的目标是
运行我的默认电子邮件客户端发送电子邮件.
您可以尝试调用explorer.exe作为目标,并将mailto链接作为参数。

Private Sub ButtonSend_Click(sender As Object, e As EventArgs) Handles ButtonSend.Click
    Process.Start("explorer.exe", "mailto://dummy.email@google.com")
End Sub

相关问题