如何給網易雲音樂加一個快捷鍵?

網易雲音樂電腦版,私人FM里的垃圾桶按鈕沒有快捷鍵,有沒有什麼辦法自己加一個快捷鍵?


#應題主請求,補充一些細節,多圖警告

首先,默認題主有過JNI的調用經驗,如果沒有,請左轉google惡補一下。這下面就不具體說明JNI具體如何調用API,僅說明一下具體分析、調試過程以及給出偽代碼。

一、獲得目標窗口句柄

在win環境下,要投遞消息,首先你需要窗口句柄,所以下面先介紹一下常見的獲取窗口句柄的操作。

使用任意工具獲得網易雲音樂的窗口信息,我這裡用的是彗星小助手.你可以vs自帶的工具SPY++實現同樣的操作。

這裡可見前端框架用的是chrome內核。窗口樹從下往上的類名分別是:

  1. Chrome_RenderWidgetHostHWND
  2. Chrome_WidgetWin_0
  3. CefBrowserWindow
  4. 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++

具體操作見下圖

1.SPY++按下Alt+F查找窗口

2.拖動這個玩意兒到目標窗口上鬆開

3.右鍵進入菜單

4.在網易雲音樂上點擊按鈕垃圾桶

5.F8可以停止消息記錄

Visual Studio自帶的SPY++可以進行窗口消息捕獲。

開始捕獲之後,點擊一下網易雲音樂的垃圾桶,可以看到一堆消息輸出,不出意外的話,你應該能看到一堆的WM_MOUSE_MOVE和一個WM_LBUTTONDOWN一個WM_MOUSEACTIVATE。這個WM_LBUTTONDOWN顧名思義就是滑鼠左鍵按下的時候會觸發的消息。

當然,你也可以不用調試,直接無腦投遞

  1. WM_MOUSEACTIVATE(滑鼠激活)
  2. WM_MOUSEMOVE(滑鼠移動)
  3. WM_MOUSEHOVER(滑鼠挪上去)
  4. WM_LBUTTONDOWN(左鍵按下)
  5. 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正式版?

TAG:軟體 | 程序員 | 軟體開發 | Java | Windows10 |