如何給網易雲音樂加一個快捷鍵?
網易雲音樂電腦版,私人FM里的垃圾桶按鈕沒有快捷鍵,有沒有什麼辦法自己加一個快捷鍵?
#應題主請求,補充一些細節,多圖警告
首先,默認題主有過JNI的調用經驗,如果沒有,請左轉google惡補一下。這下面就不具體說明JNI具體如何調用API,僅說明一下具體分析、調試過程以及給出偽代碼。
一、獲得目標窗口句柄
在win環境下,要投遞消息,首先你需要窗口句柄,所以下面先介紹一下常見的獲取窗口句柄的操作。
使用任意工具獲得網易雲音樂的窗口信息,我這裡用的是彗星小助手.你可以vs自帶的工具SPY++實現同樣的操作。
這裡可見前端框架用的是chrome內核。窗口樹從下往上的類名分別是:
- Chrome_RenderWidgetHostHWND
- Chrome_WidgetWin_0
- CefBrowserWindow
- OrpheusBrowserHost
通過消息監視,Chrome_RenderWidgetHostHWND看起來是渲染的,並不接受消息,所以我們只需要從OrpheusBrowserHost一直找到Chrome_WidgetWin_0就行。
有了類名之後,使用FindWindowEx 這個API就能找窗口句柄。
HWND WINAPI FindWindowEx(
_In_opt_ HWND hwndParent,//父窗口句柄,頂級窗口直接給0就行
_In_opt_ HWND hwndChildAfter,//多個匹配時給上一個查詢結果,可繼續往下找
_In_opt_ LPCTSTR lpszClass,//類名
_In_opt_ LPCTSTR lpszWindow
);
通過OrpheusBrowserHost這個類名找到多個頂級窗口匹配項(注意,有多個!),拿到之後往下查CefBrowserWindow接著拿到Chrome_WidgetWin_0,查找時候注意父窗口句柄這個參數,其它沒什麼需要特別說明的。
拿到Chrome_WidgetWin_0句柄之後。就可以進行模擬投遞操作了。
二、消息抓取
(這段內容可跳過,僅僅是介紹一下不知道具體觸發消息時的調試辦法)
工具:SPY++
具體操作見下圖
Visual Studio自帶的SPY++可以進行窗口消息捕獲。
開始捕獲之後,點擊一下網易雲音樂的垃圾桶,可以看到一堆消息輸出,不出意外的話,你應該能看到一堆的WM_MOUSE_MOVE和一個WM_LBUTTONDOWN一個WM_MOUSEACTIVATE。這個WM_LBUTTONDOWN顧名思義就是滑鼠左鍵按下的時候會觸發的消息。
當然,你也可以不用調試,直接無腦投遞
- WM_MOUSEACTIVATE(滑鼠激活)
- WM_MOUSEMOVE(滑鼠移動)
- WM_MOUSEHOVER(滑鼠挪上去)
- WM_LBUTTONDOWN(左鍵按下)
- WM_LBUTTONUP(左鍵鬆開)
大部分響應滑鼠左鍵按下的窗口,這麼一套消息下去都能起作用。
三、投遞消息
通過類名拿到了句柄,知道投遞什麼消息,並且有了參數,下一步就是投遞消息了。
MSDN參見 PostMessage
通過剛才第二步已經拿到了觸發時的消息編號以及參數
PostMessage (hwnd, WM_MOUSEACTIVATE, 1967676, 33619969)
PostMessage (hwnd, WM_LBUTTONDOWN, 1, 31392144)
PostMessage (hwnd, WM_LBUTTONUP, 1, 31392144)
使用PostMessage向第一步拿到的窗口句柄發送這3條消息即可。注意,我這兒偽代碼是10進位的參數。視不同的語言你可能需要輸入十六進位的參數。自行參考spy++抓取到的消息。
測試效果。動圖比較糊,湊合看吧
四、為你的工具添加一個快捷鍵
這部分方式很多,比較簡單粗暴的是給自己程序添加一個快捷方式並分配快捷鍵。
這個方式的壞處是,java冷啟動較慢,很可能不能做到按下即響應。
另外一種可行的方案就是用JNI註冊系統熱鍵。
這是一個我隨便搜索的java第三方熱鍵實現dstjacques/JHotKeys,題主可以選擇使用別的包。
--------------------------原答案---------------------------
mac os么?如果是的話,試試Shortcat,只要你能看到,滑鼠能點到的,這玩意兒都能給你5個字母內定位ui元素,接著一個回車就能模擬一個點擊,美滋滋。只不過這種輸入方式算不算得上「快捷鍵」,就得看手速了。
此外,macos的話,自帶的腳本編輯器automator也是一個可選的方案,開啟網易雲音樂的菜單欄快捷鍵,然後 automator-我做給您看-錄製-點擊菜單欄的垃圾桶-結束錄製-腳本播放速度設置10倍-分配一個快捷鍵,即可。這個方案的缺點是,automator是真的實打實的挪動你的滑鼠過去點的,某些場合不是很合適。
如果自己擼的話,mac相關的app開發我不熟就不提建議了,win下,直接call相關函數應該是比較靠譜的。然而有個蛋疼的問題,就是版本更新後很可能GG。調得一手好試的話可以試試。
簡單粗暴的模擬一下滑鼠的消息,有時候也是個不錯的選擇。我試著hook了一下消息處理函數,然後錄製了一下滑鼠相關的消息(WM_LBUTTONDOWN/WM_MOUSEMOVE之類的),重放了一下,可用。但是鑒於這個窗口是可調大小的窗口,感覺依然比較不靠譜的樣子。如果採用這個方案的話,建議只處理「迷你模式」那個小窗口。
看程序有沒有命令行的介面, 若是windows自帶的應用一般都有, 第三方的就未知了..
若有可通過命令行或PowerShell腳本去循環操作實現自動化
若無只能通過按鍵精靈去模擬鍵盤滑鼠的界面操作了..
如果題主有具體的應用可以進一步探討
瀉藥
修改一下........
電腦啊!我不知道 ......安卓的話,長按手機桌面,小掛件或者添加工具裡邊有,不知道你說的是不是這個。
既然邀請我了,那就告訴你好了。我是這麼乾的。。用 AutoHotkey ;
推薦閱讀:
※windows 10 改變了什麼?
※Windows 10 有哪些亮點?
※被強制升級Windows 10是什麼體驗?
※Windows 10 系統出現問題客服叫自己花錢找工程師修理是否合理?
※如何升級win10正式版?