哪位有Win98下实现屏幕取词的代码? 标题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 (转载)---- 下面用VC来逐步介绍在Windows95下的实现过程.首先我们要确定屏幕截取的区域,用LPRECT结构来定义.可以截取一个窗口,或整个屏幕.以下代码把选定的屏幕区域拷贝到位图中.HBITMAP CopyScreenToBitmap(LPRECT lpRect)file://lpRect 代表选定区域{HDC hScrDC, hMemDC;// 屏幕和内存设备描述表HBITMAP hBitmap, hOldBitmap;// 位图句柄int nX, nY, nX2, nY2;// 选定区域坐标int nWidth, nHeight;// 位图宽度和高度int xScrn, yScrn;// 屏幕分辨率// 确保选定区域不为空矩形if (IsRectEmpty(lpRect))return NULL;file://为屏幕创建设备描述表hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);file://为屏幕设备描述表创建兼容的内存设备描述表hMemDC = CreateCompatibleDC(hScrDC);// 获得选定区域坐标nX = lpRect- >left;nY = lpRect- >top;nX2 = lpRect- >right;nY2 = lpRect- >bottom;// 获得屏幕分辨率xScrn = GetDeviceCaps(hScrDC, HORZRES);yScrn = GetDeviceCaps(hScrDC, VERTRES);file://确保选定区域是可见的if (nX < 0)nX = 0;if (nY < 0)nY = 0;if (nX2 > xScrn)nX2 = xScrn;if (nY2 > yScrn)nY2 = yScrn;nWidth = nX2 - nX;nHeight = nY2 - nY;// 创建一个与屏幕设备描述表兼容的位图hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);// 把新位图选到内存设备描述表中hOldBitmap = SelectObject(hMemDC, hBitmap);// 把屏幕设备描述表拷贝到内存设备描述表中BitBlt(hMemDC, 0, 0, nWidth, nHeight,hScrDC, nX, nY, SRCCOPY);file://得到屏幕位图的句柄hBitmap = SelectObject(hMemDC, hOldBitmap);file://清除DeleteDC(hScrDC);DeleteDC(hMemDC);// 返回位图句柄return hBitmap;}得到屏幕位图句柄以后,我们可以把屏幕内容粘贴到剪贴板上.if (OpenClipboard(hWnd))file://hWnd为程序窗口句柄{file://清空剪贴板EmptyClipboard();file://把屏幕内容粘贴到剪贴板上,hBitmap 为刚才的屏幕位图句柄SetClipboardData(CF_BITMAP, hBitmap);file://关闭剪贴板CloseClipboard();}我们也可以把屏幕内容以位图格式存到磁盘文件上.int SaveBitmapToFile(HBITMAP hBitmap ,LPSTR lpFileName) file://hBitmap 为刚才的屏幕位图句柄{ file://lpFileName 为位图文件名HDC hDC;file://设备描述表int iBits;file://当前显示分辨率下每个像素所占字节数WORD wBitCount;file://位图中每个像素所占字节数file://定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数DWORD dwPaletteSize=0,dwBmBitsSize,dwDIBSize, dwWritten;BITMAP Bitmap;file://位图属性结构BITMAPFILEHEADER bmfHdr;file://位图文件头结构BITMAPINFOHEADER bi;file://位图信息头结构LPBITMAPINFOHEADER lpbi;file://指向位图信息头结构HANDLE fh, hDib, hPal,hOldPal=NULL;file://定义文件,分配内存句柄,调色板句柄file://计算位图文件每个像素所占字节数hDC = CreateDC("DISPLAY",NULL,NULL,NULL);iBits = GetDeviceCaps(hDC, BITSPIXEL) *GetDeviceCaps(hDC, PLANES);DeleteDC(hDC);if (iBits < = 1)wBitCount = 1;else if (iBits < = 4)wBitCount = 4;else if (iBits < = 8)wBitCount = 8;else if (iBits < = 24)wBitCount = 24;file://计算调色板大小if (wBitCount < = 8)dwPaletteSize = (1 < < wBitCount) *sizeof(RGBQUAD);file://设置位图信息头结构GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);bi.biSize = sizeof(BITMAPINFOHEADER);bi.biWidth = Bitmap.bmWidth;bi.biHeight = Bitmap.bmHeight;bi.biPlanes = 1;bi.biBitCount = wBitCount;bi.biCompression = BI_RGB;bi.biSizeImage = 0;bi.biXPelsPerMeter = 0;bi.biYPelsPerMeter = 0;bi.biClrUsed = 0;bi.biClrImportant = 0;dwBmBitsSize = ((Bitmap.bmWidth *wBitCount+31)/32)* 4*Bitmap.bmHeight ;file://为位图内容分配内存hDib = GlobalAlloc(GHND,dwBmBitsSize+dwPaletteSize+sizeof(BITMAPINFOHEADER));lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);*lpbi = bi;// 处理调色板hPal = GetStockObject(DEFAULT_PALETTE);if (hPal){hDC = GetDC(NULL);hOldPal = SelectPalette(hDC, hPal, FALSE);RealizePalette(hDC);}// 获取该调色板下新的像素值GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)+dwPaletteSize,(BITMAPINFOHEADER *)lpbi, DIB_RGB_COLORS);file://恢复调色板if (hOldPal){SelectPalette(hDC, hOldPal, TRUE);RealizePalette(hDC);ReleaseDC(NULL, hDC);}file://创建位图文件fh = CreateFile(lpFileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);if (fh == INVALID_HANDLE_VALUE)return FALSE;// 设置位图文件头bmfHdr.bfType = 0x4D42; // "BM"dwDIBSize = sizeof(BITMAPFILEHEADER)+ sizeof(BITMAPINFOHEADER)+ dwPaletteSize + dwBmBitsSize;bmfHdr.bfSize = dwDIBSize;bmfHdr.bfReserved1 = 0;bmfHdr.bfReserved2 = 0;bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER)+ (DWORD)sizeof(BITMAPINFOHEADER)+ dwPaletteSize;// 写入位图文件头WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);// 写入位图文件其余内容WriteFile(fh, (LPSTR)lpbi, dwDIBSize,&dwWritten, NULL);file://清除GlobalUnlock(hDib);GlobalFree(hDib);CloseHandle(fh); ??????????????????????????????http://vip.6to23.com/NowCan1/tech/pmqc.htm cwanter(小菜):你好!我想要一份完整的win98屏幕抓词代码,能发给我一份吗?谢谢![email protected] 能否向消息响应函数传递控件的ID 请问:我想开发语聊、视频软件,该怎么做呢 太没人气了,来放荡了 使用list contronl控件问题 控制台应用程序,如何实现最小化dos窗口后,显示一个系统托盘? 多线程查找方法 急煞人的事 UPDATA()出不来 求助!如何截取屏幕并制成avi文件 有关MultiByteToWideChar及WideCharToMultiByte的疑问,高手进来看看 设置一个BUTTON按钮,作用“加载任意一个选择的TXT”,另设置一个BUTTON按钮,作用“获取上次加载过得TXT,已获得其路径及文件名,并作其他操作” 关于取比特位 如何导出导入_stdcall函数
用LPRECT结构来定义.可以截取一个窗口,或整个屏幕.以下代码把选定的屏幕区域拷贝
到位图中.HBITMAP CopyScreenToBitmap(LPRECT lpRect)
file://lpRect 代表选定区域
{
HDC hScrDC, hMemDC;
// 屏幕和内存设备描述表
HBITMAP hBitmap, hOldBitmap;
// 位图句柄
int nX, nY, nX2, nY2;
// 选定区域坐标
int nWidth, nHeight;
// 位图宽度和高度
int xScrn, yScrn;
// 屏幕分辨率// 确保选定区域不为空矩形
if (IsRectEmpty(lpRect))
return NULL;
file://为屏幕创建设备描述表
hScrDC = CreateDC("DISPLAY", NULL, NULL, NULL);
file://为屏幕设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 获得选定区域坐标
nX = lpRect- >left;
nY = lpRect- >top;
nX2 = lpRect- >right;
nY2 = lpRect- >bottom;
// 获得屏幕分辨率
xScrn = GetDeviceCaps(hScrDC, HORZRES);
yScrn = GetDeviceCaps(hScrDC, VERTRES);
file://确保选定区域是可见的
if (nX < 0)
nX = 0;
if (nY < 0)
nY = 0;
if (nX2 > xScrn)
nX2 = xScrn;
if (nY2 > yScrn)
nY2 = yScrn;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
// 创建一个与屏幕设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap
(hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap = SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
BitBlt(hMemDC, 0, 0, nWidth, nHeight,
hScrDC, nX, nY, SRCCOPY);
file://得到屏幕位图的句柄
hBitmap = SelectObject(hMemDC, hOldBitmap);
file://清除
DeleteDC(hScrDC);
DeleteDC(hMemDC);
// 返回位图句柄
return hBitmap;
}得到屏幕位图句柄以后,我们
可以把屏幕内容粘贴到剪贴板上.
if (OpenClipboard(hWnd))
file://hWnd为程序窗口句柄
{
file://清空剪贴板
EmptyClipboard();
file://把屏幕内容粘贴到剪贴板上,
hBitmap 为刚才的屏幕位图句柄
SetClipboardData(CF_BITMAP, hBitmap);
file://关闭剪贴板
CloseClipboard();
}
我们也可以把屏幕内容以位图格式存到磁盘文件上.int SaveBitmapToFile(HBITMAP hBitmap ,
LPSTR lpFileName) file://hBitmap 为刚才的屏幕位图句柄
{ file://lpFileName 为位图文件名
HDC hDC;
file://设备描述表
int iBits;
file://当前显示分辨率下每个像素所占字节数
WORD wBitCount;
file://位图中每个像素所占字节数
file://定义调色板大小, 位图中像素字节大小 ,
位图文件大小 , 写入文件字节数
DWORD dwPaletteSize=0,
dwBmBitsSize,
dwDIBSize, dwWritten;
BITMAP Bitmap;
file://位图属性结构
BITMAPFILEHEADER bmfHdr;
file://位图文件头结构
BITMAPINFOHEADER bi;
file://位图信息头结构
LPBITMAPINFOHEADER lpbi;
file://指向位图信息头结构
HANDLE fh, hDib, hPal,hOldPal=NULL;
file://定义文件,分配内存句柄,调色板句柄file://计算位图文件每个像素所占字节数
hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) *
GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits < = 1)
wBitCount = 1;
else if (iBits < = 4)
wBitCount = 4;
else if (iBits < = 8)
wBitCount = 8;
else if (iBits < = 24)
wBitCount = 24;
file://计算调色板大小
if (wBitCount < = 8)
dwPaletteSize = (1 < < wBitCount) *
sizeof(RGBQUAD);file://设置位图信息头结构
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;dwBmBitsSize = ((Bitmap.bmWidth *
wBitCount+31)/32)* 4
*Bitmap.bmHeight ;
file://为位图内容分配内存
hDib = GlobalAlloc(GHND,dwBmBitsSize+
dwPaletteSize+sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = GetDC(NULL);
hOldPal = SelectPalette(hDC, hPal, FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight,
(LPSTR)lpbi + sizeof(BITMAPINFOHEADER)
+dwPaletteSize,
(BITMAPINFOHEADER *)
lpbi, DIB_RGB_COLORS);
file://恢复调色板
if (hOldPal)
{
SelectPalette(hDC, hOldPal, TRUE);
RealizePalette(hDC);
ReleaseDC(NULL, hDC);
}
file://创建位图文件
fh = CreateFile(lpFileName, GENERIC_WRITE,
0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_
FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE)
return FALSE;
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER)
+ sizeof(BITMAPINFOHEADER)
+ dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof
(BITMAPFILEHEADER)
+ (DWORD)sizeof(BITMAPINFOHEADER)
+ dwPaletteSize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof
(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwDIBSize,
&dwWritten, NULL);
file://清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
http://vip.6to23.com/NowCan1/tech/pmqc.htm
你好!
我想要一份完整的win98屏幕抓词代码,能发给我一份吗?
谢谢!
[email protected]