1. 程式人生 > >通過winform實現電腦音量控制

通過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事件,會執行兩次處理事件操作,通過判斷處理事件的引數可以進行篩選。