厚积薄发,丰富的公用类库积累,助你高效进行系统开发(7)

本篇博客继续优化已有的共用类库,详细介绍设备相关的部分,包括计算机硬件信息、声音播放控制、键盘属性及操作、全局键盘按键钩子、鼠标属性及操作、鼠标按键钩子等。分享了WAV声音格式文件播放辅助类AudioHelper、声音文件播放操作辅助类SoundPlayerHelper、提供用户硬件唯一信息的辅助类FingerprintHelper、获取系统信息的辅助类HardwareInfoHelper、键盘操作辅助类KeyboardHelper、全局键盘钩子类KeyboardHook、鼠标辅助操作类MouseHelper和全局的鼠标钩子操作类MouseHook。通过这些类库,可以高效地进行系统开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。

本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公用类库的接口方法以及详细使用操作,力求给自己继续优化,积攒更丰富的公用类库资源,加深了解的同时,也给大家展现公用类库好的方面。

本篇的公用类库的介绍主题是设备相关的部分,包括计算机硬件信息(如系统信息、电脑CPU、磁盘、网卡、内存等)、声音播放控制、 键盘属性及操作、全局键盘按键钩子、鼠标属性及操作、鼠标按键钩子等类库信息。如果你对前面的类库介绍文章有兴趣,可以参考下面的连接了解。

厚积薄发,丰富的公用类库积累,助你高效进行系统开发(6)

厚积薄发,丰富的公用类库积累,助你高效进行系统开发(5)

1、WAV声音格式文件播放辅助类AudioHelper

实现效果

1)本辅助类主要是用来方便实现播放WAV声音格式文件的操作。

2)声音播放可以用在特定事件的触发上,如来电、收到消息等,经典的就如QQ收到信息,咳嗽的声音,使用声音播放可以提高更好的用户体验。

实现代码

1)辅助类提供的方法接口如下所示:

///<summary>

/// 播放.wav格式的声音文件
/// </summary>
/// <paramname="location"> 声音文件路径 </param>
public static voidPlay( stringlocation)

/// <summary>
/// 播放.wav格式的声音文件
/// </summary>
/// <paramname="playMode"> 播放声音的枚举模式。默认为AudioPlayMode.Background。 </param>
/// <paramname="location"> 声音文件路径 </param>
public static voidPlay( stringlocation,AudioPlayModeplayMode)

/// <summary>
/// 播放.wav格式的声音文件
/// </summary>
/// <paramname="stream"><seecref="T:System.IO.Stream"></see> 声音文件的流对象 </param>
/// <paramname="playMode"> 播放声音的枚举模式。默认为AudioPlayMode.Background。 </param>
public static voidPlay(Streamstream,AudioPlayModeplayMode)

/// <summary>
/// 播放.wav格式的声音文件
/// </summary>
/// <paramname="data"> 声音文件的字节数组 </param>
/// <paramname="playMode"> 播放声音的枚举模式。默认为AudioPlayMode.Background。 </param>
public static voidPlay( byte[]data,AudioPlayModeplayMode)

/// <summary>
/// 播放系统声音
/// </summary>
public static voidPlaySystemSound(SystemSoundsystemSound)

/// <summary>
/// 停止正在后台播放的声音
/// </summary>
public static voidStop()

2)辅助类AudioHelper的使用例子代码如下所示

