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のスレッド

また、権限を上げるため、つまりアプリケーションの起動時に管理者権限を要求するには、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との間で次のステートメントを使用できますSetParent

System.Threading.Thread.Sleep(250)

于 2013-10-22T09:12:55.013 に答える