5th

一、COM组件初始化

    如果在多线程环境中使用COM组件,应使用CoInitializeEx函数加COINIT_MULTITHREADED标志而非CoInitialize函数对COM组件初始化。

 

二、bmp文件格式

    to be continued

 

三、时间单位

    1秒 = 1000毫秒 = 1000微妙 = 1000纳秒 = 1000皮秒

    两个GetTickCount函数相减的时间差单位为毫秒(milliseconds)。

    windows有相当一部分函数的时间参数单位为 100-nanosecond units,nanosecond即纳秒。1毫秒 = 10000 * 100-nanosecond units

    千万注意数据越界的问题。1秒= 10000 * 1000 100-nanosecond units。2的32次方等于4294967296,仅能表示429秒。我就在使用以100-nanosecond units为参数的函数时栽过跟头。见以下代码:

/*错误代码*/



void Func(QWORD time);//函数申明,以100-nanosecond units为单位



DWORD videoTime = 500 * 1000//500秒

Func(videoTime * 10000);//生成一个临时变量作为实参,它的类型为DWORD,越界了!

 

 

四、使用GDI+asf方式录屏的总结

    微软有一套工具软件叫windows media encoder,用的就是这套SDK做的。

    对带有视频播放的桌面录制时,如果视频编码使用WMMEDIASUBTYPE_MSS2(Video encoded with the Windows Media Video 9 Screen codec.),部分区域的颜色值会失真,且视频画面效果不佳,调节其他参数不能解决这两个问题。

    使用WMV1格式,录制效果、文件大小都很不错。可惜在配置低的机器上CPU占用率几乎一直100%。

    使用VM1格式并开启VBR模式后,可解决此问题。

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd743759(v=vs.85).aspx

   我使用的是quality-based vbr。

    注意,SDK中有许多get、set属性的函数,需要传入、传出参数的数据类型。DWORD是unsigned long,而WORD是unsigned short。使用WORD可能出现数据越界。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd743759(v=vs.85).aspx

 

五、键盘钩子

    to be continued

 

六、解决GDI截屏时没有鼠标问题

GetCursorPos

LoadCursor

GetIconInfo

DrawIcon

 

    有时程序需要写一些临时文件,例如录制时音频、视频分开录制,合并后分录的文件就可以删除了。这些临时文件,程序自己负责创建、读写、删除。为了用户友好性考虑,不需要被用户看见,另外也在一定程度上避免被用户误操作。

GetTempPath

 

    core audio interface MMDevice API 、waveIn、mixerAPI这三套API,获取到的音频设备名可能不同。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd371399(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/desktop/dd743586(v=vs.85).aspx

 

九、《windows media编程向导》(附随书CD源码)

    陆其明写的。此版电子书有缺页,但没多大关系,因为它大部分的内容其实就是翻译MSDN。重点看sample吧,另外WMFSDK上也有不少sample可供参考。

    下载地址:

http://download.csdn.net/detail/q191201771/4562386

你可能感兴趣的:(T)