int CMessageHandler::sendMessage(int nType, int nCommand, unsigned long int nId, int nDataLen, const void* pData) { int nRet; MESSAGE_BUF *pBuf; pBuf = new MESSAGE_BUF; pBuf->mtype = nType; pBuf->nCommand = nCommand; pBuf->nId = nId; memset(pBuf->cData, 0, sizeof(pBuf->cData)); if (NULL != pData && nDataLen <= DATA_LEN && 0 < nDataLen) { memcpy(pBuf->cData, pData, nDataLen); pBuf->nDataLen = nDataLen; } if (-1 == msgsnd(getMsqid(), pBuf, getBufLength(), /*IPC_NOWAIT*/0)) { perror("msgsnd"); nRet = -1; } else { nRet = getBufLength(); } delete pBuf; return nRet; }
int CMessageHandler::recvMessage(void **pbuf) { ssize_t recvSize = 0; if (NULL == *pbuf) return -1; if (-1 == getRecvEvent()) { _DBG("invalid receive event id, not set"); return -1; } recvSize = msgrcv(getMsqid(), *pbuf, getBufLength(), getRecvEvent(), 0); if (0 > recvSize) { if (errno == EINTR) { _DBG("[Message] get EINTR"); return -2; } perror("msgrcv"); return -1; } return recvSize; }
BYTE * D3D9Grabber::getImageData(BYTE * buf, RECT &rect) { D3DLOCKED_RECT blockedRect; m_d3Device->GetFrontBufferData(0, m_surface); m_surface->LockRect(&blockedRect, &rect, D3DLOCK_READONLY); CopyMemory(buf, blockedRect.pBits, getBufLength(rect)); m_surface->UnlockRect(); return buf; }
QList<QRgb> D3D9Grabber::grabWidgetsColors(QList<GrabWidget *> &widgets) { QList<QRgb> result; m_rect = getEffectiveRect(widgets); if(m_rect.bottom > QApplication::desktop()->height()) m_rect.bottom = QApplication::desktop()->height(); if(m_rect.right > QApplication::desktop()->width()) m_rect.right = QApplication::desktop()->width(); int bufLengthNeeded = getBufLength(m_rect); if (bufLengthNeeded > m_bufLength) { if(m_buf != NULL) free(m_buf); m_buf = (BYTE *)malloc(bufLengthNeeded); m_bufLength = bufLengthNeeded; } getImageData(m_buf, m_rect); for(int i = 0; i < widgets.size(); i++) { GrabWidget * widget = widgets[i]; result.append(getColor(widget->x(), widget->y(), widget->width(), widget->height())); } return result; }