局域网软件运行监控系统源程序vc++Word格式.docx
《局域网软件运行监控系统源程序vc++Word格式.docx》由会员分享,可在线阅读,更多相关《局域网软件运行监控系统源程序vc++Word格式.docx(19页珍藏版)》请在冰点文库上搜索。
SendCommandData(inttype,char*buf,intlen)
{NETPACKAGEpack;
pack.type=type;
pack.len=len;
memset(pack.buf,7,pklen-8);
memcpy(pack.buf,buf,len);
Send((char*)&
pack,pklen,0);
CSreenServerDlg.CPP
voidCSreenServerDlg:
OnTimer(UINTnIDEvent){
Addyourmessagehandlercodehereand/orcalldefault
if(pclient!
=NULL){
CapSreen();
SentSreen(hBitmap,pclient);
CDialog:
OnTimer(nIDEvent);
SentSreen(HBITMAPhBitmap,CClientSock*pc){
HDChDC=:
CreateDC("
DISPLAY"
NULL,NULL,NULL);
intiBits=:
GetDeviceCaps(hDC,BITSPIXEL)*:
GetDeviceCaps(hDC,PLANES);
//当前分辨率下每个像素所占字节数
:
DeleteDC(hDC);
WORDwBitCount;
//位图中每个像素所占字节数
if(iBits<
=1)
wBitCount=1;
elseif(iBits<
=4)
wBitCount=4;
=8)
wBitCount=8;
=24)
wBitCount=24;
else
wBitCount=iBits;
DWORDdwPaletteSize=0;
//调色板大小,位图中像素字节大小
if(wBitCount<
=8)
dwPaletteSize=(1<
<
wBitCount)*sizeof(RGBQUAD);
BITMAPbm;
//位图属性结构
GetObject(hBitmap,sizeof(bm),(LPSTR)&
bm);
BITMAPINFOHEADERbi,bi1;
//位图信息头结构
bi.biSize=sizeof(BITMAPINFOHEADER);
bi.biWidth=bm.bmWidth;
bi.biHeight=bm.bmHeight;
bi.biPlanes=1;
bi.biBitCount=wBitCount;
bi.biCompression=BI_RGB;
//BI_RGB表示位图没有压缩
bi.biSizeImage=0;
bi.biXPelsPerMeter=0;
bi.biYPelsPerMeter=0;
bi.biClrUsed=0;
bi.biClrImportant=0;
bi1=bi;
bi1.biBitCount=24;
DWORDdwBmBitsSize=((bm.bmWidth*wBitCount+31)/32)*4*bm.bmHeight;
HANDLEhDib=:
GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));
//为位图内容分配内存
LPBITMAPINFOHEADERlpbi=(LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi=bi;
HANDLEhPal=:
GetStockObject(DEFAULT_PALETTE);
//处理调色板
HANDLEhOldPal=NULL;
if(hPal){
hDC=:
GetDC(NULL);
hOldPal=SelectPalette(hDC,(HPALETTE)hPal,FALSE);
RealizePalette(hDC);
intnOutputBytes=0;
unsignedchar*m_pDibBits;
m_pDibBits=newunsignedchar[dwBmBitsSize];
GetDIBits(hDC,hBitmap,0,(UINT)bm.bmHeight,(LPSTR)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFO*)lpbi,DIB_RGB_COLORS);
//获取该调色板下新的像素值
if(hOldPal)//恢复调色板
{SelectPalette(hDC,(HPALETTE)hOldPal,TRUE);
:
ReleaseDC(NULL,hDC);
inti=0,j=0;
unsignedchar*pcolor;
pcolor=(unsignedchar*)lpbi+sizeof(BITMAPINFOHEADER)+dwPaletteSize;
//得到像素值
for(j=0;
j<
dwBmBitsSize;
j++){
if(j%4==3)
j++;
m_pDibBits[i]=pcolor[j];
i++;
//////////////////////////发送图像头信息/////////////////////////////
CapSreenHeadercheader;
cheader.factlen=i;
//图像长度
NETPACKAGEpack;
longfilestep=0;
longfileend=0;
longlFileSize=i;
//图像长度
intend=0;
intlen=0;
intdtlen=50000;
//数据块长度
intplen=sizeof(NETPACKAGE);
//数据包长度50008
filestep=lFileSize/dtlen;
//数据块数
fileend=lFileSize%dtlen;
//最后一块数据长度
cheader.filelength=lFileSize;
////图像文件长度
cheader.blocklen=dtlen;
cheader.width=bm.bmWidth;
//图像宽度
cheader.height=bm.bmHeight;
//图像高度
pack.type=3;
//图像头命令
pack.len=sizeof(cheader);
//图像头信息长度
memset(pack.buf,7,dtlen);
memcpy(pack.buf,(char*)&
cheader,pack.len);
pc->
Send((unsignedchar*)&
pack,plen,0);
//发送图像头信息
Sleep(100);
////////////////////发送图像内容/////////////////
pack.type=4;
//图像内容命令
pack.len=dtlen;
//图像块长度
for(j=0;
filestep;
memcpy(pack.buf,&
m_pDibBits[j*dtlen],dtlen);
//发送图像信息}
pack.type=5;
////最后一块数据命令
pack.len=fileend;
memcpy(pack.buf,&
m_pDibBits[filestep*dtlen],fileend);
//发送最后一块数据
//发送图像头信息
GlobalUnlock(hDib);
//清除
GlobalFree(hDib);
delete[]m_pDibBits;
SendSreenToClient(){
if(pclient!
=NULL&
&
islogin==1)
{CapSreen();
}}
附录客户端
CsreenClientDlg.CPP
BOOLCSreenClientDlg:
OnInitDialog(){
OnInitDialog();
//Add"
About..."
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
{CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
{pSysMenu->
AppendMenu(MF_SEPARATOR);
pSysMenu->
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}}
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
Addextrainitializationhere
pclient=NULL;
//定义一个socket类型的借口指针
m_ip="
127.0.0.1"
;
//初始化默认ip为本机
m_port=3009;
//初始化端口为3009
m_usrpwd="
123"
m_usrname="
aaa"
UpdateData(FALSE);
//将控件关联变量的值传递给控件并改变控件的状态
m_pBIH=NULL;
//位图头
m_pDibBits=NULL;
//接收图像数据偏移
m_pDib=NULL;
pklen=sizeof(NETPACKAGE);
//获取数据包的程度
lbitsOffset=0;
capflag=0;
bcontrol=0;
initDrawParam();
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol}
voidCSreenClientDlg:
OnButtonGetcap()
{//TODO:
Addyourcontrolnotificationhandlercodehere
=NULL)
pclient->
SendCommandData(3,(char*)&
usrinfo,sizeof(USERINFO));
OnButtonSavebmp()//保存bmp图片
charszFilter[]="
Allfiles(*.*)|*.*|bmpfiles(*.bmp)|*.bmp||"
CFileDialogfd(false,"
bmp"
"
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL);
if(IDOK==fd.DoModal())
{m_filename=fd.GetPathName();
WriteBmpToFile(hBitmap,m_filename);
UpdateData(FALSE);
WriteBmpToFile(HBITMAPhBitmap,CStringstrFileName)
{HDChDC=:
intiBits=:
WORDwBitCount;
HANDLEhPal=:
if(hPal)
{hDC=:
}
BITMAPFILEHEADERbmfHdr;
//位图文件头结构
bmfHdr.bfType=0x4D42;
//"
BM"
//设置位图文件头
DWORDdwDIBSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+dwPaletteSize+dwBmBitsSize;
bmfHdr.bfSize=dwDIBSize;
bmfHdr.bfReserved1=0;
bmfHdr.bfReserved2=0;
bmfHdr.bfOffBits=(DWORD)sizeof(BITMAPFILEHEADER)+(DWORD)sizeof(BITMAPINFOHEADER)+dwPaletteSize;
HANDLEhFile=CreateFile(strFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
//创建位图文件
DWORDdwWritten;
WriteFile(hFile,(LPSTR)&
bmfHdr,sizeof(BITMAPFILEHEADER),&
dwWritten,NULL);
//写入位图文件头
WriteFile(hFile,(LPSTR)lpbi,dwDIBSize,&
//写入位图文件其余内容
CloseHandle(hFile);
initDrawSreen()//初始化屏幕
{m_width=m_pBIH->
biWidth;
m_height=m_pBIH->
biHeight;
scrylm=m_height-cheight;
if(scrylm<
scrylm=0;
scrxlm=m_width-cwidth;
if(scrxlm<
scrxlm=0;
AfxMessageBox(_T("
initDrawSreen"
));
m_vbar.SetScrollRange(0,scrylm,FALSE);
//0制定最小滚动的位置scrylm制定最大滚动的位置TRUE
m_vbar.SetScrollPos(scry,TRUE);
m_hbar.SetScrollRange(0,scrxlm,TRUE);
m_hbar.SetScrollPos(scrx,TRUE);
capflag=1;
drawSreen();
OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
intnPos1=m_vbar.GetScrollPos();
if(nSBCode==SB_LINEDOWN)
{scry=scry+10;
if(scry>
scrylm)
scry=scrylm;
nPos1=scry;
drawSreen();
if(nSBCode==SB_LINEUP)
{scry=scry-10;
if(scry<
scry=0;
if(nSBCode==SB_THUMBTRACK)
{scry=nPos;
nPos1=nPos;
if(nPo