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

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

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

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

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




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

实现效果

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

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

实现代码

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

///

<summary>

///
播放 .wav 格式的声音文件

///

</summary>


///

<param name="location">
声音文件路径
</param>



public
static
void
Play(
string
location)

///

<summary>


///
播放 .wav 格式的声音文件

///

</summary>


///

<param name="playMode">
播放声音的枚举模式。默认为AudioPlayMode.Background。
</param>


///

<param name="location">
声音文件路径
</param>



public
static
void
Play(
string
location, AudioPlayMode playMode)

///

<summary>


///
播放 .wav 格式的声音文件

///

</summary>


///

<param name="stream"><see cref="T:System.IO.Stream"></see>
声音文件的流对象
</param>


///

<param name="playMode">
播放声音的枚举模式。默认为AudioPlayMode.Background。
</param>



public
static
void
Play(Stream stream, AudioPlayMode playMode)

///

<summary>


///
播放 .wav 格式的声音文件

///

</summary>


///

<param name="data">
声音文件的字节数组
</param>


///

<param name="playMode">
播放声音的枚举模式。默认为AudioPlayMode.Background。
</param>



public
static
void
Play(
byte
[] data, AudioPlayMode playMode)

///

<summary>


///
播放系统声音

///

</summary>



public
static
void
PlaySystemSound(SystemSound systemSound)

///

<summary>


///
停止正在后台播放的声音

///

</summary>



public
static
void
Stop()

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

private
void
btnPlaySound_Click(
object
sender, EventArgs e)
{
try
{
AppConfig config =
new
AppConfig();
string
SoundFilePath = config.AppConfigGet(
"
SoundFilePath
"
);
AudioHelper.Play(SoundFilePath);
//
AudioHelper.Play("ringin.wav");


}
catch
(Exception ex)
{
LogHelper.Error(
"
没找到声音文件
"
, ex);
}
}

2、声音文件播放操作辅助类SoundPlayerHelper。除了MP3声音文件外,还可以播放WAV格式、midi格式声音文件。

实现效果

1)本辅助类主要是用来方便实现MP3文件、WAV文件、Midi文件等声音的播放操作,并提供音量控制操作功能。

实现代码

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

///

<summary>

///
播放声音文件

///

</summary>


///

<param name="soundFileName">
声音文件路径(可以是MP3、WAV、Midi等声音文件)
</param>


///

<param name="Repeat">
是否重复播放
</param>



public
static
void
Play(
string
soundFileName,
bool
Repeat)

///

<summary>


///
播放声音嵌入资源字节数组

///

</summary>


///

<param name="soundEmbeddedResource">
声音文件嵌入资源字节数组(可以是MP3、WAV、Midi等声音格式)
</param>


///

<param name="Repeat">
是否重复播放
</param>



public
static
void
Play(
byte
[] soundEmbeddedResource,
bool
Repeat)

///

<summary>


///
暂停播放

///

</summary>



public
static
void
Pause()

///

<summary>


///
停止播放

///

</summary>



public
static
void
Stop()

///

<summary>


///
清除操作

///

</summary>



public
static
void
Dispose()

///

<summary>


///
获取或设置音量的百分比

///

</summary>


///

<returns></returns>



public
static
float
VolumePercent


///

<summary>


///
获取音量

///

</summary>


///

<returns></returns>



public
static
float
GetVolume()

///

<summary>


///
设置音量

///

</summary>


///

<param name="volume"></param>



public
static
void
SetVolume(
float
volume)

///

<SUMMARY>


///
返回当前状态播放:播放,暂停,停止等

///

</SUMMARY>



public
static
string
Status

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

bool
isPlay =
false
;
private
void
btnPlayMp3_Click(
object
sender, EventArgs e)
{
if
(!isPlay)
{
string
mp3File = Path.Combine(Application.StartupPath,
"
伤不起.mp3
"
);
string
waveFile = Path.Combine(Application.StartupPath,
"
ringin.wav
"
);
string
midFile =
@"
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 =
"
播放声音
"
;
}

string
statu = SoundPlayerHelper.Status;
this
.Text = statu;
isPlay = !isPlay;
}

private
void
trackBar1_Scroll(
object
sender, EventArgs e)
{
//
设置音量


float
vol = SoundPlayerHelper.VolumePercent;
SoundPlayerHelper.VolumePercent = trackBar1.Value;
}

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

实现效果

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

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

实现代码

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

///

<summary>


///
根据用户各种硬件(CPU、网卡、磁盘、主板等)标识信息,

///
获取一个8位唯一标识数字

///

</summary>



public
static
string
Value()

///

<summary>


///
获取硬件的标识信息

///

