鱼C论坛

 找回密码
 立即注册
查看: 11647|回复: 37

[技术交流] [WIN32SDK] 屏幕截图 + 保存图片 + 开塬 + 求支持

[复制链接]
发表于 2015-3-7 10:28:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
~~国际惯例~~~

                               
登录/注册后可看大图


                               
登录/注册后可看大图


按CTRL + E 截图~~~然后会保存到本地~~~~C:\1.BMP  24真彩高清无压缩~~~~(远控屏幕传送的记得压缩~~)
SO ~~塬码回复可见~~~~不懂 Q我  1*****4******6*****2******0*******6*******3*******3***1*4(迷雾)
  1. [hide]
  2. <BLOCKQUOTE>#include "stdafx.h"  //注意这个哦~~
  3. #include "Win32Project1.h"  //注意~~~
  4. #define MAX_LOADSTRING 1024
  5. // 全局变量:
  6. HINSTANCE hInst; // 当前实例
  7. TCHAR szTitle[256]; // 标题栏文本
  8. TCHAR szWindowClass[256]; // 主窗口类名

  9. // 此代码模块中包含的函数的前向声明:
  10. ATOM MyRegisterClass(HINSTANCE hInstance);
  11. BOOL InitInstance(HINSTANCE, int);
  12. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  13. void 窗口_创建完毕(HWND 窗口句柄);
  14. void 窗口_开始截图(HWND 窗口句柄);
  15. int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
  16. _In_opt_ HINSTANCE hPrevInstance,
  17. _In_ LPTSTR lpCmdLine,
  18. _In_ int nCmdShow)
  19. {
  20. UNREFERENCED_PARAMETER(hPrevInstance);
  21. UNREFERENCED_PARAMETER(lpCmdLine);

  22. // TODO: 在此放置代码。
  23. MSG msg;
  24. //HACCEL hAccelTable;

  25. // 初始化全局字符串
  26. LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  27. LoadString(hInstance, IDC_WIN32PROJECT1, szWindowClass, MAX_LOADSTRING);
  28. MyRegisterClass(hInstance);

  29. // 执行应用程序初始化:
  30. if (!InitInstance (hInstance, nCmdShow))
  31. {
  32. return FALSE;
  33. }

  34. // = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT1));

  35. // 主消息循环:
  36. while (GetMessage(&msg, NULL, 0, 0))
  37. {
  38. //if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  39. // {
  40. TranslateMessage(&msg);
  41. DispatchMessage(&msg);
  42. // }
  43. }

  44. return (int) msg.wParam;
  45. }
  46. //
  47. // 函数: MyRegisterClass()
  48. //
  49. // 目的: 注册窗口类。
  50. //
  51. ATOM MyRegisterClass(HINSTANCE hInstance)
  52. {
  53. WNDCLASSEX wcex;

  54. wcex.cbSize = sizeof(WNDCLASSEX);

  55. wcex.style = CS_HREDRAW | CS_VREDRAW;
  56. wcex.lpfnWndProc = WndProc;
  57. wcex.cbClsExtra = 0;
  58. wcex.cbWndExtra = 0;
  59. wcex.hInstance = hInstance;
  60. wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT1));
  61. wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
  62. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
  63. wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT1);
  64. wcex.lpszClassName = szWindowClass;
  65. wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

  66. return RegisterClassEx(&wcex);
  67. }


  68. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  69. {
  70. HWND hWnd;

  71. hInst = hInstance; // 将实例句柄存储在全局变量中

  72. hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  73. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

  74. if (!hWnd)
  75. {
  76. return FALSE;
  77. }

  78. ShowWindow(hWnd, nCmdShow);
  79. UpdateWindow(hWnd);

  80. return TRUE;
  81. }

  82. //
  83. // 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
  84. //
  85. // 目的: 处理主窗口的消息。
  86. //
  87. // WM_COMMAND - 处理应用程序菜单
  88. // WM_PAINT - 绘制主窗口
  89. // WM_DESTROY - 发送退出消息并返回
  90. //
  91. //
  92. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  93. {
  94. int wmId, wmEvent;
  95. PAINTSTRUCT ps;
  96. HDC hdc;
  97. char szString[] = "按下Ctrl + E 截图";
  98. switch (message)
  99. {
  100. case WM_CREATE:
  101. {
  102. 窗口_创建完毕(hWnd);
  103. break;
  104. }
  105. case 257:
  106. {
  107. if(69==wParam)
  108. {

  109. 窗口_开始截图(hWnd);
  110. }

  111. break;
  112. }

  113. case WM_PAINT:
  114. hdc = BeginPaint(hWnd, &ps);
  115. // TODO: 在此添加任意绘图代码...
  116. TextOutA(ps.hdc,100,100,szString,lstrlenA(szString));
  117. EndPaint(hWnd, &ps);
  118. break;
  119. case WM_DESTROY:
  120. PostQuitMessage(0);
  121. break;
  122. default:
  123. return DefWindowProc(hWnd, message, wParam, lParam);
  124. }
  125. return 0;
  126. }

  127. //当窗口创建完毕 !会调用这个函数
  128. void 窗口_创建完毕(HWND 窗口句柄)
  129. {
  130. MessageBoxA(NULL,NULL,NULL,NULL);
  131. //设置热键
  132. SendMessageA(窗口句柄,WM_SETHOTKEY,581,0);
  133. }
  134. void 窗口_开始截图(HWND hWnd)
  135. {

  136. //MessageBoxA(NULL,NULL,NULL,NULL);
  137. /* 代码有点长 */
  138. HDC 图像_桌面DC = 0,图像_兼容DC = 0;
  139. HWND 窗口_桌面句柄 = 0;
  140. HBITMAP 位图_句柄 = 0;
  141. RECT 矩形_桌面 = {0},矩形_窗口 = {0};
  142. HDC 主窗口DC = GetDC(hWnd);

  143. /*隐藏!!如果想保存这个窗口的图!!可以判断最前台窗口句柄!!然后判断 */
  144. ShowWindow(hWnd,SW_HIDE);
  145. Sleep(300);
  146. 窗口_桌面句柄 = GetDesktopWindow();
  147. GetWindowRect(窗口_桌面句柄,&矩形_桌面);
  148. 图像_桌面DC = GetDC(窗口_桌面句柄);
  149. 位图_句柄 = CreateCompatibleBitmap(图像_桌面DC,矩形_桌面.right,矩形_桌面.bottom);
  150. 图像_兼容DC = CreateCompatibleDC(图像_桌面DC); // 创建兼容的内存DC
  151. SelectObject(图像_兼容DC,位图_句柄);
  152. BitBlt(图像_兼容DC,0,0,矩形_桌面.right,矩形_桌面.bottom,图像_桌面DC,0,0,SRCCOPY);

  153. BITMAP 位图 = {0};
  154. GetObject(位图_句柄,sizeof(BITMAP),&位图);

  155. BITMAPFILEHEADER 位图文件头 = {0};
  156. BITMAPINFOHEADER 位图信息头 = {0};
  157. DWORD 位图数据大小 = 位图.bmWidth * 位图.bmHeight * 2; // 16位 = 8字节
  158. char *数据指针 = new char[位图数据大小];
  159. memset(数据指针,0,位图数据大小);

  160. //填充文件头
  161. 位图文件头.bfType = 0x4D42; //'BM' 必须是 没有为什么
  162. 位图文件头.bfSize = 位图数据大小 + 54;
  163. 位图文件头.bfReserved1 = 0; //保留 没有为什么
  164. 位图文件头.bfReserved2 = 0; //同上
  165. 位图文件头.bfOffBits = 54;
  166. //填充信息头
  167. 位图信息头.biSize = 40; //本结构大小 直接sizeof
  168. 位图信息头.biHeight = 位图.bmHeight;
  169. 位图信息头.biWidth = 位图.bmWidth;
  170. 位图信息头.biPlanes = 1; //必须是1 没有理由
  171. 位图信息头.biBitCount = 16; //32真彩高清
  172. 位图信息头.biCompression = BI_RGB;
  173. 位图信息头.biSizeImage = 位图数据大小; // = 位图数据大小
  174. 位图信息头.biXPelsPerMeter = 0;
  175. 位图信息头.biYPelsPerMeter = 0;
  176. 位图信息头.biClrUsed = 0;
  177. 位图信息头.biClrImportant= 0;
  178. GetDIBits(图像_桌面DC,位图_句柄,0,位图.bmHeight,数据指针,(LPBITMAPINFO)&位图信息头,DIB_RGB_COLORS);

  179. DWORD Error = GetLastError();
  180. DWORD dwSize=0;
  181. HANDLE hFile=CreateFileA("C:\\1.BMP",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,
  182. FILE_ATTRIBUTE_NORMAL,0);//创建文件
  183. WriteFile(hFile,(void *)&位图文件头,sizeof(BITMAPFILEHEADER),&dwSize,0);//写入位图文件头
  184. WriteFile(hFile,(void *)&位图信息头,sizeof(BITMAPINFOHEADER),&dwSize,0);//写入位图信息头
  185. WriteFile(hFile,(void *)数据指针,位图数据大小,&dwSize,0);//写入位图数据
  186. CloseHandle((HANDLE)hFile);
  187. /* 再给主窗口一个 */
  188. //缩放
  189. GetWindowRect(hWnd,&矩形_窗口);
  190. ShowWindow(hWnd,SW_SHOW);
  191. //BitBlt(主窗口DC,0,0,矩形_窗口.bottom-矩形_窗口.top,1260,图像_兼容DC,0,0,SRCCOPY);
  192. StretchBlt(主窗口DC,0,0,矩形_窗口.right-矩形_窗口.left,矩形_窗口.bottom-矩形_窗口.top,图像_兼容DC,0,0,矩形_窗口.right-矩形_窗口.left,矩形_窗口.bottom-矩形_窗口.top,SRCCOPY);
  193. ReleaseDC(hWnd,主窗口DC);

  194. }
