MY NOTE 2010/10 N1
///////////////////////////进程间的通信方式有5种/////////////////// 内存映射 WM_COPYDATA 邮槽 命名管道 全局原子
/////////////////////////怎样激活一个窗口////////////////////////////////// [note] 这里通过进程hwnd打开创建进程的窗口 ::SetForegroundWindow(hwnd); ::SetActiveWindow(hwnd);
//////////////////////怎样关闭进程////////////////////////////////////////// //有主窗体,发送主窗口关闭消息,终止线程 ::PostMessage( hwnd, WM_CLOSE, 0, 0 ); //如果没有主窗体,则用TerminateProcess终止进程 TerminateProcess( hwnd,1 )
//////////////////////CListCtrl选择操作/////////////////////////////////////
CListCtrl * pListCtrl = (CListCtrl*)GetDlgItem(IDC_LISTPROCESS); POSITION pos = pListCtrl->GetFirstSelectedItemPosition(); if (pos) { int nItemIndex = pListCtrl->GetNextSelectedItem(pos); //激活进程 ActivateProcess(&g_tlist[nItemIndex]); }
//////////////////对文件的操作///////////////// 打开文件,若文件不存在,则创建一个新的 CFile cfile; if(!cfile.Open( FILEPATH, CFile::modeRead | CFile::modeWrite ) ) { cfile.Open( FILEPATH , CFile::modeCreate); }
//关闭文件 cfile.Close();
///////////////////创建列表CList/////////////////// CList<typename,const tepename&> 列表名; AddTail(ARG_TYPE& ); //添加到列表尾部 AddHead(ARG_TYPE& ); //添加到列表头部 SetAt( POSITION , newContext); //设置某节点值 InsertAfter(POSITION, newContext);
///////////////怎样销毁一个数组/////////////////// char *pBuff = new char[255]; delete pBuff; //delete 后面要求是指针 pBuff = NULL;
///////////////怎样退出指定线程()////////////////// //等待4秒,如果读线程没有退出,则强制退出 if (WaitForSingleObject(m_hReadThread,4000) == WAIT_TIMEOUT) { TerminateThread(m_hReadThread,0); }
//////////////////////// 我不是什么好战分子,至少我的青春还有一个尾巴!我有自己的老婆孩子,父母亲人。我希望能够和她们一起在和平阳光下过着平静而幸福的生活!但是我并不讳言战争,我也不害怕战争!虽然,我身体也不是非常强壮,但是我仍然愿意!!在战争爆发的那一刻,我会毫不犹豫地拿起枪杆,奔赴前线。无论是马革裹尸还也好,还是青山埋遗骨也罢,我都无怨无悔,我要让自己的儿子、孙子明白:钱,有时候买不来尊严,要想不受人欺负,就要用自己的鲜血去洗涤对手的双眼,用生命去震撼对手的灵魂 ///////////////////////
width: 5.2 heigth: 6
///////////////////////////////what is "WDM" and "VFW"//////////////////////////////// Windows Driver Model, WDM Video for Windows , VFW
///////////////PreviewCamera(视频预览steps)/////////////////////////// step1: 先释放DSHOW接口
step2: 创建ICaptureGrapBuilder2接口, 【code】 CComPtr<ICaptureGrapBuilder2> m_pCaptureGraphBuilder; CHK(m_pCaptureGraphBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder));
step3: 创建IGrapBuilder接口 CComPtr<IGraphBuilder> m_pGraphBuilder; CHK(m_pGraphBuilder.CoCreateInstance(CLSID_FilterGraph));
step4: 关联Capture Grap Builder 和 Filter Graph Manager CHK( m_pCaptureGraphBuilder->SetFiltergraph(m_pGraphBuilder));
~~~
step5: 得到IMediaSeeking接口和IMediaEvent接口 CComPtr<IMediaSeeking> m_pMediaSeeking; CHK(m_pGraphBuilder.QueryInterface(&m_pMediaSeeking));
CComPtr<IMediaEvent> m_pMediaEvent; CHK(m_pGraphBuilder.QueryInterface(&m_pMediaEvent));
step6: (new) 创建视频捕捉Filter ;创建视频捕捉属性页接口 CComPtr<IBaseFilter> m_pVideoCaptureFilter; //定义基本过滤器 CHK(m_pVideoCaptureFilter.CoCreateInstance(CLSID_VideoCapture));
CComPtr<IPersistPropertyBag> m_pPropertyBag ; CHK(m_pVideoCaptureFilter->QueryInterface(&m_pPropertyBag));
step7: 选择视频捕获设备,默认选择第一个视频捕获设备 [Sub Function] //[out] wzDeviceName GetFirstCameraDriver(wzDeviceName);
CComVariant varCamName; //定义摄像头设备名称 varCamName = wzDeviceName;
//实例化继承与IPropertyBag类的对象,调用Write成员函数写入属性值 ... 调用load函数加载自定义PropertyBag CHK(m_pPropertyBag->Load(&PropBag,NULL));
step8: 将视频捕捉FILTER添加到FILTER图中。 CHK(m_pGraphBuilder->AddFilter(m_pVideoCaptureFilter,L"Video capture source"));
step9: 创建IDMOWrapper接口,(貌似用来编码Encode) CComPtr<IDMEWrapper> pWrapperFilter CComPtr<IBasicFilter> pVideoEncode; CHK(pVideoEncode.CoCreateInstance(CLSID_DMOWrapperFilter)); CHK( pVideoEncode.QueryInterface(&pWrapperFilter) );
step10: 加载WMV9 DMO CHK(pWrapperFilter->Init(CLSID_CWMV9EncMediaObject,DMOCATEGORY_VIDEO_ENCODE));
step11: 将编码器加到Filter图中 CHK(m_pGraphBuilder->AddFilter(pVideoEncode,L"WMV9 DMO Encode"));
step12: 创建ASF多路(复用)器,并加入到过滤器图中 CHK( m_pCaptureGraphBuilder->SetOutputFileName(&MEDIASUBTYPE_Asf,strFileName,&pASFMultiplexer,&pFileSinkFilter) );
step13: 渲染预览视频PIN CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, NULL ));
step14: 设置视频预览窗口 //视频窗口接口 CComPtr<IVideoWindow> m_pVideoWindow ; CHK(m_pGraphBuilder.QueryInterface(&m_pVideoWindow));
////设置视频播放的WINDOWS窗口 m_pVideoWindow->put_Owner((OAHWND)hVideoWnd); m_pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN);
//设置视频尺寸 GetClientRect(hVideoWnd,&rectVideo); m_pVideoWindow->SetWindowPosition(0,0,rectVideo.Width(),rectVideo.Height()); m_pVideoWindow->put_Visible(OATRUE);
step15: ,渲染捕捉PIN,用于录像 CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, pVideoEncoder, pASFMultiplexer ));
Step16: 创建Still Pin,用于抓图 CHK(m_pImageSinkFilter.CoCreateInstance(CLSID_IMGSinkFilter)); CHK(m_pGraphBuilder->AddFilter(m_pImageSinkFilter, L"Still image filter" )); CHK(m_pCaptureGraphBuilder->RenderStream( &PIN_CATEGORY_STILL, &MEDIATYPE_Video, m_pVideoCaptureFilter, NULL, m_pImageSinkFilter ));
Step17: 设置捕捉流暂停 CHK(m_pCaptureGraphBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, m_pVideoCaptureFilter, 0, 0 ,0,0 ));
Step18: 预览视频 CHK(m_pMediaControl->Run()); Sleep(1000); |