| 122 | } |
| 123 | |
| 124 | int CScreenWindows::GetImage(bool bBuffer) |
| 125 | { |
| 126 | int nRet = -1; |
| 127 | |
| 128 | if(!m_Screen.isNull() && !bBuffer) |
| 129 | return 0; |
| 130 | |
| 131 | HDC dc = NULL; |
| 132 | HDC memDc = NULL; |
| 133 | HBITMAP bitmap = NULL; |
| 134 | |
| 135 | do{ |
| 136 | //dc = = CreateDC( _T("DISPLAY"),NULL,NULL,NULL ); // Primary screen |
| 137 | dc = GetDC(GetDesktopWindow()); // Multi-screen |
| 138 | if(NULL == dc) |
| 139 | { |
| 140 | qCritical(logDW, |
| 141 | "GetDC fail: %d", |
| 142 | GetLastError()); |
| 143 | break; |
| 144 | } |
| 145 | |
| 146 | memDc = CreateCompatibleDC(dc); |
| 147 | if(NULL == memDc) |
| 148 | { |
| 149 | qCritical(logDW, |
| 150 | "CreateCompatibleDC fail: %d", |
| 151 | GetLastError()); |
| 152 | break; |
| 153 | } |
| 154 | |
| 155 | int ScreenWidth = GetDeviceCaps(dc, HORZRES); // pixel |
| 156 | int ScreenHeight = GetDeviceCaps(dc, VERTRES); // pixel |
| 157 | bitmap = CreateCompatibleBitmap(dc, ScreenWidth, ScreenHeight); |
| 158 | if(NULL == bitmap) |
| 159 | { |
| 160 | qCritical(logDW, |
| 161 | "CreateCompatibleBitmap fail: %d", |
| 162 | GetLastError()); |
| 163 | break; |
| 164 | } |
| 165 | HGDIOBJ oldBitmap = SelectObject(memDc, bitmap); |
| 166 | if(NULL == oldBitmap) |
| 167 | { |
| 168 | qCritical(logDW, |
| 169 | "SelectObject fail: %d", |
| 170 | GetLastError()); |
| 171 | break; |
| 172 | } |
| 173 | if(!BitBlt(memDc, 0, 0, ScreenWidth, ScreenHeight, dc, 0, 0, SRCCOPY)) |
| 174 | { |
| 175 | qCritical(logDW, |
| 176 | "BitBlt fail: %d", |
| 177 | GetLastError()); |
| 178 | break; |
| 179 | } |
| 180 | |
| 181 | if(HasCursor()) |
no test coverage detected