复制代码






评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +5 收起 理由
freeparty + 10 + 10 + 5 感谢楼主无私奉献!

查看全部评分

本帖被以下淘专辑推荐:

  • · 迷雾|主题: 5, 订阅: 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-7 10:31:40 | 显示全部楼层
2楼自坐~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-7 10:37:06 | 显示全部楼层
如果想保存16色的  记得改大小
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-7 17:26:30 | 显示全部楼层
谢谢楼主分享源码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-7 17:26:42 | 显示全部楼层
我就来支持一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-7 23:24:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-3-13 19:53:26 | 显示全部楼层
谢谢申精
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-20 01:05:53 | 显示全部楼层
楼主厉害!!!!!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-20 10:24:41 | 显示全部楼层
好像很NB{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-28 22:48:51 | 显示全部楼层
可以做得像QQ截图一样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-29 16:46:58 | 显示全部楼层
你的VS窗口弄得好非主流  怎么弄的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-4 13:11:04 | 显示全部楼层
holyempty 发表于 2015-3-29 16:46
你的VS窗口弄得好非主流  怎么弄的

改背景图的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-5 08:15:20 | 显示全部楼层

具体呢,是在VS设置里改 ,还是用别的软件改 ....谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-21 19:21:28 | 显示全部楼层
:huffy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-4-24 22:19:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-4-27 17:25:43 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-4-27 18:42:25 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-4-27 22:46:05 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-4-28 00:25:16 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-4-28 02:26:36 From FishC Mobile | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表