我的代码在程序成为前台窗口时截取程序的屏幕截图.在屏幕截图的时间上遇到了一个小问题
本文关键字:屏幕截图 程序 问题 一个 遇到 时间上 前台 窗口 我的 截取 代码 | 更新日期: 2023-09-27 18:31:55
我的主方法中有这样一行代码:
IntPtr hhook = SetWinEventHook(EVENT_SYSTEM_FOREGROUND, EVENT_SYSTEM_FOREGROUND, IntPtr.Zero, procDelegate, 0, 0, WINEVENT_OUTOFCONTEXT);
然后我班上有这个:
delegate void WinEventDelegate(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
static void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
{
// filter out non-HWND namechanges... (eg. items within a listbox)
if (idObject != 0 || idChild != 0)
{
return;
}
SaveImage(Capture(hwnd), hwnd);
Console.WriteLine("Handle: {0:x8}", hwnd.ToInt32());
}
我对这段代码有一个小问题,很难表达,所以请耐心等待。此代码背后的基本思想是,我想在前台截取当前应用程序的屏幕截图,并将其保存到 C 驱动器上的某个位置。到目前为止,我的代码允许我这样做,但是它并不总是完全按照我想要的方式工作。问题是,有时当我单击一个应用程序(因此将其置于前台)时,它会在窗口有时间完全最大化之前拍照。这导致我的屏幕截图文件夹充满了应用程序后面桌面的屏幕截图。
有没有办法等到窗口完全最大化后再调用我的屏幕截图函数?
您可以将
SetWindowsHookEx
与WH_CALLWNDPROCRET
一起使用,以了解窗口何时处理了WM_PAINT
。 或者,您可以通过在截取屏幕截图之前延迟一点来破解它,从实际的角度来看,这可能是您真正需要的。
这可能是你要找的吗?http://msdn.microsoft.com/en-us/library/system.windows.uielement.isvisible.aspx
user32.dll 包括 IsWindowVisiblehttp://msdn.microsoft.com/en-us/library/windows/desktop/ms633530(v=vs.85).aspx