在图片框中运行另一个应用程序

时间:2012-08-17 13:03:49

标签: vb.net process

这是我用来在图片框中运行另一个应用程序的示例代码:

Imports System.Diagnostics
Imports System.Runtime.InteropServices
Public Class Form1
    <DllImport("user32.dll")> Public Shared Function SetParent(ByVal hwndChild As IntPtr, ByVal hwndNewParent As IntPtr) As Integer
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim Process1 As New Process
        Process1.StartInfo.FileName = "notepad.exe"
        Process1.Start()

        Do Until Process1.WaitForInputIdle = True
            Application.DoEvents()
        Loop
        SetParent(Process1.MainWindowHandle, PictureBox1.Handle)

    End Sub
End Class

因此,我能够在我的VB2010 WindowsForm中托管另一个应用程序,它工作正常。但问题是,在Windows7中,Windows会要求许可(是否要允许EXE运行)。单击“允许”按钮后,exe应用程序将在其自己的窗口上打开,而不是作为PictureBox的子项打开

我认为当Windows要求权限时,它会跳过SetParent()API调用。我真的很感激任何建议。

谢谢:)

2 个答案:

答案 0 :(得分:0)

对于发布解决方案的延迟表示歉意。来自VBForums.com的EdgeMeal帮助我找到了解决这个问题的方法。您可以在此处查看详细信息:thread at vbforums.com

为了提升权限,即在应用程序启动时要求管理员权限,我们需要更改requestedExecutionLevel值。要更改此设置,请转到项目属性(“项目”菜单 - >“属性”)。然后在Application标签中点击View Windows Settings按钮。这将打开app.manifest文件。在此,更改以下行(未注释的行):

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

为:

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

每当您运行该应用程序时,都会询问管理员权限。即使从IDE运行它,它也会要求使用Admin权限重新打开IDE。

顺便说一句,我以为你会使用VB2010。以上步骤适用于VB2010(不确定其他版本是否也相同)。

希望对有同样问题的人有所帮助。 :)

答案 1 :(得分:0)

您可以在Do UntilSetParent之间使用以下语句:

  

System.Threading.Thread.Sleep(250)