</summary>



private
static
string
identifier(
string
wmiClass,
string
wmiProperty,
string
wmiMustBeTrue)

///

<summary>


///
获取硬件的标识信息

///

</summary>



private
static
string
identifier(
string
wmiClass,
string
wmiProperty)

///

<summary>


///
获取CPU信息

///

</summary>



private
static
string
cpuId()

///

<summary>


///
获取BOIS主板标识信息

///

</summary>



private
static
string
biosId()

///

<summary>


///
获取主硬盘的标识信息

///

</summary>


///

<returns></returns>



private
static
string
diskId()

///

<summary>


///
获取主板的标识信息

///

</summary>


///

<returns></returns>



private
static
string
baseId()

///

<summary>


///
获取主视频控制器标识信息

///

</summary>


///

<returns></returns>



private
static
string
videoId()

///

<summary>


///
获取第一个可用网卡信息

///

</summary>


///

<returns></returns>



private
static
string
macId()

///

<summary>


///
转换内容为8位数字

///

</summary>


private
static
string
pack(
string
text)


2)

辅助类

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

string
identity = FingerprintHelper.Value();

MessageUtil.ShowTips(identity);

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

实现效果

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

实现代码

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

///

<summary>

///
获得盘符为drvID的硬盘序列号,缺省为C

///

</summary>


///

<param name="drvID">
盘符,如"C"
</param>


///

<returns></returns>



public
static
string
HDVal(
string
drvID)

///

<summary>


///
获取默认C盘的磁盘序列号

///

</summary>


///

<returns></returns>



public
static
string
HDVal()

///

<summary>


///
获取硬盘ID

///

</summary>


///

<returns></returns>



public
static
string
GetDiskID()

///

<summary>


///
获取硬盘Model的信息

///

</summary>



public
static
string
GetDiskModel()

///

<summary>


///
获得Cpu使用率

///

</summary>



public
static
int
GetCpuUsage()

///

<summary>


///
获取CPU的ID

///

</summary>


///

<returns></returns>



public
static
string
GetCPUId()

///

<summary>


///
获取CPU的名称

///

</summary>


///

<returns></returns>



public
static
string
GetCPUName()

///

<summary>


///
返回USB盘符列表

///

</summary>



public
static
List<
string
> GetUSBDriveLetters()

///

<summary>


///
获得硬盘信息

///

</summary>



public
static
HardDiskInfo GetHDInfo(
byte
driveIndex)


#region
其他数据

///

<summary>


///
获取MAC地址

///

</summary>


///

<returns></returns>



public
static
string
GetMacAddress()

///

<summary>


///
获取IP地址

///

</summary>



public
static
string
GetIPAddress()

///

<summary>


///
获取操作系统的登录用户名

///

</summary>



public
static
string
GetUserName()

///

<summary>


///
获取计算机名

///

</summary>



public
static
string
GetComputerName()

///

<summary>


///
获取PC类型

///

</summary>



public
static
string
GetSystemType()

///

<summary>


///
获取物理内存

///

</summary>



public
static
string
GetTotalPhysicalMemory()

#endregion

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

private
void
btnComputer_Click(
object
sender, EventArgs e)
{
string
computerName = HardwareInfoHelper.GetComputerName();
string
userName = HardwareInfoHelper.GetUserName();
string
systemType = HardwareInfoHelper.GetSystemType();
string
cpuid = HardwareInfoHelper.GetCPUId();
string
cpuName = HardwareInfoHelper.GetCPUName();
int
cpuUsage = HardwareInfoHelper.GetCpuUsage();
string
diskId = HardwareInfoHelper.GetDiskID();
string
ip = HardwareInfoHelper.GetIPAddress();
string
macAddress = HardwareInfoHelper.GetMacAddress();
string
memery = HardwareInfoHelper.GetTotalPhysicalMemory();

StringBuilder sb =
new
StringBuilder();
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(
"
CPU ID:\t {0} \r\n
"
, cpuid);
sb.AppendFormat(
"
CPU Name:\t {0} \r\n
"
, cpuName);
sb.AppendFormat(
"
CPU Usage:\t {0} \r\n
"
, cpuUsage);
sb.AppendFormat(
"
Disk Id:\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());

string
identity = FingerprintHelper.Value();
MessageUtil.ShowTips(identity);

}

5、键盘操作辅助类KeyboardHelper,提供属性访问敲击那个键,以及发送软键盘消息等操作。

实现效果

1)本辅助类主要是用来方便实现访问键盘的大写键、数字键等键的开启情况,另外判断CTRL、Shift、Alt键是否按下的操作,辅助类也封装了发送软键盘消息等操作。

实现代码

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

