在C# winforms应用程序中的窗体内启动vncviewer进程

nfs0ujit  于 2023-10-23  发布在  C#
关注(0)|答案(1)|浏览(274)

我尝试在winforms应用程序中的一个表单中启动一个vncviewer进程。
我没有看到任何错误或异常,但进程在winforms之外启动。我不能把它包含在我的形式中。这是我尝试过的。我调试并注意到setparent函数没有改变窗体的窗口句柄。

ProcessStartInfo info = new ProcessStartInfo();

 info.Arguments = hostIP;
 info.FileName = @"C:\Program Files\RealVNC\VNC Viewer\vncviewer.exe";
 info.UseShellExecute = true;
 info.CreateNoWindow = true;
 info.WindowStyle = ProcessWindowStyle.Normal;
 Process pDocked = Process.Start(@"C:\Program Files\RealVNC\VNC Viewer\vncviewer.exe");
 DictionaryClass.hostVNCName = pDocked.ProcessName;
 pDocked.WaitForInputIdle();
 appwin = pDocked.MainWindowHandle;              
 SetParent(appwin, this.Handle);
d8tt03nd

d8tt03nd1#

如果您已经正确理解了您的问题,那么您希望在一个应用程序界面中显示外部应用程序。如果是这样的话,您可以直接调用系统中的DLL库,调用SetParent函数,如下图所示:

[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

注意:使用“DllImport”可能会出现错误信息。仅包括以下内容:

using System.Runtime.InteropServices;

然后以这种方式添加下面的代码:

Process pDocked = Process.Start(@"C:\Program Files\RealVNC\VNC 
Viewer\vncviewer.exe");
pDocked.WaitForInputIdle();
while (pDocked.MainWindowHandle == IntPtr.Zero)
{
    Thread.Sleep(100);
    pDocked.Refresh();
}
SetParent(pDocked.MainWindowHandle, this.Handle);

相关问题