通过winform实现电脑音量控制
2014-04-07 10:59
211 查看
先上图
效果图:
代码框架图:
代码实现大致分为两部分:
1.core audio API实现系统音量的大小控制与静音,由于是封装好的函数,操作起来十分简单。
2.全局钩子。因为要实现监听按键,仅适用线程钩子监听某一个线程是不够的。该部分有难度。
写了四个类:基类hook,子类PublicHook(全局钩子)和PrivateHook(私有钩子),以及调取委托的KeyboardHookStruct(其实我也不太懂(╯﹏╰))
基类hook:
两个子类仅有构造函数继承父类,和重写SetWindowsHookEx:
PrivateHook: hHook = SetWindowsHookEx(this.type, this.proc, IntPtr.Zero, GetCurrentThreadId());
PublicHook: hHook = SetWindowsHookEx(this.type, this.proc,GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
键盘委托类含有以下几个属性:
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
遇到的问题:1.全局钩子的处理事件中使用messagebox会产生很高的系统延迟,5秒左右。
2.键盘钩子每次响应Key_Down和Key_Up事件,会执行两次处理事件操作,通过判断处理事件的参数可以进行筛选。
效果图:
代码框架图:
代码实现大致分为两部分:
1.core audio API实现系统音量的大小控制与静音,由于是封装好的函数,操作起来十分简单。
2.全局钩子。因为要实现监听按键,仅适用线程钩子监听某一个线程是不够的。该部分有难度。
写了四个类:基类hook,子类PublicHook(全局钩子)和PrivateHook(私有钩子),以及调取委托的KeyboardHookStruct(其实我也不太懂(╯﹏╰))
基类hook:
两个子类仅有构造函数继承父类,和重写SetWindowsHookEx:
PrivateHook: hHook = SetWindowsHookEx(this.type, this.proc, IntPtr.Zero, GetCurrentThreadId());
PublicHook: hHook = SetWindowsHookEx(this.type, this.proc,GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
键盘委托类含有以下几个属性:
public int vkCode;
public int scanCode;
public int flags;
public int time;
public int dwExtraInfo;
遇到的问题:1.全局钩子的处理事件中使用messagebox会产生很高的系统延迟,5秒左右。
2.键盘钩子每次响应Key_Down和Key_Up事件,会执行两次处理事件操作,通过判断处理事件的参数可以进行筛选。
相关文章推荐
- 在Tomcat中通过LDAP实现用域用户进行权限控制
- 内网服务应用—无需端口映射实现从外网访问控制内网电脑
- ubuntu上搭建svn服务器,实现版本控制和多台电脑文件互传
- jQuery通过控制节点实现仅在前台通过get方法完成参数传递
- php通过会话控制实现身份验证实例
- 音乐播放器之(音量控制的实现)
- WinForm中DataGridView控件通过复选框实现多条记录的删除 c#2005
- C#控制音量、实现摄像头(荐)
- 通过CSS控制图片样式,实现图片弹出效果
- asp.net中通过DropDownList的值去控制TextBox是否可编写的实现代码
- 电脑通过vnc控制android 手机
- 通过linux的tc工具简单实现上传和下载的流量控制
- 使用js函数实现的通过输入框中数据的长度来控制光标聚焦位置
- win7系统如何通过语音识别功能控制电脑
- CI框架中通过hook的方式实现简单的权限控制
- 安卓手机通过用Splashtop控制电脑
- 通过 API 实现 C# 对硬件的控制(二)
- Android工具之实现上下滑动屏幕控制音量,同时绑定物理键
- 一个嵌入式web服务器项目,实现通过手机Android App实现对嵌入式设备的控制
- winform下调用SharpSSH库实现对远程linux主机的控制