我有WPF应用程序,我们希望使用后面的代码实现屏幕截图的功能。
每当我们想要时,我们应该能够在用户的机器上截取我们的应用程序(不是整个打印屏幕)
为此,我做了一些谷歌,发现DllImport("user32.dll")
将在这方面帮助我。但是,我没有任何线索如何使用这个?我应该在这里提到哪种方法?
我尝试使用以下代码,但没有运气 -
[DllImport("User32.dll")]
public static extern int SetForegroundWindow(IntPtr point);
Process p = Process.GetCurrentProcess();
p.WaitForInputIdle();
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
SendKeys.SendWait("k");
IntPtr processFoundWindow = p.MainWindowHandle;
请建议。
答案 0 :(得分:1)
这是我之前在我的应用程序中使用的方法。
我创建了一个类来处理屏幕截图功能。
public sealed class snapshotHandler
{
[StructLayout(LayoutKind.Sequential)]
private struct RECT
{
public int m_left;
public int m_top;
public int m_right;
public int m_bottom;
}
[DllImport("user32.dll")]
private static extern IntPtr GetWindowRect(IntPtr hWnd, ref RECT rect);
public static void Savesnapshot(IntPtr handle_)
{
RECT windowRect = new RECT();
GetWindowRect(handle_, ref windowRect);
Int32 width = windowRect.m_right - windowRect.m_left;
Int32 height = windowRect.m_bottom - windowRect.m_top;
Point topLeft = new Point(windowRect.m_left, windowRect.m_top);
Bitmap b = new Bitmap(width, height);
Graphics g = Graphics.FromImage(b);
g.CopyFromScreen(topLeft, new Point(0, 0), new Size(width, height));
b.Save(SNAPSHOT_FILENAME, ImageFormat.Jpeg);
}
}
要使用上述功能,我调用SaveSnapshot方法。
SnapshotHandler.SaveSnapshot(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);