通过winform实现电脑音量控制

先上图

效果图:

代码框架图:


代码实现大致分为两部分:

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事件,会执行两次处理事件操作,通过判断处理事件的参数可以进行筛选。

猜你喜欢

转载自blog.csdn.net/u013212391/article/details/23089783