C语言 屏幕乱程序
本帖最后由 无符号整形 于 2016-6-18 20:30 编辑改进自《Windows程序设计》仅供参考!
警告:屏幕乱别怪我
提醒:注销或者重启吧!除非你会解锁{:5_91:}
#include <windows.h>
#define NUM 32767
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static int iKeep ;
HDC hdcScr, hdcMem ;
int cx, cy ;
HBITMAP hBitmap ;
HWND hwnd ;
int i, j, x1, y1, x2, y2 ;
if (LockWindowUpdate (hwnd = GetDesktopWindow ()))
{
hdcScr= GetDCEx (hwnd, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;
hdcMem= CreateCompatibleDC (hdcScr) ;
cx = GetSystemMetrics (SM_CXSCREEN) / 10 ;
cy = GetSystemMetrics (SM_CYSCREEN) / 10 ;
hBitmap = CreateCompatibleBitmap (hdcScr, cx, cy) ;
SelectObject (hdcMem, hBitmap) ;
srand ((int) GetCurrentTime ()) ;
for (i = 0 ; i < 2 ; i++)
for (j = 0; j < NUM; j++)
{
LockWindowUpdate(hwnd = GetDesktopWindow());
if (i == 0)
{
iKeep = x1 = cx * (rand () % 10) ;
iKeep = y1 = cy * (rand () % 10) ;
iKeep = x2 = cx * (rand () % 10) ;
iKeep = y2 = cy * (rand () % 10) ;
}
else
{
x1 = iKeep;
y1 = iKeep;
x2 = iKeep;
y2 = iKeep;
}
BitBlt (hdcMem,0,0, cx, cy, hdcScr, x1, y1, SRCCOPY) ;
BitBlt (hdcScr, x1, y1, cx, cy, hdcScr, x2, y2, SRCCOPY) ;
BitBlt (hdcScr, x2, y2, cx, cy, hdcMem,0,0, SRCCOPY) ;
}
DeleteDC (hdcMem) ;
ReleaseDC (hwnd, hdcScr) ;
DeleteObject (hBitmap) ;
}
return 0;
}
原理:
第一步 禁止更新屏幕
第二步 用GetDCEx获取屏幕HDC,把他放进位图
第三步 算出屏幕分辨率,把截图的结果大小/10重新显示
第四步 把获取的图形显示并随机分配位置
第五步 重新开始,进行32767次循环!
链接:
百度云:http://pan.baidu.com/s/1kV72Xqn 无密码
360云:https://yunpan.cn/cRkRwD3EWv7Tm访问密码 7710
如果发生找不到msvcr120.dll的情况,请下载msvcr120.dll,并把它拷贝到主程序的目录。
360云 msvcr120.dll https://yunpan.cn/cRkRLPIwDfnYz访问密码 422e
百度云 msvcr120.dll http://pan.baidu.com/s/1dFNUnwH 无密码
占个沙发{:5_91:} 那么问题来了,效果截图咧?有解锁密码之类的吗?{:10_256:} 没,因为屏幕花了截不了图T_T ~风介~ 发表于 2016-6-19 21:32
那么问题来了,效果截图咧?有解锁密码之类的吗?
没,因为屏幕花了截不了图T_T ~风介~ 发表于 2016-6-19 21:32
那么问题来了,效果截图咧?有解锁密码之类的吗?
你试过没 无符号整形 发表于 2016-6-19 21:37
你试过没
不试{:10_256:} ~风介~ 发表于 2016-6-19 21:50
不试
好吧,下次用虚拟机截图给你 有人试过吗
页:
[1]