0

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

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 调用。我真的很感激任何建议。

谢谢 :)

4

2 回答 2

0

很抱歉延迟发布解决方案。VBForums.com 的 EdgeMeal 帮助我找到了解决此问题的方法。您可以在此处查看详细信息:vbforums.com 上的线程

而对于提升权限,也就是在应用启动时请求Admin权限,我们需要改变这个requestedExecutionLevel值。要更改此设置,请转到项目属性(项目菜单 --> 属性)。然后从Application选项卡中,单击View Windows Settings按钮。这将打开app.manifest文件。在此,更改以下行(未注释的行):

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

至:

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

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

顺便说一句,我假设您将使用 VB2010。以上步骤适用于VB2010(不知道其他版本是否也一样)。

希望它对正在解决同样问题的人有所帮助。:)

于 2012-10-03T08:57:52.160 回答
0

Do Until您可以在and之间使用以下语句SetParent

System.Threading.Thread.Sleep(250)

于 2013-10-22T09:12:55.013 回答