private voidbtnPlaySound_Click( objectsender,EventArgse)
{
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>
public static voidPlay( stringsoundFileName, boolRepeat)

/// <summary>
/// 播放声音嵌入资源字节数组
/// </summary>
/// <paramname="soundEmbeddedResource"> 声音文件嵌入资源字节数组(可以是MP3、WAV、Midi等声音格式) </param>
/// <paramname="Repeat"> 是否重复播放 </param>
public static voidPlay( byte[]soundEmbeddedResource, boolRepeat)

/// <summary>
/// 暂停播放
/// </summary>
public static voidPause()

/// <summary>
/// 停止播放
/// </summary>
public static voidStop()

/// <summary>
/// 清除操作
/// </summary>
public static voidDispose()

/// <summary>
/// 获取或设置音量的百分比
/// </summary>
/// <returns></returns>
public static floatVolumePercent


/// <summary>
/// 获取音量
/// </summary>
/// <returns></returns>
public static floatGetVolume()

/// <summary>
/// 设置音量
/// </summary>
/// <paramname="volume"></param>
public static voidSetVolume( floatvolume)

/// <SUMMARY>
/// 返回当前状态播放:播放,暂停,停止等
/// </SUMMARY>
public static stringStatus

2)辅助类SoundPlayerHelper的使用例子代码如下所示

boolisPlay= false;
private voidbtnPlayMp3_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;
}

private voidtrackBar1_Scroll( objectsender,EventArgse)
{
// 设置音量
floatvol=SoundPlayerHelper.VolumePercent;
SoundPlayerHelper.VolumePercent=trackBar1.Value;
}

3、提供用户硬件唯一信息的辅助类 FingerprintHelper

实现效果

1)本辅助类主要是用来方便实现获取用户硬件的相关信息,根据用户各种硬件(CPU、网卡、磁盘、主板等)标识信息,获取一个8位唯一标识数字。

2)本辅助类只提供了一个公共的方法Value,它集合了CPU、网卡、磁盘、主板等信息,通过这个8位的数字标识,我们可以唯一区分一台电脑,类似我们每个人的指纹信息一样,很少会发生重复的现象,可以用在一些关键的注册授权机制上。

实现代码

1)辅助类提供的方法接口如下所示:

/// <summary>
/// 根据用户各种硬件(CPU、网卡、磁盘、主板等)标识信息,
/// 获取一个8位唯一标识数字
/// </summary>
public static stringValue()

/// <summary>
/// 获取硬件的标识信息
/// </summary>
private static stringidentifier( stringwmiClass, stringwmiProperty, stringwmiMustBeTrue)

/// <summary>
/// 获取硬件的标识信息
/// </summary>
private static stringidentifier( stringwmiClass, stringwmiProperty)

/// <summary>
/// 获取CPU信息
/// </summary>
private static stringcpuId()

/// <summary>
/// 获取BOIS主板标识信息
/// </summary>
private static stringbiosId()

/// <summary>
/// 获取主硬盘的标识信息
/// </summary>
/// <returns></returns>
private static stringdiskId()

/// <summary>
/// 获取主板的标识信息
/// </summary>
/// <returns></returns>
private static stringbaseId()

/// <summary>
/// 获取主视频控制器标识信息
/// </summary>
/// <returns></returns>
private static stringvideoId()

/// <summary>
/// 获取第一个可用网卡信息
/// </summary>
/// <returns></returns>
private static stringmacId()

/// <summary>
/// 转换内容为8位数字
/// </summary>
private static stringpack( stringtext)


2)
辅助类
FingerprintHelper的使用例子代码如下所示
stringidentity=FingerprintHelper.Value();
MessageUtil.ShowTips(identity);

4、获取系统信息、电脑CPU、磁盘、网卡、内存等相关信息辅助类 HardwareInfoHelper

实现效果

1)本辅助类主要是用来方便获取系统信息、电脑CPU、磁盘、网卡、内存等相关信息。

实现代码

1)辅助类提供的方法接口如下所示:

///<summary>

/// 获得盘符为drvID的硬盘序列号,缺省为C
/// </summary>
/// <paramname="drvID"> 盘符,如"C" </param>
/// <returns></returns>
public static stringHDVal( stringdrvID)

/// <summary>
/// 获取默认C盘的磁盘序列号
/// </summary>
/// <returns></returns>
public static stringHDVal()

/// <summary>
/// 获取硬盘ID
/// </summary>
/// <returns></returns>
public static stringGetDiskID()

/// <summary>
/// 获取硬盘Model的信息
/// </summary>
public static stringGetDiskModel()

