用藍芽耳機播放鍵啟用PC小娜
阿新 • • 發佈:2018-12-30
如果我們想喚醒隔壁房間Win10 PC上的小娜,為我們播放一首喜歡的歌曲,(我喜歡的是《最初的信仰》)大聲呼叫“你好,小娜”,多少有些擾民,(當然如果你的麥克風夠靈敏、夠多,請關閉這個頁面。)因此我嘗試使用藍芽耳機播放鍵啟用小娜,下達語音指令,實現“遠距離”語音控制。
我很慶幸,網易雲音樂UWP版本的藍芽耳機控制音樂的播放/暫停/換歌,為我的嘗試提供了理論支撐。
一、基本過程
1、利用 RegisterWindowMessage 註冊自定義監聽訊息 SHELLHOOK。
2、利用 RegisterShellHookWindow 註冊監聽該自定義訊息的視窗。
3、在2中視窗的 WindowProc 函式中捕捉播放/暫停 按鍵,並激活小娜。
4、啟用小娜可以用 ShellExecute 執行小娜的快捷方式,再用keybd_event傳送按鍵;
也可以直接模擬 Win+Shift+C 組合鍵喚醒小娜(有些防毒軟體會遮蔽對WIN鍵的模擬)。
二、關鍵程式碼
//監聽並激活小娜
LRESULT CActiveCortanaDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { // TODO: Add your specialized code here and/or call the base class if(message == WM_SHELLHOOKMESSAGE)//WM_APPCOMMAND) { if(wParam==WM_APPCOMMAND){ switch (GET_APPCOMMAND_LPARAM(lParam)) { case APPCOMMAND_MEDIA_PLAY_PAUSE: AfxMessageBox("PLAY_PAUSE"); return TRUE; case APPCOMMAND_MEDIA_PLAY: TCHAR szBuf[MAX_PATH]; ZeroMemory(szBuf,MAX_PATH); GetCurrentDirectory(MAX_PATH,szBuf); ShellExecute(NULL,"open",CString(szBuf)+"//Cortana.lnk",NULL,NULL,SW_SHOWNORMAL); Sleep(500); keybd_event(VK_TAB,0,0,0); //按下TAB鍵 keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);//鬆開TAB鍵 keybd_event(VK_RETURN,0,0,0); //按下ENTER鍵 keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);//鬆開ENTER鍵 return TRUE; case APPCOMMAND_MEDIA_PAUSE: ZeroMemory(szBuf,MAX_PATH); GetCurrentDirectory(MAX_PATH,szBuf); ShellExecute(NULL,"open",CString(szBuf)+"//Cortana.lnk",NULL,NULL,SW_SHOWNORMAL); Sleep(500); keybd_event(VK_TAB,0,0,0); //按下TAB鍵 keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);//鬆開TAB鍵 keybd_event(VK_RETURN,0,0,0); //按下ENTER鍵 keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);//鬆開ENTER鍵 return TRUE; case APPCOMMAND_MEDIA_STOP: // AfxMessageBox("STOP"); return TRUE; case APPCOMMAND_MEDIA_PREVIOUSTRACK: // AfxMessageBox("PREVIOUSTRACK"); return TRUE; case APPCOMMAND_MEDIA_NEXTTRACK: // AfxMessageBox("NEXTTRACK"); return TRUE; } } } return CDialog::WindowProc(message, wParam, lParam); }
三、檔案下載地址