NVDA附加元件不僅能讓NVDA使用更有彈性、用途更加豐富,附帶的還能讓程式學習者增加觀摩和練功的機會,門檻又不高,值得多加利用。
哪怕不會或不熟 python, 只要會寫程式,不管用什麼語言都能發揮長才做出貢獻。
下面就拿官方 NVDA Add-on Development Guide 提供的最簡單的範例來詳加說明,最後再以這個範例為框架套上自己用其他語言撰寫的程式來完成自己的NVDA附加元件。
為了方便說明,下面的程式碼我加上了編號,其中有 * 者為必要照抄,其他都可自行增刪。
1 # Add-on development first example
2* import globalPluginHandler
3 import tones
4* class GlobalPlugin(globalPluginHandler.GlobalPlugin):
5 def script_doBeep(self, gesture):
6 tones.beep(440, 1000)
7 __gestures={ "kb:NVDA+A":"doBeep" }
什麼,只有七行就寫成了一個NVDA附加元件?!
沒錯,就是這麼簡單!是驢是馬拉出來遛遛便知。不信就來試試:
首先將程式碼複製貼到記事本,把每行開頭的三個字元刪除,存成 mytest.py 並複製,接著以 nvda-2019.2 為例:
- NVDA功能表 -> 偏好設定 -> 設定 -> 進階
- 勾選我了解更改這些設定可能會導致 NVDA 執行異常。
- 勾選啟用從開發者的目錄中載入程式碼
- 按下開啟開發者的scratchpad目錄
- 進入 globalPlugins 資料夾
- 貼上 mytest.py
- 重啟 nvda
- 按 NVDA+A
有聽到嗶嗶聲了嗎?恭喜測試成功!
接下來就解釋程式碼:
- 這是註解說明。
- 載入 globalPluginHandler 模組。
NVDA附加元件有四種:通用、特定軟體、語音驅動和點字驅動。
這個範例屬於通用,所以必須載入這個模組。 - 載入 tones 模組。
因為要發出嗶嗶聲所以載入這個模組。 - 建立一個名為 GlobalPlugin 的類別。
這個類別繼承自 globalPluginHandler 模組的 GlobalPlugin 類別, 5-7 是新增的內容。 - 定義一個由按鍵觸發的 doBeep 函數,第 6 行為函數內容。
- 呼叫 tones 模組的 beep 函數發出頻率 440HZ, 長度 1000MS(一秒鐘)的嗶嗶聲。
- 定義按鍵 NVDA+A 觸發 doBeep 函數。
了解了這個簡單的附加元件框架,只要稍微修改就能套用其他語言寫的程式。
假設我們已經寫了一個遊戲,主程式檔名為 mygame.exe, 可以如下修改這個範例並如上存檔為 mygame.py,我把說明寫在行末:
3 import os # 載入 os 模組以便處理檔案路徑
3.1import subprocess # 載入 subprocess 模組以便執行外部程式
3.2dir = os.path.dirname(file) # 指定 dir 變數存放 mygame.py 所在資料夾
5 def script_game(self, gesture): # 更改函數名稱
6 subprocess.Popen([os.path.join(dir, "mygame.exe")]) # 執行遊戲主程式
7 __gestures={ "kb:NVDA+A":"game" } # 修改呼叫的函數
最後是打包附加元件:
- 建立並進入資料夾 mygame
- 新增資料夾 globalPlugins
- 複製 mygame.py 與 mygame.exe 到 globalPlugins
- 回到 mygame 用記事本建立 manifest.ini 內容如下:
name = mygame
summary = "我的遊戲"
description = """這是我寫的第一個附加元件"""
author = 作者姓名
version = 1.0
minimumNVDAVersion = 2017.3
lastTestedNVDAVersion = 2019.3 - 在 mygame 資料夾內進行全選並壓縮成 mygame.zip 然後把它更名為 mygame.nvda-addon
安裝執行就不必說了,記得要先把剛剛測試的 mytest.py 移除。
等待您的作品,加油!
※最後更新時間:2019-09-09 13:18:29 From:123.193.249.19 By:coscell
來源文章
最後更新:2019-09-09 17:38:32
From: 211.23.21.202
By: 特種兵