WMP Better Controls 是一個可以讓 Windows Media Player 更適合看影片與截圖的外部控制工具
可以在不顯示影片進度條的情況下執行以下動作:
- 調整快進與後退 (預設是一次調整5秒,快捷鍵為Ctrl+Right, Ctrl+Left)
- 調整更長時間的快進與後退 (預設是一次調整30秒,快捷鍵為Ctrl+Shift+Right, Ctrl+Shift+Left)
- 調整音量大小 (預設快捷鍵為Ctrl+Up, Ctrl+Down)
- 靜音或取消靜音 (預設快捷鍵為Ctrl+M)
- 以毫秒為單位的截圖格式,可以在短時間內截很多次截圖 (預設快捷鍵為Ctrl+S)
此程式完全在背景執行,沒有主視窗,只靠系統匣圖示與使用者互動
├── include
│ ├── ActionQueue.h // 動作佇列,讓熱鍵動作丟到背景執行緒處理,避免卡住鍵盤Hook
│ ├── ConfigManager.h // 讀寫config.json
│ ├── DebugLog.h // 除錯用的主控台log(由 config.json 的 debugMode 控制開關)
│ ├── HotkeyAction.h // 熱鍵動作的資料結構與 ActionType 列舉
│ ├── KeyboardHook.h // 全域低階鍵盤鉤子(WH_KEYBOARD_LL)
│ ├── ModernMediaPlayerBackend.h // 控制新版媒體播放器App 的 Backend (SMTC API)
│ ├── PlayerController.h // Backend 共用的抽象介面
│ ├── ScreenshotService.h // 截圖服務,跟 Backend 無關,只需要一個HWND
│ ├── TrayApp.h // 系統匣圖示與右鍵選單
│ └── WMPBackend.h // 經典版 Windows Media Player 的 Backend,目前未使用,保留給以後接回來
├── resources
│ ├── app.ico // 應用程式圖示(工作列/Alt+Tab/系統匣用)
│ ├── app.rc // 資源腳本,編譯時把 app.ico 包進exe
│ ├── app_source.png // icon 來源圖
│ └── resource.h // 資源ID定義(IDI_APP_ICON)
├── src
│ ├── ConfigManager.cpp
│ ├── DebugLog.cpp
│ ├── KeyboardHook.cpp
│ ├── ModernMediaPlayerBackend.cpp
│ ├── ScreenshotService.cpp
│ ├── TrayApp.cpp
│ ├── WMPBackend.cpp
│ └── main.cpp // 進入點,把上面所有模組組合起來
├── third_party // 第三方
│ └── nlohmann
│ └── json.hpp
├── .gitignore
└── config.example.json // 範例設定檔,程式第一次執行時會照這個內容產生config.json
{
"general": {
"screenshotFolder": "",
"screenshotFilenameFormat": "HH-mm-ss-fff",
"startWithWindows": false,
"debugMode": false
},
"hotkeys": [
{ "key": "Ctrl+Right", "action": "SeekForward", "amount": 5 },
{ "key": "Ctrl+Left", "action": "SeekBackward", "amount": 5 },
{ "key": "Ctrl+Shift+Right", "action": "SeekForward", "amount": 30 },
{ "key": "Ctrl+Shift+Left", "action": "SeekBackward", "amount": 30 },
{ "key": "Ctrl+Up", "action": "VolumeUp", "amount": 1 },
{ "key": "Ctrl+Down", "action": "VolumeDown", "amount": 1 },
{ "key": "Ctrl+M", "action": "ToggleMute", "amount": 0 },
{ "key": "Ctrl+S", "action": "Screenshot", "amount": 0 }
]
}key 支援 Ctrl / Alt / Shift / Win 修飾鍵組合,主鍵支援英數字、方向鍵、Space、F1~F24。
action 可用值: SeekForward(快進)、SeekBackward(後退)、VolumeUp(音量調高)、VolumeDown(音量調低)、ToggleMute(靜音與解除靜音)、Screenshot(截圖)。
其中screenshotFolder是指放截圖的自訂路徑,如果沒有填的話會在同目錄下生成一個名為Screenshots的資料夾來放截圖。另外,screenshotFilenameFormat是截圖的命名方式,目前不管有沒有改都是固定以HH-mm-ss-fff的格式命名。
在下載完Releases或建置完成後,點目錄下的WMPBetterControls.exe即可開始使用,另外如果是使用自己建置的方式檔案會在WMPBetterControls/build/Debug目錄底下。
第一次執行的時候會自動在同目錄下生成一個名為config.json的檔案,這個檔案是用來設定上方提到的快進、後退、音量調高、音量調低、靜音與解除靜音、截圖的快捷鍵以及放截圖的目錄與debug模式。此外在改完config.json之後可以直接對系統夾的圖示點右鍵按重新載入設定檔來重新載入,也可以直接在系統夾中按右鍵選擇結束,然後再重新啟動檔案。
另外,如果一開始執行程式時在全螢幕模式或視窗模式下按Ctrl會出現進度條,可以試著切換成不同的模式試試看。
原本是使用MinGW去建置與編譯的,但效果不太好,
所以之後是使用 Visual Studio 17 2022的Developer PowerShell 搭配 CMake 來進行建置與編譯
D:\VScode2022\Common7\Tools\Launch-VsDevShell.ps1 # 這裡我是用我自己裝Visual Studio 17 2022的位置下去設定的,不同安裝位置可能會有不同路徑
cd WMPBetterControls
cmake -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_TOOLCHAIN_FILE=D:/vcpkg/vcpkg-master/scripts/buildsystems/vcpkg.cmake # 這邊的路徑我也是使用自己裝vcpkg的路徑
cmake --build build建置出來的 WMPBetterControls.exe 第一次執行時,會在同目錄自動產生一份預設的 config.json (內容跟 config.example.json 一樣)。
之後可以直接編輯這個檔案調整熱鍵,改完在系統匣圖示點右鍵選「重新載入設定檔」,不用重開程式。
本專案採用 MIT License,詳細內容請參閱 LICENSE 文件。
歡迎Pull Requests或幫我改進與建議,覺得有幫助的話也可以為這個repo給一個star。
