【解決方法】 Visual Studio C# で *.pdf ファイルを複数の画面(セカンダリ画面)で表示したいと考えています。 それは起こっていません。

プログラミングQA


最初の問題は、ボタンを押したときに、該当するディレクトリにある E:\GG\dosya3.pdf ファイルを複数の画面 (2 番目の画面) に表示したいということです。 主画面に表示されます。 二次画面には表示がありません。

2 番目の問題は、ボタンが押されたときはプライマリ画面で、ボタンが押されたときは 2 番目の画面で、ボタンが押されたときは両方の画面 (プライマリとセカンダリ) で画像を取得したいということです。 お役に立てれば幸いです。

私が試したこと:

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

簡単な Google 検索: C# setwindowpositionセカンダリモニター[^] この詳細な解決策を見つけました: c# – 複数のモニターでSetWindowPosを使用する[^]

解決策 2

コードをコピーしてアプリに貼り付け (PDF リーダーがインストールされていないため、アプリをメモ帳に変更した後)、デバッガーを使用すると、メモ帳が閉じるまで WaitForInputIdle への呼び出しが返されないことがすぐにわかります。 。 したがって、コードはそれを移動しようとしません。

その呼び出しを Thread.Sleep に置き換えると、移動しようとしますが、MainWindowHandle はゼロです。これは、プロセスにウィンドウがないか、プロセスが非表示になっていることを示します。これは、アプリがそれぞれの処理を行うためにサブプロセスを開いたときに発生します。 「共通」コードを非表示にしたまま表示します。

デバッガーを使用して、PDF リーダー プロセスが実際に何を提供しているのかを確認します。ウィンドウ ハンドルを移動するには、ウィンドウ ハンドルにアクセスする別の方法を見つける必要があるかもしれませんが、私にはそれはできません。

コメント

タイトルとURLをコピーしました