#region
键盘属性

///

<summary>


///
判断ALT建是否按下

///

</summary>



public
static
bool
AltKeyDown


///

<summary>


///
判断Caps Lock大写键是否打开

///

</summary>



public
static
bool
CapsLock

///

<summary>


///
判断CTRL键是否按下

///

</summary>



public
static
bool
CtrlKeyDown

///

<summary>


///
判断Num Lock 数字键是否打开

///

</summary>



public
static
bool
NumLock

///

<summary>


///
判断Scroll Lock滚动锁定键是否打开

///

</summary>



public
static
bool
ScrollLock

///

<summary>


///
判断Shift键是否按下

///

</summary>



public
static
bool
ShiftKeyDown


#endregion

#region
操作方法

///

<summary>


///
发送一个或多个击键到活动窗口。

///

</summary>


///

<param name="keys">
定义发送键的字符串。特殊控制键代码SHIFT(+),CTRL(^), ALT(%)。Send("{SPACE}")、Send("+{TAB}")
</param>



public
static
void
SendKeys(
string
keys)

///

<summary>


///
发送一个或多个击键到活动窗口

///

</summary>


///

<param name="keys">
定义发送键的字符串.特殊控制键代码SHIFT(+),CTRL(^), ALT(%)。Send("{SPACE}")、Send("+{TAB}")
</param>


///

<param name="wait">
指定是否要等待应用程序继续之前得到处理的击键。默认为True。

///

</param>



public
static
void
SendKeys(
string
keys,
bool
wait)

#endregion

2)辅助类

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

bool
capsLock = KeyboardHelper.CapsLock;
bool
numLock = KeyboardHelper.NumLock;
bool
scrollLock = 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
bool
Control =
false
;

///

<summary>


///
判断Shift键是否按下

///

</summary>



public
static
bool
Shift =
false
;

///

<summary>


///
检查Alt键是否按下

///

</summary>



public
static
bool
Alt =
false
;

///

<summary>


///
检查Windows键是否按下

///

</summary>



public
static
bool
Win =
false
;

///

<summary>


///
键盘敲击事件代理定义

///

</summary>



public
delegate
bool
KeyPressed();

///

<summary>


///
处理键盘按下委托函数

///

</summary>


///

<param name="key">


///
按下的键。需检查CTRL、Shift、Win等键。

///

<returns>


///
如果想应用程序能捕捉到,设置为True;如果设置为False,则键盘事件被屏蔽。

///

</returns>



public
delegate
bool
KeyboardHookHandler(Keys key);

///

<summary>


///
添加一个键盘钩子处理给当前的键

///

</summary>



public
static
KeyboardHookHandler KeyDown;

///

<summary>


///
启动键盘钩子处理

///

</summary>


///

<returns>
如无异常返回True
</returns>



public
static
bool
Enable()

///

<summary>


///
禁用键盘钩子处理

///

</summary>


///

<returns>
如果禁用成功,则返回True
</returns>



public
static
bool
Disable()

///

<summary>


///
添加一个按下键的钩子处理

///

</summary>


///

<param name="key">
按下的键
</param>


///

<param name="callback">
按键的处理事件函数
</param>



public
static
bool
AddKeyDown(Keys key, KeyPressed callback)

///

<summary>


///
添加一个键弹起的钩子处理

///

</summary>


///

<param name="key">
弹起的键
</param>


///

<param name="callback">
按键的处理事件函数
</param>



public
static
bool
AddKeyUp(Keys key, KeyPressed callback)

///

<summary>


///
添加一个按下键的钩子处理

///

</summary>


///

<param name="key">
按下的键
</param>


///

<param name="callback">
按键的处理事件函数
</param>



public
static
bool
Add(Keys key, KeyPressed callback)

///

<summary>


///
移除一个按下键的钩子处理

///

</summary>


///

<param name="key">
移除的按键
</param>



public
static
bool
RemoveDown(Keys key)

///

<summary>


///
移除一个弹起键的钩子处理

///

</summary>


///

<param name="key">
移除的按键
</param>



public
static
bool
RemoveUp(Keys key)

///

<summary>


///
移除一个键的钩子处理

///

</summary>


///

<param name="key">
移除的按键
</param>



public
static
bool
Remove(Keys key)

///

<summary>


///
返回一个给定的键基于当前的控制键的字符串表示形式。

///

</summary>


///

<param name="key">
当前的键
</param>


///

<returns></returns>



public
static
string
KeyToString(Keys key)

2)

辅助类

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

private
void
btnKeyboadHook_Click(
object
sender, EventArgs e)
{
KeyboardHook.Enable();
KeyboardHook.Add(Keys.S,
new
KeyboardHook.KeyPressed(TestKeyboadHook));
}

