我的代码在程序成为前台窗口时截取程序的屏幕截图.在屏幕截图的时间上遇到了一个小问题

本文关键字:屏幕截图 程序 问题 一个 遇到 时间上 前台 窗口 我的 截取 代码 | 更新日期: 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 驱动器上的某个位置。到目前为止,我的代码允许我这样做,但是它并不总是完全按照我想要的方式工作。问题是,有时当我单击一个应用程序(因此将其置于前台)时,它会在窗口有时间完全最大化之前拍照。这导致我的屏幕截图文件夹充满了应用程序后面桌面的屏幕截图。

有没有办法等到窗口完全最大化后再调用我的屏幕截图函数?

我的代码在程序成为前台窗口时截取程序的屏幕截图.在屏幕截图的时间上遇到了一个小问题

您可以将

SetWindowsHookExWH_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