win32 摄像头捕获系统vfw

[html] view plaincopy

  1. //win32 摄像头捕获系统vfw

[html] view plaincopy

  1. //  VideoRecord.h

  2. ///  用于定义一些资源ID

[html] view plaincopy

  1. #include "resource.h"
  2. //#define EXIT  104

  3. #define HELP  105

  4. #define MINIMIZE 106

  5. //#define DISPLAY  107

  6. #define BUTTONSIZE  15

  7. #define PHOTO   108

  8. #define RECORDVIDEO 109

  9. // #define RESOURCE 110

  10. // #define FORMAT   111

  11. #define CONNECT 112

[html] view plaincopy

[html] view plaincopy

[html] view plaincopy

[cpp] view plaincopy

  1. #include <Windows.h>

  2. #include <STRING>

  3. #include <vfw.h>

  4. #include "VideoRecord.h"
  5. #pragma comment(lib, "vfw32.lib")
  6. LRESULT WINAPI MainWndProc( HWND, UINT, WPARAM, LPARAM );

  7. LRESULT WINAPI SelCapDrcProc( HWND, UINT, WPARAM, LPARAM );

  8. int EnumCapDrv();

  9. VOID APIENTRY HandlePopupMenu(HWND, POINT);  // 右键弹出菜单回调函数

  10. WORD WINAPI VideoThreadProc( LPVOID lParam); // 视频捕捉线程函数
  11. ////////////////全局变量
  12. HANDLE ghInstance;  // 应用程序实例

  13. HWND hwndMain;  // 主窗口句柄

  14. HWND hwndVideo;  // 视频捕捉窗口句柄

  15. HWND hwndSelCapDrvDlg; // 选择捕捉驱动对话框句柄

  16. HWND hwndSelCapDrvLBox; // 选择驱动对话框列举驱动名称列表框句柄

  17. HWND hwndExit;

  18. HWND hwndMin;

  19. HWND hwndHelp;

  20. HWND hwndPhoto;

  21. HWND hwndRecord;

  22. HWND hwndBtnExit;

  23. HWND hwndSource;

  24. HWND hwndFormat;

  25. HWND hwndConnect;

  26. HANDLE hVideoTread; // 视频采集线程

  27. HRGN hRoundRgn; // 窗口修正区域

  28. CAPDRIVERCAPS capDrvCaps; // 驱动性能

  29. bool bRecordFileOpen = false;  // 录像开始标志

  30. bool bPhotoFileOpen = false;  // 照相开始标志

  31. bool bRecording = false;  // 判断是否正在录像

  32. bool bThreadEnd = false; // 判断视频线程是否终止

  33. char recordFile[260]; //保持录像标志

  34. char photoFile[260]; // 保持照相标志

  35. char gachBuffer[260]; // 保存错误信息
  36. //////////////////////////////////////////////////////////////////////////////

  37. // ErrorCallbackProc:    错误回调函数,过capSetCallbackOnError宏来注册回调

  38. // hWnd:              捕获窗口句柄

  39. // nErrID:              错误代码

  40. // lpErrorText:          关于错误的文本信息

  41. ///////////////////////////////////////////////////////////////////////////////

  42. LRESULT CALLBACK ErrorCallbackProc(HWND hWnd,int nErrID,LPSTR lpErrorText)

  43. {

  44. if(!hwndMain)

  45. return FALSE;

  46. if(nErrID==0)

  47. return TRUE;//清除旧的错误

  48. wsprintf(gachBuffer,"Error# %d",nErrID);//显示错误标识和文本

  49. MessageBox(hWnd, lpErrorText, gachBuffer,MB_OK | MB_ICONEXCLAMATION);

  50. return (LRESULT) TRUE;

  51. }
  52. /////////////////////////////////////

  53. int PASCAL WinMain( IN HINSTANCE hInstance,

  54. IN HINSTANCE hPrevInstance,

  55. IN LPSTR lpCmdLine,

  56. IN int nShowCmd )

  57. {

  58. WNDCLASS wndClass;

  59. MSG msg;

  60. char className[] = "VideoClass";

  61. // 如果不是前实例

  62. if (!hPrevInstance)

  63. {

  64. wndClass.lpszClassName = className;

  65. wndClass.lpfnWndProc = MainWndProc;

  66. wndClass.style = CS_HREDRAW|CS_VREDRAW|CS_OWNDC;

  67. wndClass.hInstance = hInstance;

  68. wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);

  69. wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

  70. wndClass.hbrBackground = CreateSolidBrush( RGB(200,200,100) );

  71. wndClass.lpszMenuName = NULL;

  72. wndClass.cbClsExtra = 0;

  73. wndClass.cbWndExtra = 0;

  74. RegisterClass( &wndClass );

  75. }

  76. ghInstance = hInstance;

  77. // 创建主窗口

  78. hwndMain = CreateWindow(className,

  79. "视频监控系统",

  80. WS_POPUP|WS_OVERLAPPED,

  81. GetSystemMetrics(SM_CXFULLSCREEN)/2 - 600/2,

  82. GetSystemMetrics(SM_CYFULLSCREEN)/2-600/2,

  83. 600, 600,

  84. NULL,

  85. NULL,

  86. hInstance,

  87. NULL);
  88. ShowWindow(hwndMain, nShowCmd);
  89. // 设定主窗口主要区域

  90. SetWindowRgn(hwndMain, hRoundRgn, 1);
  91. while( GetMessage(&msg, NULL, 0, 0))

  92. {

  93. TranslateMessage(&msg);//该函数将虚拟键消息转换为字符消息。

  94. //字符消息被寄送到调用线程的消息队列里,当下一次线程调用函数GetMessage或PeekMessage时被读出

  95. DispatchMessage(&msg);//该函数调度一个消息给窗口程序。

  96. //通常调度从GetMessage取得的消息。消息被调度到的窗口程序即是MainProc()函数

  97. }

  98. return msg.wParam;

  99. }
  100. LRESULT CALLBACK MainWndProc( HWND hMain, UINT msg, WPARAM wParam, LPARAM lParam )

  101. {

  102. HDC hdc = GetDC(hMain);

  103. RECT rc;   // 客户区

  104. POINT pt;  // 鼠标位置

  105. HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

  106. switch(msg)

  107. {

  108. case WM_LBUTTONDBLCLK:

  109. SetFocus(hMain);

  110. break;

  111. case WM_RBUTTONDOWN:

  112. GetClientRect(hMain, (LPRECT)&rc);

  113. pt.y = HIWORD(lParam);

  114. pt.x = LOWORD(lParam);

  115. if ( PtInRect(&rc, pt) )

  116. {

  117. HandlePopupMenu(hMain, pt);

  118. }

  119. break;

  120. case WM_PAINT:

  121. RECT helpRect, minRect, exitRect;

  122. HRGN helpRgn, minRgn, exitRgn;

  123. FrameRgn(hdc, hRoundRgn, CreateSolidBrush(RGB(0,0,0)), 2, 2);

  124. BringWindowToTop(hwndSelCapDrvDlg);

  125. return DefWindowProc(hMain, msg, wParam, lParam);

  126. case WM_CREATE:

  127. // 注册错误提示回调函数

  128. capSetCallbackOnError(hwndVideo, (FARPROC)ErrorCallbackProc);

  129. // 主窗口主要圆角矩形区域

  130. hRoundRgn = CreateRoundRectRgn(100, 70, 500, 460, 20, 20);

  131. // 捕捉视频区域s

  132. hwndVideo = capCreateCaptureWindow((LPSTR)"My Capture Window",

  133. WS_CHILD|WS_VISIBLE,

  134. 140, 100, 320, 280,

  135. (HWND)hMain,

  136. (int)1);

  137. hwndExit = CreateWindow("button",    // 建立一个按钮,更多如BUTTON,COMBOBOX,LISTBOX

  138. "x",    // button text

  139. WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_CENTER|BS_VCENTER,

  140. 470, 75, BUTTONSIZE, BUTTONSIZE,

  141. hMain,

  142. (HMENU)EXIT,

  143. (HINSTANCE)ghInstance,

  144. (LPVOID)NULL );

  145. hwndMin = CreateWindow("button",    // 建立一个按钮,更多如BUTTON,COMBOBOX,LISTBOX

  146. "-",    // button text

  147. WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON|BS_CENTER|BS_VCENTER,

  148. 450, 75, BUTTONSIZE, BUTTONSIZE,

  149. hMain,

  150. (HMENU)MINIMIZE,

  151. (HINSTANCE)ghInstance,

  152. (LPVOID)NULL );

  153. hwndHelp = CreateWindow("button",    // 建立一个按钮,更多如BUTTON,COMBOBOX,LISTBOX

  154. "?",    // button text

  155. WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON/*|BS_CENTER|BS_VCENTER*/,

  156. 430, 75, BUTTONSIZE, BUTTONSIZE,

  157. hMain,

  158. (HMENU)HELP,

  159. (HINSTANCE)ghInstance,

  160. (LPVOID)NULL );

  161. hwndPhoto = CreateWindow("button",

  162. "照 相",

  163. WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,

  164. 150, 410, 50, 20,

  165. hMain,

  166. (HMENU)PHOTO,

  167. (HINSTANCE)ghInstance,

  168. (LPVOID)NULL );

  169. SendMessage(hwndPhoto, WM_SETFONT, (WPARAM)hFont, 1);  // 设置按钮字体为系统默认字体

  170. hwndRecord = CreateWindow("button",

  171. "录 像",

  172. WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_VCENTER|BS_CENTER,

  173. 220, 410, 50, 20,

  174. hMain,

  175. (HMENU)RECORDVIDEO,

  176. (HINSTANCE)ghInstance,

  177. (LPVOID)NULL );

  178. SendMessage(hwndRecord, WM_SETFONT, (WPARAM)hFont, 1);// 设置按钮字体为系统默认字体

  179. hwndBtnExit = CreateWindow("button",   // 退出按钮

  180. "退 出",

  181. WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_VCENTER|BS_CENTER,

  182. 400, 410, 50, 20,

  183. hMain,

  184. (HMENU)EXIT,

  185. (HINSTANCE)ghInstance,

  186. (LPVOID)NULL );

  187. SendMessage(hwndBtnExit, WM_SETFONT, (WPARAM)hFont, 1);

  188. // 设置按钮区域

  189. GetClientRect(hwndHelp, &helpRect);

  190. GetClientRect(hwndMin, &minRect);

  191. GetClientRect(hwndExit, &exitRect);
  192. helpRgn = CreateEllipticRgnIndirect(&helpRect);

  193. minRgn = CreateEllipticRgnIndirect(&minRect);

  194. exitRgn = CreateEllipticRgnIndirect(&exitRect);
  195. SetWindowRgn(hwndExit,exitRgn,1);

  196. SetWindowRgn(hwndMin,minRgn,1);

  197. SetWindowRgn(hwndHelp,helpRgn,1);
  198. // 创建选择驱动对话框

  199. hwndSelCapDrvDlg = CreateDialog((HINSTANCE)ghInstance,

  200. MAKEINTRESOURCE(DLG_SELCAPDRIVER),

  201. 0, (DLGPROC)SelCapDrcProc);

  202. hwndSelCapDrvLBox = GetDlgItem(hwndSelCapDrvDlg, LISTBOX_SELCAPDRIVER);
  203. EnumCapDrv();

  204. break;

  205. case WM_COMMAND:

  206. CAPSTATUS capStatus;

  207. switch(wParam)

  208. {

  209. case EXIT:  // 退出系统

  210. SendMessage(hMain, WM_SYSCOMMAND, SC_CLOSE, 0);

  211. break;

  212. case MINIMIZE: // 最小化

  213. SendMessage(hMain, WM_SYSCOMMAND, SC_MINIMIZE, 0);

  214. break;

  215. case HELP:  // 帮助按钮

  216. SendMessage(hMain, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);

  217. break;

  218. case RESOURCE: // 视频源选项

  219. if (capDrvCaps.fHasDlgVideoSource)

  220. {

  221. capDlgVideoSource(hwndVideo);

  222. }

  223. break;

  224. case FORMAT:  // 视频格式选项

  225. if (capDrvCaps.fHasDlgVideoFormat)

  226. {

  227. capDlgVideoFormat(hwndVideo);

  228. }

  229. break;

  230. case CONNECT:

  231. break;

  232. case DISPLAY: // 视频显示选项

  233. if (capDrvCaps.fHasDlgVideoDisplay)

  234. {

  235. capDlgVideoDisplay(hMain);

  236. capGetStatus(hwndVideo, &capStatus, sizeof(CAPSTATUS));// 得到当前捕获窗口的状态

  237. SetWindowPos(hwndVideo, NULL, 0, 0, capStatus.uiImageWidth, capStatus.uiImageHeight, SWP_NOZORDER|SWP_NOMOVE);

  238. }

  239. break;

  240. case PHOTO:  // 抓取图片

  241. if ( capFileSaveDIB(hwndVideo, "test.bmp") ){

  242. MessageBox(hMain, "Save Bmp File Succeeded!", "photo save", MB_OK|MB_ICONINFORMATION);

  243. }

  244. else break;

  245. if (!bPhotoFileOpen)

  246. {

  247. OPENFILENAME ofnp;  // open file name structure

  248. ZeroMemory(&ofnp, sizeof(OPENFILENAME));

  249. ofnp.lStructSize = sizeof(OPENFILENAME);

  250. ofnp.hwndOwner = hMain;

  251. ofnp.lpstrFile = photoFile;

  252. ofnp.lpstrFilter = "*.bmp";

  253. ofnp.nMaxFile = sizeof(photoFile);

  254. ofnp.nFilterIndex = 1;

  255. ofnp.nMaxFileTitle = 0;

  256. ofnp.lpstrInitialDir = NULL;

  257. ofnp.Flags = OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;

  258. // 显示保存文件对话框

  259. if (GetSaveFileName(&ofnp) == TRUE)

  260. {

  261. bPhotoFileOpen = TRUE;

  262. strcpy(photoFile, ofnp.lpstrFile);

  263. strcat(photoFile, ".bmp");

  264. capDriverConnect(hwndPhoto, 0);  // 与驱动连接

  265. capOverlay(hwndPhoto, TRUE); // //使用 hardware overlay

  266. //使 video input directlyinto framebuffer,使不用 CPU

  267. capPreview(hwndVideo, TRUE);  // 抓取图像显示在视窗

  268. capPreviewScale(hwndVideo, TRUE); // 使图像延伸到所设定的视窗大小

  269. capPreviewRate(hwndVideo, 1000/30); // 每秒图像变化张数

  270. capPreview(hwndVideo, TRUE); // 预览图像显示

  271. capGrabFrameNoStop(hwndVideo);

  272. capEditCopy(hwndVideo);

  273. if (capFileSaveDIB(hwndVideo, photoFile)){

  274. MessageBox(hMain, "Save Bmp File Succeeded!", "photo save", MB_OK|MB_ICONINFORMATION);

  275. }

  276. break;

  277. }

  278. }

  279. break;

  280. case RECORDVIDEO:  // 录制视频

  281. if (HIWORD(wParam) == BN_CLICKED && (HWND)lParam == hwndRecord)

  282. {

  283. OPENFILENAME ofnp;

  284. if (!bRecordFileOpen)

  285. {

  286. ZeroMemory(&ofnp, sizeof(OPENFILENAME));

  287. ofnp.lStructSize = sizeof(OPENFILENAME);

  288. ofnp.nMaxFile = sizeof(recordFile);

  289. ofnp.hwndOwner = hMain;

  290. ofnp.lpstrFile = recordFile;

  291. ofnp.lpstrFilter = "*.avi";

  292. ofnp.lpstrInitialDir = NULL;

  293. ofnp.nFilterIndex = 1;

  294. ofnp.lpstrFileTitle = NULL;

  295. ofnp.nMaxFileTitle = 0;

  296. ofnp.Flags = OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;

  297. // 显示保存文件对话框

  298. if (GetSaveFileName(&ofnp) == TRUE)

  299. {

  300. strcpy(recordFile, ofnp.lpstrFile);

  301. strcat(recordFile, ".avi");

  302. bRecordFileOpen = TRUE;

  303. // 创建视频采集线程

  304. DWORD id;

  305. SECURITY_ATTRIBUTES sa;

  306. sa.nLength = sizeof(SECURITY_ATTRIBUTES);

  307. sa.lpSecurityDescriptor = NULL;

  308. sa.bInheritHandle = TRUE;

  309. hVideoTread = CreateThread(&sa,

  310. (ULONG)0,

  311. (LPTHREAD_START_ROUTINE)VideoThreadProc,

  312. (LPVOID)(ULONG)0,

  313. 0,

  314. &id);

  315. // 如果创建线程失败,弹出提示对话框

  316. if (hVideoTread == NULL)

  317. {

  318. MessageBox(NULL, "Video Thread Create Failure!", "Thread", MB_OK|MB_ICONINFORMATION);

  319. }

  320. }

  321. break;

  322. }

  323. if (bRecordFileOpen)  // 已经打开一个选择对话框

  324. {

  325. if (bRecording)  // 已经在录制视频中

  326. {

  327. bThreadEnd = true;

  328. // 结束录制,并保存

  329. if ( capFileSaveAs(hwndVideo, recordFile) ){

  330. MessageBox(NULL, "Save Avi File Succeeded!", "RecordVideo", MB_OK|MB_ICONINFORMATION);

  331. }

  332. SetWindowText(hwndRecord, "录 像");

  333. bRecording = false;

  334. break;

  335. }

  336. else  // 没有录像但是选择了一个文件

  337. {

  338. int rt = 0;

  339. rt = MessageBox(hMain, "Do you want write over that file?", "系统提示", MB_YESNO|MB_ICONINFORMATION);

  340. if (rt == IDYES)  // 继续录制,覆盖当前文件

  341. {

  342. if (capCaptureSequence(hwndRecord))

  343. {

  344. bRecording = true;

  345. SetWindowText(hwndRecord, "停 止");

  346. }

  347. }

  348. else

  349. {

  350. bRecordFileOpen = false;

  351. SendMessage(hMain, WM_COMMAND, MAKEWPARAM(RECORDVIDEO, BN_CLICKED), (LPARAM)hwndRecord);

  352. }

  353. break;

  354. }

  355. break;

  356. }

  357. }

  358. }

  359. break;

  360. case WM_DESTROY:

  361. capSetCallbackOnError(hwndVideo, NULL);

  362. capPreview(hwndVideo, FALSE); // 停止预览

  363. capCaptureAbort(hwndVideo);  // 停止捕获

  364. capDriverDisconnect(hwndVideo); // 断开驱动连接

  365. PostQuitMessage(0);

  366. break;

  367. default:

  368. return DefWindowProc(hMain, msg, wParam, lParam);

  369. }

  370. return 0;

  371. }
  372. LRESULT WINAPI SelCapDrcProc( HWND hMian, UINT msg, WPARAM wParam, LPARAM lParam )

  373. {

  374. //  ShowWindow(hwndSelCapDrvDlg, SW_SHOW);

  375. switch(msg)

  376. {

  377. case WM_INITDIALOG:

  378. return TRUE;

  379. case WM_COMMAND:

  380. switch(wParam)

  381. {

  382. case BTN_SEL:

  383. int sel = 0;

  384. SendMessage(hwndSelCapDrvLBox, LB_GETSELITEMS, 1, sel );  // 获取选择的驱动

  385. SendMessage(hwndVideo, WM_CAP_DRIVER_CONNECT, sel, 0L);   // 连接驱动

  386. SendMessage(hwndSelCapDrvDlg, WM_CLOSE, 0, 0);   // 关闭对话框

  387. SendMessage(hwndVideo, WM_CAP_DRIVER_GET_CAPS, sizeof(CAPDRIVERCAPS), (long)(LPVOID)&capDrvCaps); // 更新驱动的能力

  388. if (capDrvCaps.fHasOverlay)

  389. {

  390. capOverlay(hwndVideo, TRUE);

  391. }

  392. capPreviewRate(hwndVideo, 66);   //设置视频捕获速率提高到66 miliseconds

  393. if ( !capPreview(hwndVideo, TRUE))   //用CapPreview启动预览功能

  394. {

  395. MessageBox(NULL, "预览启动失败", "提示", MB_OK|MB_ICONINFORMATION);

  396. SendMessage(hMian, WM_COMMAND, EXIT, 0);

  397. return FALSE;
  398. }

  399. }

  400. return TRUE;

  401. case WM_CLOSE:

  402. DestroyWindow(hwndSelCapDrvDlg);

  403. return TRUE;

  404. }

  405. return (0L);

  406. }
  407. int EnumCapDrv()

  408. {

  409. char drvName[100];

  410. char drvVesion[100];

  411. char drvStr[200];

  412. for (int i = 0; i < 5; i++)  // 扫面获取驱动信息

  413. {

  414. if ( capGetDriverDescription(i, drvName, sizeof(drvName), drvVesion, sizeof(drvVesion)) )

  415. {

  416. strcpy(drvStr, drvName);

  417. strcat(drvStr, "  ");

  418. strcat(drvStr, drvVesion);

  419. SendMessage(hwndSelCapDrvLBox, LB_ADDSTRING, 0, (LPARAM)drvStr); // 向列表框增加字符串

  420. SendMessage(hwndSelCapDrvLBox, LB_SETITEMDATA, i, (LPARAM)i);

  421. }

  422. }

  423. return 0;

  424. }
  425. VOID APIENTRY HandlePopupMenu( HWND hwnd, POINT pt )

  426. {

  427. HMENU hmenu;

  428. HMENU hPopupMenu;

  429. hmenu = LoadMenu((HINSTANCE)ghInstance, MAKEINTRESOURCE(IDR_POPUPMENU));

  430. if(hmenu == NULL) return;

  431. // 获取子菜单

  432. hPopupMenu = GetSubMenu(hmenu, 0);

  433. // 弹出菜单使用屏幕坐标,所以转换鼠标点击坐标到屏幕坐标

  434. ClientToScreen(hwnd, &pt);

  435. TrackPopupMenu(hPopupMenu, TPM_LEFTALIGN|TPM_LEFTBUTTON, pt.x, pt.y, 0, hwnd, NULL);

  436. DestroyMenu(hmenu); // 销毁指定菜单,并释放此菜单占用的内存

  437. }
  438. WORD WINAPI VideoThreadProc( LPVOID lParam )

  439. {

  440. // 捕获视频

  441. if( capCaptureSequence(hwndVideo) ) //该函数调控启动流视频和音频捕获到一个文件,你能使用这个功能发送消息

  442. {

  443. SetWindowText(hwndRecord, "停 止");

  444. MessageBox(NULL, "Start to capture video.", "提示", MB_OK|MB_ICONINFORMATION);

  445. bRecording = true;

  446. }

  447. while(!bThreadEnd);

  448. MessageBox(NULL, "Leaving Record Thread", "Thread",NULL);

  449. return 0;

  450. }

