0

我通过使用 Process.Start 方法并传递一个 .rdp 文件来启动一个远程应用程序。除了这个 .rdp 文件会导致打开两个窗口之外,这工作正常。我需要处理这两个窗口,以便可以将它们设置为 TopMost 窗口。我需要它们都留在主机应用程序前面。

我相信我应该使用 FindWindowByCaption(IntPtr.Zero, "targetProcess.exe") 但是当我在 Process.Start 之后调用它时它会失败,因为窗口尚未打开。如何在调用 FindWindowByCaption 之前等待此窗口打开。这是我到目前为止所拥有的:

                if (gcsMenuItem.ItemUrl.EndsWith(".rdp", StringComparison.InvariantCultureIgnoreCase))
                {                        
                    string fileName = gcsMenuItem.ItemUrl.Split(':')[1];
                    targetProcess = Process.Start(GetProjectDataPath() + fileName);

                    targetProcess.WaitForInputIdle();

                    while (true)
                    {
                        IntPtr hWnd = FindWindowByCaption(IntPtr.Zero, "targetProcess.exe");
                        if (hWnd != IntPtr.Zero)
                        {
                            break;
                        }
                    }
                    targethWnd = targetProcess.MainWindowHandle;
                    

                }

我的 while 循环不好,因为它会阻塞 UI。当 .rdp 启动时,用户首先获得一个登录窗口,然后在登录后打开两个窗口。这些是我需要设置为 TopMost 的。

要设置 TopMost,我相信我需要使用类似的东西: SetWindowPos(hostWpfWindowHandle, HWND_TOPMOST, x, y, width, height, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW | SWP_NOREDRAW);

4

0 回答 0