2017-10-26 8 views
6

プロセスウィンドウでスクリーンショットを撮る7 64ビット、問題は、私は常に次の行でエラーが出るということですパラメータ」、私はエラーと幅と高さは、それがうまく働いたが、今は64ビットで、それはもう動作しない32ビットで前に常に0私は、Windowsのプロセスのウィンドウにスクリーンショットを作成しようとしています

ある見るためにスローを作りました。

コード:

public void CaptureApplication() 
{ 
    string procName = "firefox"; 

    var proc = Process.GetProcessesByName(procName)[0]; 
    var rect = new User32.Rect(); 
    User32.GetWindowRect(proc.MainWindowHandle, ref rect); 

    int width = rect.right - rect.left; 
    int height = rect.bottom - rect.top; 

    var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb); 
    Graphics graphics = Graphics.FromImage(bmp); 
    graphics.CopyFromScreen(rect.left, rect.top, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); 

    bmp.Save("c:\\tmp\\test.png", ImageFormat.Png); 
} 

private class User32 
{ 
    [StructLayout(LayoutKind.Sequential)] 
    public struct Rect 
    { 
     public int left; 
     public int top; 
     public int right; 
     public int bottom; 
    } 

    [DllImport("user32.dll")] 
    public static extern IntPtr GetWindowRect(IntPtr hWnd, ref Rect rect); 
} 

がどのように私はこのエラーを修正しますか? Firefoxのプロセスを取得

+0

おそらくプロセス名が 'firefox.exe'ですか? –

+0

私はそれをしました、そしてそれは同じエラーです。 – Chris

+3

'GetWindowRect'の戻り値もチェックする必要があります。' IntPtr.Zero'を返すと、そのステップで何かが間違っていました。 –

答えて

2

は、プロセスの配列を返し、あなたはメインプロセスで現実的なサイズの長方形で1を探しています。

Process[] procs = Process.GetProcessesByName(procName); 
var rect = new User32.Rect(); 
int width = 0; 
int height = 0: 
foreach (Process proc in procs) 
{ 
    User32.GetWindowRect(proc.MainWindowHandle, ref rect); 
    width = rect.right - rect.left; 
    height = rect.bottom - rect.top; 
    // break foreach if an realistic rectangle found => main process found 
    if (width != 0 && height != 0) 
    { 
     break; 
    } 
} 
+0

Internet Explorer(1つのインスタンス、4つのタブ)で動作するようです。非ゼロの四角形のプロセスが1つだけです。 Google Chrome(1つのインスタンスの1つのタブ)では、3つの非ゼロサイズの長方形(すべて同じ)で7つのプロセスがありましたが、そのためには機能しません。私はFireFoxを持っていないので、それについてコメントすることはできません。 – PaulF

+0

@PaulFは、0値が許可されているが矩形ではないことがより意味のある変更を加えました。今はクロムにも対応していますか?私の仕事では、私は2番目の画面にクロムを開いています。 –

+1

助けてくれてありがとう。 – Chris

関連する問題