win32 摄像头捕获系统vfw,码迷,mamicode.com

时间: 2024-10-14 08:31:22

win32 摄像头捕获系统vfw的相关文章

iOS 捕获系统外异常

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐. 工欲善其事,必先

H5调用设备摄像头和系统相册

1.调用设备摄像头 <input type="file" accept="image/*" capture="camera"> 2.调用系统相册 <input type="file" capture="camera"> 3.调用摄像头和系统相册 <input type="file" accept="image/*">

Unity 3D 调用摄像头捕获照片 录像

1,要想调用摄像头首先要打开摄像头驱动,如果用户允许则可以使用. 2,定义WebCamTexture的变量用于捕获单张照片. 3,连续捕获须启用线程. 实现代码: using UnityEngine; using System.Collections; using System.IO; using System.Runtime.Serialization; using System.Runtime .Serialization.Formatters.Binary; using System.Th

使用MDT2013部署Win8系统之九-通过MDT部署捕获系统镜像

在上一篇博文中,我们将模板机捕获为了一个WIM镜像,这个镜像就是我们要部署到客户端的操作系统镜像,首先需要将它导入到Operating Systems节点中 在Operating Systems节点上单击右键,选择"Import Operating Systems" 选择"Custom imagefile",表示导入一个自定义的镜像文件 定位到C:\DeploymentShare\Captures\,选择"WIN8_EN_01"这就是我们要导入的