/// <summary>
/// 获得Cpu使用率
/// </summary>
public static intGetCpuUsage()

/// <summary>
/// 获取CPU的ID
/// </summary>
/// <returns></returns>
public static stringGetCPUId()

/// <summary>
/// 获取CPU的名称
/// </summary>
/// <returns></returns>
public static stringGetCPUName()

/// <summary>
/// 返回USB盘符列表
/// </summary>
public staticList< string>GetUSBDriveLetters()

/// <summary>
/// 获得硬盘信息
/// </summary>
public staticHardDiskInfoGetHDInfo( bytedriveIndex)


#region其他数据

/// <summary>
/// 获取MAC地址
/// </summary>
/// <returns></returns>
public static stringGetMacAddress()

/// <summary>
/// 获取IP地址
/// </summary>
public static stringGetIPAddress()

/// <summary>
/// 获取操作系统的登录用户名
/// </summary>
public static stringGetUserName()

/// <summary>
/// 获取计算机名
/// </summary>
public static stringGetComputerName()

/// <summary>
/// 获取PC类型
/// </summary>
public static stringGetSystemType()

/// <summary>
/// 获取物理内存
/// </summary>
public static stringGetTotalPhysicalMemory()

#endregion

2)辅助类HardwareInfoHelper的使用例子代码如下所示

private voidbtnComputer_Click( objectsender,EventArgse)
{
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)辅助类提供的方法接口如下所示:

#region键盘属性

/// <summary>
/// 判断ALT建是否按下
/// </summary>
public static boolAltKeyDown


/// <summary>
/// 判断CapsLock大写键是否打开
/// </summary>
public static boolCapsLock

/// <summary>
/// 判断CTRL键是否按下
/// </summary>
public static boolCtrlKeyDown

/// <summary>
/// 判断NumLock数字键是否打开
/// </summary>
public static boolNumLock

/// <summary>
/// 判断ScrollLock滚动锁定键是否打开
/// </summary>
public static boolScrollLock

/// <summary>
/// 判断Shift键是否按下
/// </summary>
public static boolShiftKeyDown


#endregion

#region操作方法

/// <summary>
/// 发送一个或多个击键到活动窗口。
/// </summary>
/// <paramname="keys"> 定义发送键的字符串。特殊控制键代码SHIFT(+),CTRL(^),ALT(%)。Send("{SPACE}")、Send("+{TAB}") </param>
public static voidSendKeys( stringkeys)

/// <summary>
/// 发送一个或多个击键到活动窗口
/// </summary>
/// <paramname="keys"> 定义发送键的字符串.特殊控制键代码SHIFT(+),CTRL(^),ALT(%)。Send("{SPACE}")、Send("+{TAB}") </param>
/// <paramname="wait"> 指定是否要等待应用程序继续之前得到处理的击键。默认为True。
/// </param>
public static voidSendKeys( stringkeys, boolwait)

#endregion

2)辅助类

KeyboardHelper的使用例子代码如下所示
boolcapsLock=KeyboardHelper.CapsLock;
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>

/// 判断是否CTRL键按下
/// </summary>
public static boolControl= false;

/// <summary>
/// 判断Shift键是否按下
/// </summary>
public static boolShift= false;

/// <summary>
/// 检查Alt键是否按下
/// </summary>
public static boolAlt= false;

/// <summary>
/// 检查Windows键是否按下
/// </summary>
public static boolWin= false;

/// <summary>
/// 键盘敲击事件代理定义
/// </summary>
public delegate boolKeyPressed();

/// <summary>
/// 处理键盘按下委托函数
/// </summary>
/// <paramname="key">
/// 按下的键。需检查CTRL、Shift、Win等键。
/// <returns>
/// 如果想应用程序能捕捉到,设置为True;如果设置为False,则键盘事件被屏蔽。
/// </returns>
public delegate boolKeyboardHookHandler(Keyskey);