private
bool
TestKeyboadHook()
{
//
仅处理Alt + S 的钩子事件


if
(KeyboardHook.Alt)
{
this
.Text = DateTime.Now.ToString();
NativeMethods.BringToFront(
this
.Handle);
}
return
true
;
//
如果要被其他程序捕捉,返回True,否则返回False。


}

private
void
btnRemoveKeyboadHook_Click(
object
sender, EventArgs e)
{
KeyboardHook.Remove(Keys.S);
}

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

实现效果

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

实现代码

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

#region
鼠标相关属性


///

<summary>


///
检查鼠标是否已经安装.

///

</summary>



public
static
bool
MousePresent

///

<summary>


///
检查鼠标是否存在滚轮

///

</summary>



public
static
bool
WheelExists

///

<summary>


///
获取鼠标滚轮每次滚动的行数

///

</summary>



public
static
int
WheelScrollLines

#endregion

#region
鼠标操作函数

///

<summary>


///
连续两次鼠标单击之间会被处理成双击事件的间隔时间。

///

</summary>


///

<returns>
以毫秒表示的双击时间
</returns>



[DllImport(
"
user32.dll
"
, EntryPoint =
"
GetDoubleClickTime
"
)]
public
static
extern
int
GetDoubleClickTime();

///

<summary>


///
检取光标的位置,以屏幕坐标表示。

///

</summary>


///

<param name="lpPoint">
POINT结构指针,该结构接收光标的屏幕坐标。
</param>


///

<returns>
如果成功,返回值非零;如果失败,返回值为零。
</returns>



[DllImport(
"
user32.dll
"
, EntryPoint =
"
GetCursorPos
"
)]
public
static
extern
int
GetCursorPos(Point lpPoint);

///

<summary>


///
把光标移到屏幕的指定位置。如果新位置不在由 ClipCursor函数设置的屏幕矩形区域之内,则系统自动调整坐标,使得光标在矩形之内。

///

</summary>


///

<param name="x">
指定光标的新的X坐标,以屏幕坐标表示。
</param>


///

<param name="y">
指定光标的新的Y坐标,以屏幕坐标表示。
</param>


///

<returns>
如果成功,返回非零值;如果失败,返回值是零
</returns>



[DllImport(
"
user32.dll
"
)]
public
static
extern
int
SetCursorPos(
int
x,
int
y);

#endregion

#region
封装函数

///

<summary>


///
在当前鼠标的位置左键点击一下

///

</summary>



public
static
void
MouseClick()

///

<summary>


///
移动到坐标位置点击

///

</summary>


///

<param name="location">
要点击的坐标位置,屏幕绝对值
</param>



public
static
void
MouseClick(Point location)

///

<summary>


///
移动到坐标位置点击

///

</summary>


///

<param name="location">
要点击的坐标位置,屏幕绝对值
</param>



public
static
void
MouseRightClick(Point location)

///

<summary>


///
移动到坐标位置

///

</summary>



public
static
void
MouseMove(Point location)

#endregion

2)

辅助类

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

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

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

实现效果

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

实现代码

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

///

<summary>


///
鼠标输入处理代理

///

</summary>


///

<param name="button">
操作的鼠标键
</param>


///

<returns>
如果想应用程序能捕捉到,设置为True;如果设置为False,则鼠标事件被屏蔽。
</returns>



public
delegate
bool
MouseButtonHandler(MouseButtons button);

///

<summary>


///
鼠标按键按下处理操作

///

</summary>



public
static
MouseButtonHandler ButtonDown;

///

<summary>


///
鼠标按键弹起处理操作

///

</summary>



public
static
MouseButtonHandler ButtonUp;

///

<summary>


///
鼠标移动处理操作

///

</summary>



public
static
MouseMoveHandler Moved;

///

<summary>


///
鼠标滚动处理操作

///

</summary>



public
static
MouseScrollHandler Scrolled;

///

<summary>


///
启动鼠标钩子处理

///

</summary>


///

<returns>
如无异常则返回True
</returns>



public
static
bool
Enable()

///

<summary>


///
禁用鼠标钩子操作

///

</summary>


///

<returns>
禁用成功则返回True
</returns>


public
static
bool
Disable()

2)辅助类

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

private
void
btnMouseHook_Click(
object
sender, EventArgs e)
{
MouseHook.ButtonDown =
new
MouseHook.MouseButtonHandler(TestMouseHook);
MouseHook.Scrolled =
new
MouseHook.MouseScrollHandler(TestMouseScroll);
MouseHook.Enable();
}

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

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

}

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

标签: none

添加新评论