我的程序旨在在Windows平台上运行.
有时它会以错误终止.我无法在安装它的每台计算机上调试它; 所以我向它添加了向量异常处理程序,它向服务器发送一些有关异常的信息.有一些0xC0000005例外; 我修复了它,但程序仍然终止(我无法在我的电脑上重现错误).
我编写了另一个程序,它等待主进程句柄,并在主进程终止时发送带有进程退出代码的报告.我查看了退出代码,其中大部分都是0x40010004(DBG_TERMINATE_PROCESS).我知道当调试器附加到应用程序然后终止它时,会出现此退出代码; 但我确信没有调试器.
那么......在哪些其他情况下可以使用DBG_TERMINATE_PROCESS退出代码终止处理?
我使用的是Microsoft Visual Studio 2010和Windows 7 Professional.这是我将窗口图像复制到剪贴板的代码:
void PrintWindowEx( HWND hWnd )
{
HDC hDCMem = CreateCompatibleDC(NULL);
RECT rect;
GetWindowRect(hWnd, &rect);
HBITMAP hBmp = NULL;
HDC hDC = GetDC(hWnd);
hBmp = CreateCompatibleBitmap(hDC, rect.right - rect.left, rect.bottom - rect.top);
HGDIOBJ hOld = SelectObject(hDCMem, hBmp);
PrintWindow(hWnd, hDCMem, 0);
SelectObject(hDCMem, hOld);
DeleteObject(hDCMem);
OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBmp);
CloseClipboard();
ReleaseDC(hWnd, hDC);
}
Run Code Online (Sandbox Code Playgroud)
它适用于除谷歌Chrome主窗口以外的所有窗口.我认为这是因为Chrome使用直接渲染,因此我已禁用硬件加速chrome://settings.仍然无法正常工作.然后我意识到由于Chrome Sandbox中的限制,处理邮件可能会受到限制,因此我使用--no-sandbox命令行选项启动了Chrome .仍然无法正常工作.
我怎样才能让它发挥作用?适用于Chrome和Chrome等任何其他窗口.BitBlt()是不可接受的,因为窗口的某些部分窗口可能会被另一个窗口重叠,窗口可以在其他桌面上等等.有任何可行的解决方案吗?也许将DLL加载到另一个进程或类似的东西.
UPD:它重绘后RedrawWindow(); 所以我可以截取屏幕截图(部分 - 左侧部分(宽度~20px),右侧部分不复制).那么,是否支持WM_PRINT?如何获取窗口的完整屏幕截图?
我使用 zLib 1.2.7,取自此处。我已在 Microsoft Visual Studio 2010 中将其编译为静态库并将其添加到我的项目中。
我需要解压缩一些用 deflate 算法压缩的二进制数据。这里是:
unsigned char rawData[114] =
{
0x00, 0x00, 0x00, 0x00, 0x15, 0x82, 0x05, 0x9D, 0x62, 0x91, 0x9A, 0x86, 0x26, 0xF3, 0x45, 0xBF,
0xE1, 0x69, 0x19, 0xA8, 0x80, 0x21, 0x08, 0x43, 0xF1, 0xEF, 0xCC, 0x01, 0x68, 0x4E, 0x3C, 0x06,
0x59, 0x6D, 0x90, 0xB2, 0x1F, 0xC3, 0x87, 0xC2, 0xBF, 0xC0, 0x90, 0xBE, 0x1F, 0x11, 0xB6, 0xD7,
0xB7, 0x06, 0x18, 0x32, 0x5F, 0x80, 0x8F, 0x09, 0xF1, 0x81, 0xF2, 0xB8, 0xC8, 0x9E, …Run Code Online (Sandbox Code Playgroud)