厚积薄发,丰富的公用类库积累,助你高效进行系统开发(7)
俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。
本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公用类库的接口方法以及详细使用操作,力求给自己继续优化,积攒更丰富的公用类库资源,加深了解的同时,也给大家展现公用类库好的方面。
本篇的公用类库的介绍主题是设备相关的部分,包括计算机硬件信息(如系统信息、电脑CPU、磁盘、网卡、内存等)、声音播放控制、 键盘属性及操作、全局键盘按键钩子、鼠标属性及操作、鼠标按键钩子等类库信息。如果你对前面的类库介绍文章有兴趣,可以参考下面的连接了解。
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(6)
1、WAV声音格式文件播放辅助类AudioHelper
实现效果
1)本辅助类主要是用来方便实现播放WAV声音格式文件的操作。
2)声音播放可以用在特定事件的触发上,如来电、收到消息等,经典的就如QQ收到信息,咳嗽的声音,使用声音播放可以提高更好的用户体验。
实现代码
1)辅助类提供的方法接口如下所示:
///<summary>
///</summary>
///<paramname="location">声音文件路径</param>
publicstaticvoidPlay(stringlocation)
///<summary>
///播放.wav格式的声音文件
///</summary>
///<paramname="playMode">播放声音的枚举模式。默认为AudioPlayMode.Background。</param>
///<paramname="location">声音文件路径</param>
publicstaticvoidPlay(stringlocation,AudioPlayModeplayMode)
///<summary>
///播放.wav格式的声音文件
///</summary>
///<paramname="stream"><seecref="T:System.IO.Stream"></see>声音文件的流对象</param>
///<paramname="playMode">播放声音的枚举模式。默认为AudioPlayMode.Background。</param>
publicstaticvoidPlay(Streamstream,AudioPlayModeplayMode)
///<summary>
///播放.wav格式的声音文件
///</summary>
///<paramname="data">声音文件的字节数组</param>
///<paramname="playMode">播放声音的枚举模式。默认为AudioPlayMode.Background。</param>
publicstaticvoidPlay(byte[]data,AudioPlayModeplayMode)
///<summary>
///播放系统声音
///</summary>
publicstaticvoidPlaySystemSound(SystemSoundsystemSound)
///<summary>
///停止正在后台播放的声音
///</summary>
publicstaticvoidStop()
2)辅助类AudioHelper的使用例子代码如下所示
{
try
{
AppConfigconfig=newAppConfig();
stringSoundFilePath=config.AppConfigGet("SoundFilePath");
AudioHelper.Play(SoundFilePath);//AudioHelper.Play("ringin.wav");
}
catch(Exceptionex)
{
LogHelper.Error("没找到声音文件",ex);
}
}
2、声音文件播放操作辅助类SoundPlayerHelper。除了MP3声音文件外,还可以播放WAV格式、midi格式声音文件。
实现效果
1)本辅助类主要是用来方便实现MP3文件、WAV文件、Midi文件等声音的播放操作,并提供音量控制操作功能。实现代码
1)辅助类提供的方法接口如下所示:
///<summary>
///</summary>
///<paramname="soundFileName">声音文件路径(可以是MP3、WAV、Midi等声音文件)</param>
///<paramname="Repeat">是否重复播放</param>
publicstaticvoidPlay(stringsoundFileName,boolRepeat)
///<summary>
///播放声音嵌入资源字节数组
///</summary>
///<paramname="soundEmbeddedResource">声音文件嵌入资源字节数组(可以是MP3、WAV、Midi等声音格式)</param>
///<paramname="Repeat">是否重复播放</param>
publicstaticvoidPlay(byte[]soundEmbeddedResource,boolRepeat)
///<summary>
///暂停播放
///</summary>
publicstaticvoidPause()
///<summary>
///停止播放
///</summary>
publicstaticvoidStop()
///<summary>
///清除操作
///</summary>
publicstaticvoidDispose()
///<summary>
///获取或设置音量的百分比
///</summary>
///<returns></returns>
publicstaticfloatVolumePercent
///<summary>
///获取音量
///</summary>
///<returns></returns>
publicstaticfloatGetVolume()
///<summary>
///设置音量
///</summary>
///<paramname="volume"></param>
publicstaticvoidSetVolume(floatvolume)
///<SUMMARY>
///返回当前状态播放:播放,暂停,停止等
///</SUMMARY>
publicstaticstringStatus
2)辅助类SoundPlayerHelper的使用例子代码如下所示
privatevoidbtnPlayMp3_Click(objectsender,EventArgse)
{
if(!isPlay)
{
stringmp3File=Path.Combine(Application.StartupPath,"伤不起.mp3");
stringwaveFile=Path.Combine(Application.StartupPath,"ringin.wav");
stringmidFile=@"C:\Windows\Media\onestop.mid";
SoundPlayerHelper.Play(mp3File,false);//播放MP3格式文件
//SoundPlayerHelper.Play(waveFile,true);//播放WAV格式文件
//SoundPlayerHelper.Play(midFile,false);//播放Midi格式文件
this.btnPlayMp3.Text="停止播放";
}
else
{
SoundPlayerHelper.Stop();//停止播放
//SoundPlayerHelper.Pause();//暂停播放
this.btnPlayMp3.Text="播放声音";
}
stringstatu=SoundPlayerHelper.Status;
this.Text=statu;
isPlay=!isPlay;
}
privatevoidtrackBar1_Scroll(objectsender,EventArgse)
{
//设置音量
floatvol=SoundPlayerHelper.VolumePercent;
SoundPlayerHelper.VolumePercent=trackBar1.Value;
}
3、提供用户硬件唯一信息的辅助类 FingerprintHelper
实现效果
1)本辅助类主要是用来方便实现获取用户硬件的相关信息,根据用户各种硬件(CPU、网卡、磁盘、主板等)标识信息,获取一个8位唯一标识数字。
2)本辅助类只提供了一个公共的方法Value,它集合了CPU、网卡、磁盘、主板等信息,通过这个8位的数字标识,我们可以唯一区分一台电脑,类似我们每个人的指纹信息一样,很少会发生重复的现象,可以用在一些关键的注册授权机制上。
实现代码
1)辅助类提供的方法接口如下所示:
///根据用户各种硬件(CPU、网卡、磁盘、主板等)标识信息,
///获取一个8位唯一标识数字
///</summary>
publicstaticstringValue()
///<summary>
///获取硬件的标识信息
///</summary>
privatestaticstringidentifier(stringwmiClass,stringwmiProperty,stringwmiMustBeTrue)
///<summary>
///获取硬件的标识信息
///</summary>
privatestaticstringidentifier(stringwmiClass,stringwmiProperty)
///<summary>
///获取CPU信息
///</summary>
privatestaticstringcpuId()
///<summary>
///获取BOIS主板标识信息
///</summary>
privatestaticstringbiosId()
///<summary>
///获取主硬盘的标识信息
///</summary>
///<returns></returns>
privatestaticstringdiskId()
///<summary>
///获取主板的标识信息
///</summary>
///<returns></returns>
privatestaticstringbaseId()
///<summary>
///获取主视频控制器标识信息
///</summary>
///<returns></returns>
privatestaticstringvideoId()
///<summary>
///获取第一个可用网卡信息
///</summary>
///<returns></returns>
privatestaticstringmacId()
///<summary>
///转换内容为8位数字
///</summary>
privatestaticstringpack(stringtext)
MessageUtil.ShowTips(identity);
4、获取系统信息、电脑CPU、磁盘、网卡、内存等相关信息辅助类 HardwareInfoHelper
实现效果
1)本辅助类主要是用来方便获取系统信息、电脑CPU、磁盘、网卡、内存等相关信息。
实现代码
1)辅助类提供的方法接口如下所示:
///<summary>
///</summary>
///<paramname="drvID">盘符,如"C"</param>
///<returns></returns>
publicstaticstringHDVal(stringdrvID)
///<summary>
///获取默认C盘的磁盘***
///</summary>
///<returns></returns>
publicstaticstringHDVal()
///<summary>
///获取硬盘ID
///</summary>
///<returns></returns>
publicstaticstringGetDiskID()
///<summary>
///获取硬盘Model的信息
///</summary>
publicstaticstringGetDiskModel()
///<summary>
///获得Cpu使用率
///</summary>
publicstaticintGetCpuUsage()
///<summary>
///获取CPU的ID
///</summary>
///<returns></returns>
publicstaticstringGetCPUId()
///<summary>
///获取CPU的名称
///</summary>
///<returns></returns>
publicstaticstringGetCPUName()
///<summary>
///返回USB盘符列表
///</summary>
publicstaticList<string>GetUSBDriveLetters()
///<summary>
///获得硬盘信息
///</summary>
publicstaticHardDiskInfoGetHDInfo(bytedriveIndex)
#region其他数据
///<summary>
///获取MAC地址
///</summary>
///<returns></returns>
publicstaticstringGetMacAddress()
///<summary>
///获取IP地址
///</summary>
publicstaticstringGetIPAddress()
///<summary>
///获取操作系统的登录用户名
///</summary>
publicstaticstringGetUserName()
///<summary>
///获取计算机名
///</summary>
publicstaticstringGetComputerName()
///<summary>
///获取PC类型
///</summary>
publicstaticstringGetSystemType()
///<summary>
///获取物理内存
///</summary>
publicstaticstringGetTotalPhysicalMemory()
#endregion
2)辅助类HardwareInfoHelper的使用例子代码如下所示
{
stringcomputerName=HardwareInfoHelper.GetComputerName();
stringuserName=HardwareInfoHelper.GetUserName();
stringsystemType=HardwareInfoHelper.GetSystemType();
stringcpuid=HardwareInfoHelper.GetCPUId();
stringcpuName=HardwareInfoHelper.GetCPUName();
intcpuUsage=HardwareInfoHelper.GetCpuUsage();
stringdiskId=HardwareInfoHelper.GetDiskID();
stringip=HardwareInfoHelper.GetIPAddress();
stringmacAddress=HardwareInfoHelper.GetMacAddress();
stringmemery=HardwareInfoHelper.GetTotalPhysicalMemory();
StringBuildersb=newStringBuilder();
sb.AppendFormat("ComputerName:\t{0}\r\n",computerName);
sb.AppendFormat("UserName:\t{0}\r\n",userName);
sb.AppendFormat("SystemType:\t{0}\r\n",systemType);
sb.AppendFormat("CPUID:\t{0}\r\n",cpuid);
sb.AppendFormat("CPUName:\t{0}\r\n",cpuName);
sb.AppendFormat("CPUUsage:\t{0}\r\n",cpuUsage);
sb.AppendFormat("DiskId:\t{0}\r\n",diskId);
sb.AppendFormat("IP:\t{0}\r\n",ip);
sb.AppendFormat("MacAddress:\t{0}\r\n",macAddress);
sb.AppendFormat("TotalPhysicalMemory:\t{0}\r\n",memery);
MessageUtil.ShowTips(sb.ToString());
stringidentity=FingerprintHelper.Value();
MessageUtil.ShowTips(identity);
}
5、键盘操作辅助类KeyboardHelper,提供属性访问敲击那个键,以及发送软键盘消息等操作。
实现效果
1)本辅助类主要是用来方便实现访问键盘的大写键、数字键等键的开启情况,另外判断CTRL、Shift、Alt键是否按下的操作,辅助类也封装了发送软键盘消息等操作。实现代码
1)辅助类提供的方法接口如下所示:
///<summary>
///判断ALT建是否按下
///</summary>
publicstaticboolAltKeyDown
///<summary>
///判断CapsLock大写键是否打开
///</summary>
publicstaticboolCapsLock
///<summary>
///判断CTRL键是否按下
///</summary>
publicstaticboolCtrlKeyDown
///<summary>
///判断NumLock数字键是否打开
///</summary>
publicstaticboolNumLock
///<summary>
///判断ScrollLock滚动锁定键是否打开
///</summary>
publicstaticboolScrollLock
///<summary>
///判断Shift键是否按下
///</summary>
publicstaticboolShiftKeyDown
#endregion
#region操作方法
///<summary>
///发送一个或多个击键到活动窗口。
///</summary>
///<paramname="keys">定义发送键的字符串。特殊控制键代码SHIFT(+),CTRL(^),ALT(%)。Send("{SPACE}")、Send("+{TAB}")</param>
publicstaticvoidSendKeys(stringkeys)
///<summary>
///发送一个或多个击键到活动窗口
///</summary>
///<paramname="keys">定义发送键的字符串.特殊控制键代码SHIFT(+),CTRL(^),ALT(%)。Send("{SPACE}")、Send("+{TAB}")</param>
///<paramname="wait">指定是否要等待应用程序继续之前得到处理的击键。默认为True。
///</param>
publicstaticvoidSendKeys(stringkeys,boolwait)
#endregion
2)辅助类
KeyboardHelper的使用例子代码如下所示boolnumLock=KeyboardHelper.NumLock;
boolscrollLock=KeyboardHelper.ScrollLock;
KeyboardHelper.SendKeys("{TAB}");//发送Tab键
KeyboardHelper.SendKeys("%{F4}");//发送Alt+F4退出
相关的按键参考如下所示
6、全局键盘钩子,用来捕捉系统全局的键盘输入辅助类 KeyboardHook
实现效果
1)本辅助类主要是用来方便实现全局键盘钩子,用来捕捉系统全局的键盘输入。
2)通过键盘钩子,我们可以获取用户的各种按键信息,以及可以屏蔽指定按键的操作,全局键盘钩子,就如一扇门一样,可以记录相关的键盘输入操作,也可以增加指定的事件处理,可以控制键盘按键继续流转到其他程序中,或者屏蔽操作。最典型的钩子操作例子就是金山词霸等取词软件。
3)辅助类通过KeyboardHook.Enable()开始键盘钩子,通过KeyboardHook.Disable()禁用或者通过KeyboardHook.Remove(**)来移除指定的键盘钩子事件。
实现代码
1)辅助类提供的方法接口如下所示:
///<summary>
///</summary>
publicstaticboolControl=false;
///<summary>
///判断Shift键是否按下
///</summary>
publicstaticboolShift=false;
///<summary>
///检查Alt键是否按下
///</summary>
publicstaticboolAlt=false;
///<summary>
///检查Windows键是否按下
///</summary>
publicstaticboolWin=false;
///<summary>
///键盘敲击事件代理定义
///</summary>
publicdelegateboolKeyPressed();
///<summary>
///处理键盘按下委托函数
///</summary>
///<paramname="key">
///按下的键。需检查CTRL、Shift、Win等键。
///<returns>
///如果想应用程序能捕捉到,设置为True;如果设置为False,则键盘事件被屏蔽。
///</returns>
publicdelegateboolKeyboardHookHandler(Keyskey);
///<summary>
///添加一个键盘钩子处理给当前的键
///</summary>
publicstaticKeyboardHookHandlerKeyDown;
///<summary>
///启动键盘钩子处理
///</summary>
///<returns>如无异常返回True</returns>
publicstaticboolEnable()
///<summary>
///禁用键盘钩子处理
///</summary>
///<returns>如果禁用成功,则返回True</returns>
publicstaticboolDisable()
///<summary>
///添加一个按下键的钩子处理
///</summary>
///<paramname="key">按下的键</param>
///<paramname="callback">按键的处理事件函数</param>
publicstaticboolAddKeyDown(Keyskey,KeyPressedcallback)
///<summary>
///添加一个键弹起的钩子处理
///</summary>
///<paramname="key">弹起的键</param>
///<paramname="callback">按键的处理事件函数</param>
publicstaticboolAddKeyUp(Keyskey,KeyPressedcallback)
///<summary>
///添加一个按下键的钩子处理
///</summary>
///<paramname="key">按下的键</param>
///<paramname="callback">按键的处理事件函数</param>
publicstaticboolAdd(Keyskey,KeyPressedcallback)
///<summary>
///移除一个按下键的钩子处理
///</summary>
///<paramname="key">移除的按键</param>
publicstaticboolRemoveDown(Keyskey)
///<summary>
///移除一个弹起键的钩子处理
///</summary>
///<paramname="key">移除的按键</param>
publicstaticboolRemoveUp(Keyskey)
///<summary>
///移除一个键的钩子处理
///</summary>
///<paramname="key">移除的按键</param>
publicstaticboolRemove(Keyskey)
///<summary>
///返回一个给定的键基于当前的控制键的字符串表示形式。
///</summary>
///<paramname="key">当前的键</param>
///<returns></returns>
publicstaticstringKeyToString(Keyskey)
{
KeyboardHook.Enable();
KeyboardHook.Add(Keys.S,newKeyboardHook.KeyPressed(TestKeyboadHook));
}
privateboolTestKeyboadHook()
{
//仅处理Alt+S的钩子事件
if(KeyboardHook.Alt)
{
this.Text=DateTime.Now.ToString();
NativeMethods.BringToFront(this.Handle);
}
returntrue;//如果要被其他程序捕捉,返回True,否则返回False。
}
privatevoidbtnRemoveKeyboadHook_Click(objectsender,EventArgse)
{
KeyboardHook.Remove(Keys.S);
}
7、鼠标辅助操作类,提供获取鼠标状态以及模拟鼠标点击等操作 MouseHelper
实现效果
1)本辅助类主要是用来方便获取鼠标状态以及模拟鼠标点击等操作,通过该辅助类,可以获取鼠标是否安装、滚轮是否支持、或者模拟鼠标移动、单击、双击等操作。
实现代码
1)辅助类提供的方法接口如下所示:
#region鼠标相关属性
///<summary>
///检查鼠标是否已经安装.
///</summary>
publicstaticboolMousePresent
///<summary>
///检查鼠标是否存在滚轮
///</summary>
publicstaticboolWheelExists
///<summary>
///获取鼠标滚轮每次滚动的行数
///</summary>
publicstaticintWheelScrollLines
#endregion
#region鼠标操作函数
///<summary>
///连续两次鼠标单击之间会被处理成双击事件的间隔时间。
///</summary>
///<returns>以毫秒表示的双击时间</returns>
[DllImport("user32.dll",EntryPoint="GetDoubleClickTime")]
publicstaticexternintGetDoubleClickTime();
///<summary>
///检取光标的位置,以屏幕坐标表示。
///</summary>
///<paramname="lpPoint">POINT结构指针,该结构接收光标的屏幕坐标。</param>
///<returns>如果成功,返回值非零;如果失败,返回值为零。</returns>
[DllImport("user32.dll",EntryPoint="GetCursorPos")]
publicstaticexternintGetCursorPos(PointlpPoint);
///<summary>
///把光标移到屏幕的指定位置。如果新位置不在由ClipCursor函数设置的屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。
///</summary>
///<paramname="x">指定光标的新的X坐标,以屏幕坐标表示。</param>
///<paramname="y">指定光标的新的Y坐标,以屏幕坐标表示。</param>
///<returns>如果成功,返回非零值;如果失败,返回值是零</returns>
[DllImport("user32.dll")]
publicstaticexternintSetCursorPos(intx,inty);
#endregion
#region封装函数
///<summary>
///在当前鼠标的位置左键点击一下
///</summary>
publicstaticvoidMouseClick()
///<summary>
///移动到坐标位置点击
///</summary>
///<paramname="location">要点击的坐标位置,屏幕绝对值</param>
publicstaticvoidMouseClick(Pointlocation)
///<summary>
///移动到坐标位置点击
///</summary>
///<paramname="location">要点击的坐标位置,屏幕绝对值</param>
publicstaticvoidMouseRightClick(Pointlocation)
///<summary>
///移动到坐标位置
///</summary>
publicstaticvoidMouseMove(Pointlocation)
#endregion
操作比较简单,自己操作下即可。
8、全局的鼠标钩子操作类,用作捕捉全局的鼠标输入操作的辅助类 MouseHook
实现效果
1)本辅助类主要是用来方便实现全局的鼠标钩子,用作捕捉全局的鼠标输入操作。
实现代码
1)辅助类提供的方法接口如下所示:
///鼠标输入处理代理
///</summary>
///<paramname="button">操作的鼠标键</param>
///<returns>如果想应用程序能捕捉到,设置为True;如果设置为False,则鼠标事件被屏蔽。</returns>
publicdelegateboolMouseButtonHandler(MouseButtonsbutton);
///<summary>
///鼠标按键按下处理操作
///</summary>
publicstaticMouseButtonHandlerButtonDown;
///<summary>
///鼠标按键弹起处理操作
///</summary>
publicstaticMouseButtonHandlerButtonUp;
///<summary>
///鼠标移动处理操作
///</summary>
publicstaticMouseMoveHandlerMoved;
///<summary>
///鼠标滚动处理操作
///</summary>
publicstaticMouseScrollHandlerScrolled;
///<summary>
///启动鼠标钩子处理
///</summary>
///<returns>如无异常则返回True</returns>
publicstaticboolEnable()
///<summary>
///禁用鼠标钩子操作
///</summary>
///<returns>禁用成功则返回True</returns>
publicstaticboolDisable()
2)辅助类
MouseHook的使用例子代码如下所示{
MouseHook.ButtonDown=newMouseHook.MouseButtonHandler(TestMouseHook);
MouseHook.Scrolled=newMouseHook.MouseScrollHandler(TestMouseScroll);
MouseHook.Enable();
}
privateboolTestMouseHook(MouseButtonssender)
{
this.Text=string.Format("你单击了鼠标键:{0}",sender);
returntrue;
}
privateboolTestMouseScroll(intdelta)
{
this.Text=string.Format("你滚动了鼠标值:{0}",delta);
returntrue;
}
整理文档本身也对类库进行进一步的优化,整理过程本身也是一次马拉松式的身心赛跑。