您的位置:首页 > 其它

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

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

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

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

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

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

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

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

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

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



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


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

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声音文件外,还可以播放W***格式、midi格式声音文件。

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


实现代码
1)辅助类提供的方法接口如下所示:
/// <summary>


/// 播放声音文件

/// </summary>

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

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

public static void Play(string soundFileName,bool Repeat)



/// <summary>

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

/// </summary>

/// <param name="soundEmbeddedResource">声音文件嵌入资源字节数组(可以是MP3、W***、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); //播放W***格式文件

//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;

}



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


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



转载请注明出处:


撰写人:伍华聪 http://www.iqidi.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