通過winform實現電腦音量控制
阿新 • • 發佈:2018-11-06
先上圖
效果圖:
程式碼框架圖:
程式碼實現大致分為兩部分:
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事件,會執行兩次處理事件操作,通過判斷處理事件的引數可以進行篩選。