/// <summary>
/// 添加一个键盘钩子处理给当前的键
/// </summary>
public staticKeyboardHookHandlerKeyDown;

/// <summary>
/// 启动键盘钩子处理
/// </summary>
/// <returns> 如无异常返回True </returns>
public static boolEnable()

/// <summary>
/// 禁用键盘钩子处理
/// </summary>
/// <returns> 如果禁用成功,则返回True </returns>
public static boolDisable()

/// <summary>
/// 添加一个按下键的钩子处理
/// </summary>
/// <paramname="key"> 按下的键 </param>
/// <paramname="callback"> 按键的处理事件函数 </param>
public static boolAddKeyDown(Keyskey,KeyPressedcallback)

/// <summary>
/// 添加一个键弹起的钩子处理
/// </summary>
/// <paramname="key"> 弹起的键 </param>
/// <paramname="callback"> 按键的处理事件函数 </param>
public static boolAddKeyUp(Keyskey,KeyPressedcallback)

/// <summary>
/// 添加一个按下键的钩子处理
/// </summary>
/// <paramname="key"> 按下的键 </param>
/// <paramname="callback"> 按键的处理事件函数 </param>
public static boolAdd(Keyskey,KeyPressedcallback)

/// <summary>
/// 移除一个按下键的钩子处理
/// </summary>
/// <paramname="key"> 移除的按键 </param>
public static boolRemoveDown(Keyskey)

/// <summary>
/// 移除一个弹起键的钩子处理
/// </summary>
/// <paramname="key"> 移除的按键 </param>
public static boolRemoveUp(Keyskey)

/// <summary>
/// 移除一个键的钩子处理
/// </summary>
/// <paramname="key"> 移除的按键 </param>
public static boolRemove(Keyskey)

/// <summary>
/// 返回一个给定的键基于当前的控制键的字符串表示形式。
/// </summary>
/// <paramname="key"> 当前的键 </param>
/// <returns></returns>
public static stringKeyToString(Keyskey)
2)
辅助类
KeyboardHook的使用例子代码如下所示
private voidbtnKeyboadHook_Click( objectsender,EventArgse)
{
KeyboardHook.Enable();
KeyboardHook.Add(Keys.S, newKeyboardHook.KeyPressed(TestKeyboadHook));
}

private boolTestKeyboadHook()
{
// 仅处理Alt+S的钩子事件
if(KeyboardHook.Alt)
{
this.Text=DateTime.Now.ToString();
NativeMethods.BringToFront( this.Handle);
}
return true; // 如果要被其他程序捕捉,返回True,否则返回False。
}

private voidbtnRemoveKeyboadHook_Click( objectsender,EventArgse)
{
KeyboardHook.Remove(Keys.S);
}

7、鼠标辅助操作类,提供获取鼠标状态以及模拟鼠标点击等操作 MouseHelper

实现效果

1)本辅助类主要是用来方便获取鼠标状态以及模拟鼠标点击等操作,通过该辅助类,可以获取鼠标是否安装、滚轮是否支持、或者模拟鼠标移动、单击、双击等操作。

实现代码

1)辅助类提供的方法接口如下所示:

#region鼠标相关属性


/// <summary>
/// 检查鼠标是否已经安装.
/// </summary>
public static boolMousePresent

/// <summary>
/// 检查鼠标是否存在滚轮
/// </summary>
public static boolWheelExists

/// <summary>
/// 获取鼠标滚轮每次滚动的行数
/// </summary>
public static intWheelScrollLines

#endregion

#region鼠标操作函数

/// <summary>
/// 连续两次鼠标单击之间会被处理成双击事件的间隔时间。
/// </summary>
/// <returns> 以毫秒表示的双击时间 </returns>
[DllImport( " user32.dll ",EntryPoint= " GetDoubleClickTime ")]
public static extern intGetDoubleClickTime();

