Как ни странно процесс занял 20 минут на Qt 4 под виндоус 10. Перед запуском должно быть открыто окно с notepad.exe.
#include <QtGui/QApplication>
#include "dialog.h"
#define _WIN32_WINNT 0x0501 //xp
#include <windows.h>
#include <QDebug>
#pragma comment (lib, "user32"); //User32.lib
#pragma comment (lib, "gdi32"); //User32.lib
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
RECT rc;
HWND hwnd = FindWindow(TEXT("Notepad"), NULL); //the window can't be min
if (hwnd == NULL)
{
qDebug() << "it can't find any 'note' window";
return 0;
}
GetClientRect(hwnd, &rc);
//create
HDC hdcScreen = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hdcScreen);
HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen,rc.right - rc.left, rc.bottom - rc.top);
SelectObject(hdc, hbmp);
//Print to memory hdc
PrintWindow(hwnd, hdc, PW_CLIENTONLY);
//copy to clipboard
OpenClipboard(NULL);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hbmp);
CloseClipboard();
//release
DeleteDC(hdc);
DeleteObject(hbmp);
ReleaseDC(NULL, hdcScreen);
qDebug() << "success copy to clipboard, please paste it to the 'mspaint'";
// Dialog w;
// w.show();
return a.exec();
}
После выполнения изображение окна из notepad.exe попадет в буфер обмена, откуда можно вставить в редактор paint.exe (например):
Таким образом никто не запрещает одной программе смотреть что изображено в окне другой программы (под виндоус например).