[ad_1]
我的第一个问题是,我希望按下按钮时相关目录中的 E:\GG\dosya3.pdf 文件显示在多个屏幕(辅助屏幕)上。 它出现在主屏幕上。 副屏幕上没有任何显示。
我的第二个问题是,我想在按下按钮时在主屏幕上获取图像,在按下按钮时在第二屏幕上获取图像,并在按下按钮时在两个屏幕(主屏幕和辅助屏幕)上获取图像。 如果你能帮忙我会很高兴。
我尝试过的:
C#
private void button8_Click(object sender, EventArgs e) { Process p = new Process(); p.EnableRaisingEvents = true; p.StartInfo.WindowStyle = ProcessWindowStyle.Maximized; p.StartInfo.CreateNoWindow = true; p.StartInfo.FileName = @"C:\Program Files (x86)\Foxit Software\ Foxit PDF Reader\FoxitPDFReader.exe"; p.StartInfo.Arguments = @"E:\GG\dosya3.pdf"; p.StartInfo.UseShellExecute = false; p.Start(); p.WaitForInputIdle(); Rectangle secondmonitor = Screen.AllScreens[1].WorkingArea; SetWindowPos(p.MainWindowHandle, 0, secondmonitor.Left, secondmonitor.Top, secondmonitor.Width, secondmonitor.Height, 0); }
解决方案1
快速谷歌搜索: 时间:2019-05-17 标签:c#setwindowposition secondary Monitor[^] 找到了这个详细的解决方案: 将SetWindowPos与多个显示器一起使用 – VoidCC[^]
解决方案2
如果我将您的代码复制并粘贴到我的应用程序中(在将应用程序更改为记事本后,因为我没有安装 PDF 阅读器)并使用调试器,那么很明显,在记事本关闭之前,对 WaitForInputIdle 的调用不会返回。 所以代码永远不会尝试移动它。
如果我用 Thread.Sleep 替换该调用,它会尝试移动它,但 MainWindowHandle 为零 – 表明该进程没有窗口,或者它被隐藏 – 当应用程序打开一个子进程来执行每个操作时,就会发生这种情况显示,同时隐藏“通用”代码。
我将使用调试器并查看 PDF 阅读器进程实际上为您提供了什么:您可能必须找到另一种方法来访问窗口句柄才能移动它 – 但我不能为您做到这一点!
[ad_2]
コメント