/// <summary>
/// 检取光标的位置,以屏幕坐标表示。
/// </summary>
/// <paramname="lpPoint"> POINT结构指针,该结构接收光标的屏幕坐标。 </param>
/// <returns> 如果成功,返回值非零;如果失败,返回值为零。 </returns>
[DllImport( " user32.dll ",EntryPoint= " GetCursorPos ")]
public static extern intGetCursorPos(PointlpPoint);

/// <summary>
/// 把光标移到屏幕的指定位置。如果新位置不在由ClipCursor函数设置的屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。
/// </summary>
/// <paramname="x"> 指定光标的新的X坐标,以屏幕坐标表示。 </param>
/// <paramname="y"> 指定光标的新的Y坐标,以屏幕坐标表示。 </param>
/// <returns> 如果成功,返回非零值;如果失败,返回值是零 </returns>
[DllImport( " user32.dll ")]
public static extern intSetCursorPos( intx, inty);

#endregion

#region封装函数

/// <summary>
/// 在当前鼠标的位置左键点击一下
/// </summary>
public static voidMouseClick()

/// <summary>
/// 移动到坐标位置点击
/// </summary>
/// <paramname="location"> 要点击的坐标位置,屏幕绝对值 </param>
public static voidMouseClick(Pointlocation)

/// <summary>
/// 移动到坐标位置点击
/// </summary>
/// <paramname="location"> 要点击的坐标位置,屏幕绝对值 </param>
public static voidMouseRightClick(Pointlocation)

/// <summary>
/// 移动到坐标位置
/// </summary>
public static voidMouseMove(Pointlocation)

#endregion

2)
辅助类
MouseHelper的使用例子代码如下所示

操作比较简单,自己操作下即可。

8、全局的鼠标钩子操作类,用作捕捉全局的鼠标输入操作的辅助类 MouseHook

实现效果

1)本辅助类主要是用来方便实现全局的鼠标钩子,用作捕捉全局的鼠标输入操作。

实现代码

1)辅助类提供的方法接口如下所示:

/// <summary>
/// 鼠标输入处理代理
/// </summary>
/// <paramname="button"> 操作的鼠标键 </param>
/// <returns> 如果想应用程序能捕捉到,设置为True;如果设置为False,则鼠标事件被屏蔽。 </returns>
public delegate boolMouseButtonHandler(MouseButtonsbutton);

/// <summary>
/// 鼠标按键按下处理操作
/// </summary>
public staticMouseButtonHandlerButtonDown;

/// <summary>
/// 鼠标按键弹起处理操作
/// </summary>
public staticMouseButtonHandlerButtonUp;

/// <summary>
/// 鼠标移动处理操作
/// </summary>
public staticMouseMoveHandlerMoved;

/// <summary>
/// 鼠标滚动处理操作
/// </summary>
public staticMouseScrollHandlerScrolled;

/// <summary>
/// 启动鼠标钩子处理
/// </summary>
/// <returns> 如无异常则返回True </returns>
public static boolEnable()

/// <summary>
/// 禁用鼠标钩子操作
/// </summary>
/// <returns> 禁用成功则返回True </returns>
publicstaticboolDisable()

2)辅助类

MouseHook的使用例子代码如下所示

private voidbtnMouseHook_Click( objectsender,EventArgse)
{
MouseHook.ButtonDown= newMouseHook.MouseButtonHandler(TestMouseHook);
MouseHook.Scrolled= newMouseHook.MouseScrollHandler(TestMouseScroll);
MouseHook.Enable();
}

private boolTestMouseHook(MouseButtonssender)
{
this.Text= string.Format( " 你单击了鼠标键:{0} ",sender);
return true;
}

private boolTestMouseScroll( intdelta)
{
this.Text= string.Format( " 你滚动了鼠标值:{0} ",delta);
return true;

}

整理文档本身也对类库进行进一步的优化,整理过程本身也是一次马拉松式的身心赛跑。

主要研究技术:代码生成工具、Visio二次开发、送水管理软件等共享软件开发

转载请注明出处:
撰写人:伍华聪http:
//www.iqidi.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值