这是我用来在图片框中运行另一个应用程序的示例代码:
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调用。我真的很感激任何建议。
谢谢:)
答案 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 Until
和SetParent
之间使用以下语句:
System.Threading.Thread.Sleep(250)