Android 捕获系统全局异常

Android系统的"程序异常退出",给应用的用户体验造成不良影响.为了捕获应用运行时异常并给出友好提示,便可继承UncaughtExceptionHandler类来处理.通过Thread.setDefaultUncaughtExceptionHandler()方法将异常处理类设置到线程上即可. 1.异常处理类,代码如下: [java] view plaincopy public class CrashHandler implements UncaughtExceptionHandle

opencv摄像头捕获视频

1.ord()函数:它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常. 2.cap.read()返回一个布尔值,如果帧读取的是正确的,就是True,可以通过检查返回值来看视频文件是否已经到了结尾 3.cap.isOpened()可以用来检查是否成功初始化,如果返回值是true那就没有问题 否则就要使用cap.open() 4.可以使用函数

lduan SCCM 2012 捕获系统镜像(十一)

iOS重写系统的返回按钮,捕获系统返回按钮事件

#import <UIKit/UIKit.h> @protocol BackButtonHandlerProtocol <NSObject> @optional // Override this method in UIViewController derived class to handle 'Back' button click -(BOOL)navigationShouldPopOnBackButton; @end @interface UIViewController (

iOS捕获系统异常

// 提交异常Log信息 void UncaughtExceptionHandler(NSException *exception) { // 异常Log信息 NSString *errorStr = [NSString stringWithFormat:@"错误详情:%@\n%@\n%@", [exception name], [exception reason], [[exception callStackSymbols] componentsJoinedByString:@&qu