PrintScreen only active window

后端 未结 6 2057
太阳男子
太阳男子 2021-01-07 08:22

I\'m writing a simple Windows Forms utility to screenshot either the entire screen or an active window and save the file. The winform has a button called \'Capture\' that, w

6条回答
  •  -上瘾入骨i
    2021-01-07 09:06

    In your button_Click method, to capture a window other than the one which is doing the capturing, the only possible way I can see is to make use of the user32 Windows API.

    You will first need to platform invoke some methods like this:

    [DllImport("user32.dll", SetLastError = true)]
    private static extern int GetWindowLong(IntPtr hWnd, GetWindowLongNIndex nIndex);
    

    I recommend www.pinvoke.net/ for more info about this.

    Here is my own Window class (work in progress, but useable) which you are welcome to use as an example: http://pastebin.com/fj2tEaPY

    Some useful properties in there for you are:

    • get AllWindows
    • get TaskbarWindows
    • set ForegroundWindow

    You'll need to get the handle of your current window (use get ForegroundWindow, then the Handle property), then find the window which you want to capture the image of, perhaps using code similar to that in TaskbarWindows. Once you have the window, you will need to send the keypresses Alt + PrtScn (again maybe using user32 API, but I won't go into it.) Then use the static ForegroundWindow property to set the orignal window as the forground using the handle which you saved at the start.

    Good luck!

提交回复
热议问题