羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

之前用 Swiftpoint Z,對於該滑鼠的驅動允許設定"按下A鍵之後,接著按下B鍵or滑鼠上下左右移動or滾輪滾動"都能設定對應的巨集覺得非常驚豔,大幅地讓滑鼠上面能設定的快捷鍵數量遠超過實體鍵的數量。

後來換到 G903,深深覺得按鍵數量少,扣掉常用的左右鍵中鍵DPI,只有少少的六個鍵。
而其驅動又只有很單純的按鍵紀錄,沒辦法進一步設定,完全沒幫助。

儘管能將其中一顆鍵設為"G-Shift鍵",等同於鍵盤分層的概念,按下去其餘五鍵能設定"按著G-Shift時臨時切換的功能",但一者 G-Shift 鍵設定本身就會讓該鍵沒有功能,二者要在按住一顆側鍵的狀況下再按下一顆,手指的靈活性要求很高,能方便"同時兩顆"的鍵是有限的。

偶然發現羅技滑鼠有個特殊的功能 LUA 腳本,儘管查詢下去大多數文章都是說如何用這個腳本寫外掛,但仔細想想應該可以嘗試達成自己按鍵數量與功能的需求!!

就來寫了這套腳本。
參考資料
https://www.jianshu.com/p/ef08e5deee29
https://www.runoob.com/lua/lua-tutorial.html

LUA編輯介面的這個地方有完整API,雖然是英文的但看一下就能知道能達成多少功能、以及有哪些限制。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

LUA腳本編輯的位置在畫紅圈處,相當不顯眼。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

首先,先釐清需求,因為我大多數使用滑鼠的時間都在使用網頁瀏覽器,且使用了些工具讓自己在能用滑鼠時另一手就盡量不碰鍵盤、而需要碰鍵盤時就盡量不使用滑鼠,所以此次功能設計上就不考慮左手按鍵盤的修飾鍵來幫右手的滑鼠切換更多層功能了(要做到也很簡單,只是不需要)

經過思考和測試後,首先讓"雙指能同時按"的 G-shift 鍵設定在滑鼠左前方 M4 鍵,而對應的控制鍵則是中鍵,中鍵左右擺動對應了左右切換分頁,以及按住G-shift後的上下一頁。

拇指第二好按的左後方 M5 鍵,則設定為"按下去快速放開,執行 alt +tab"作為視窗快速切換。
而如果按下去不放開,則會變成視窗列表"alt+ctrl+tab",這時候滑鼠上下左右移動會觸發上下左右鍵,可以藉此快速的選擇要跳轉的視窗目標,放開自動切換,而不需要真的把滑鼠移到上面點擊。

小拇指負責的右後方 M6 鍵不好按到,只設定短按開啟新分頁、長按復原已關閉分頁。
一樣小拇指負責的右前方 M7 鍵好按一些,設定為短按關閉分頁,長按時,按照上下左右快速跳轉對應分頁 (ctrl+1~3,9。ctrl + 9 代表跳到最後一個分頁)

羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

需要說明一下,
而LUA有個限制,運作上是單線程的,也就是一個腳本開始執行(觸發執行的原因通常是"按下滑鼠上的按鍵")沒有結束前是不能重新執行腳本的,也就是"按鍵觸發(按鍵按下或鬆開)"這件事情在LUA上沒辦法用來中斷腳本,這導致組合鍵裡面"放開執行"或"不放開下再按某鍵"都不能監控!

例外就是,Logitech G HUB Lua API 中有兩種方式可以讓正在跑的腳本檢測當下按鍵狀況。
分別是 IsModifierPressed ,只能檢測修飾鍵是否按下或鬆開(Left, right, or either Alt key ;Left, right, or either Shift key ; Left, right, or either Ctrl key)
和 IsMouseButtonPressed ,只能檢測滑鼠左鍵、中鍵、右鍵是否按下或鬆開。

因此,要用LUA編寫足夠強大的腳本,必須要把要設定的功能鍵設維修飾鍵,這樣才能進行追蹤。
也因為把滑鼠上的按鍵設為修飾鍵了,需要注意在安排該按鍵功能時,要考慮"已經按下的滑鼠按鍵具有修飾鍵的功能"



以我安排的功能而言,就把 m4、m6、m7 都設為右 ctrl。
綠色的部分是靠原生的 G-shift 功能組合達成。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

以下講解腳本寫法

第4行 arg == 4 and bEnabled == false ,代表的是"按下 m4 鍵,就執行接下來的 then 的內容", bEnabled 則是一個腳本開始執行後會改為 true,結束才又改回 false ,以此避免不同腳本重複執行。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

五到九行,先獲得滑鼠所在一開始的 x,y 值。

羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

十一到十六行,按下 ctrl + alt + tab ,須注意有時候連按時要插入 sleep 稍微暫停才不會出錯。

十八行,如果放開 m4 (rctrl) ,就立刻輸入 enter,須注意這種檢測前面必須要有 sleep 去稍微暫停,否則必定異常。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換


如果 m4 鍵持續按著,就進入 while 迴圈。直到 51~ 56的"如果放開 m4 (rctrl) 就跳出( break)迴圈"為止。
28~29 每次執行迴圈時,先等待200毫秒,再紀錄 x2,y2當前的滑鼠位置;與 x1,y1相比較就可以知道滑鼠是往哪個方向移動。
30~50 即為個方向移動後對應觸發的按鍵,Sleep(300) 是實測後再剛移動完會容易手滑以為系統沒反應又多動起下,結果容易連續輸出太多次,有稍微暫停就能更精準的選擇。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

61~89 是按了 m6後的行為。
63~64檢測當前的時間,66~74 則是用 while 暫停住腳本,直到鬆開 m6 (rctrl) 為止。
75~82 如果按住的持續時間大於 300毫秒,就執行此段內容。
83~88 否則就執行此段內容。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

94 以後則是按下 m7 的行為。
和 m4不同的地方是,多了如果上下左右有成功觸發,那 iCount = 1 。
146 行則是如果按下 m7 卻又沒有移動,那麼就會繼續執行 147~153的內容。
羅技 G903 LUA腳本-瀏覽器與 windows視窗切換

附上完整的程式碼。
https://paste.plurk.com/show/iyad29Ao3h0ZsEeVT6c0/

LUA邏輯大致上如此,各個觸發的時間、移動距離等就需要按照不同人的習慣自行微調了,以上。
2022-06-29 22:41 發佈
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?