第四章 系統功能
本研究所研出來的輸入裝置,其主要功能可分為三類來說明:輸入法輸入、
快速鍵輸入以及自定按鍵的輸入,圖 4-1 即為本輸入裝置的功能架構圖。
快速鍵輸入
輸入法輸入 自訂按鍵輸入
大 寫 英 文
倉 頡 小
寫 英 文
無 蝦 米
注 音
網 路 快 速 鍵
常 用 快 速 鍵
五十個 自訂盤 面的按 鍵輸入 系統功能
圖 4-1 本輸入裝置的功能架構圖
本輸入裝置主要提供的輸入法盤面有小寫英文輸入,大寫英文輸入,注音輸 入,倉頡輸入以及無蝦米輸入。另外除了這些輸入法盤面之外,本輸入裝置也有 提供網際網路快速鍵盤面以及常用快速鍵輸入盤面,因為發展本輸入裝置的主要 理念就是要盡量減輕使用者的負擔,所以我們的構想是將所有繁雜的操作步驟全 部簡化成單一按鍵 (One Touch),因此本輸入裝置將常用到的複合鍵、系統功能
以及網際網路的快速鍵都做成單一按鍵並整合成一個盤面,以方便使用者操作。
而本輸入裝置的另一特點就是可以讓使用者自行新增、修改盤面,只要利用我們 研發的編輯程式 (細節在第五章有詳細的說明) 就可以創造出使用者想要的盤面 來做輸入的動作,使用者不需擔心還要重新適應按鍵的擺設,如果不習慣預設的 按鍵擺設,使用者可以自行編輯適合的盤面來做輸入的動作。由於有這樣的構 想,所以本輸入裝置在設計上需格外的注意資料結構,才能達成所需的功能。
4.1 設計概念
在本節將簡單介紹本輸入裝置的設計概念,透過之前的簡介,本輸入裝置的 架構已經很明顯了,本輸入裝置主要分為八個盤面,分別為:大寫英文盤面,小 寫英文盤面,注音盤面,倉頡盤面,無蝦米盤面,網際網路快速鍵盤面,常用快 速鍵盤面以及自訂盤面。
4.1.1 資料結構
本輸入裝置的設計理念不僅僅是要讓使用者當做一個普通的輸入工具更要 簡化使用者操作電腦的步驟,並且讓使用者介面符合每一個使用者的需求,也就 是說本輸入裝置上的每一個盤面都可以讓使用者自行做更新、修改的動作,甚至 可以讓使用者自行編輯新的盤面放到本輸入裝置上來執行。
所以本輸入裝置必須考慮到程式的彈性、擴充性;為了達到設計的需求,首 先,本輸入裝置將所有的按鍵指令結構化。簡單的說,在一般鍵盤上,每個按鍵 都有自己的 scan code,所有按鍵的 scan code 如圖 4-2 所示[19]。而當使用者按下 一個按鍵時,鍵盤會送出該按鍵所屬的 make code 資料到電腦端,而當放開按鍵 時則會送出該按鍵所屬的 break code 資料到電腦端。例如:按鍵〝a〞的 scan code
為 0x1C (十六進位),則它的 make code 為 1C,break code 為 F0 與 1C,當使用者 按下〝a〞這個按鍵時,鍵盤會送出 1C 到電腦端,而放開〝a〞這個按鍵時,鍵 盤會送出 F0 與 1C 到電腦端,這樣才完成送出一個按鍵資料的所有動作。就連快 速鍵也是有相對應的 make code 與 break code,例如:開啟 IE 這個快速鍵的 make code 是 E0 與 3A,break code 是 E0,F0 與 3A。所以我們利用陣列將所有按鍵的 make code 與 break code 資料儲存起來,並且建立一個名為 code data 的陣列來記 錄所有 make code 與 break code 資料儲存在陣列的位置,而當本輸入裝置知道按 鍵功能所儲存的位置,就可以去取其 make code 與 break code 的內容。經過了這 樣的設定,當使用者在編輯按鍵功能時只要知道需求的按鍵功能在 code data 裡的 位置就可以了,使用者不用去查詢按鍵的 make code 與 break code,並自行輸入一 長串的按鍵資料。
圖 4-2 所有按鍵的 scan code
接著,本輸入裝置將處理盤面的資料,每個盤面 是由按鍵所組成,按鍵的資 料則包括按鍵圖片以及按鍵功能,而本輸入裝置對這些資料處理的方式則是將每 個盤面的資料分開並將這些資料放在程式的外部,而存放這些資料的外部檔案則 稱為盤面的設定檔,本輸入裝置規定 txt 檔案類型當作盤面的設定檔。每個盤面 所提供的輸入鍵最多有五十個,所以在每個設定檔裡共要有五十筆資料,每筆資 料又分為相對應的按鍵圖片檔名以及按鍵指令在 code data 裡的位置,實際的小寫 英文盤面的定義檔 input_eng.txt 的內容就如附錄 A 所示。經過這樣的設計,本輸 入裝置不僅可以讓使用者新增、修改盤面,而且在新增、修改盤面的同時,使用 者不需變更所有盤面的資料,造成無謂的負擔。
4.1.2 使用者介面設計
由於本輸入裝置主要的功能是提供按鍵的輸入,所以一定要提供足夠的按鍵 數,才能容納基本的按鍵。所以本輸入裝置的使用者介面設計是將整個畫面切割 成 8 X 10 個方格,接著畫分成三個主要的區塊,分別為:各盤面的輸入鍵,盤面 切換鍵以及通用功能鍵。圖 4-3 即為每個輸入盤面的區塊配置規則。
圖 4-3 盤面的區塊配置圖
在本輸入裝置上,各盤面的輸入鍵這個區塊裡的按鍵是會變更的,也就是說 當使用者切換到小寫英文盤面時,這個區塊裡就會顯示出小寫英文的相關輸入按 鍵,若切換成網際網路盤面,這個區塊裡就會顯示出網際網路的相關輸入按鍵。
但是在盤面切換鍵以及通用功能鍵這兩個區塊裡的按鍵則是固定的,也就是說不 管使用者切換到那一個盤面,這兩個區塊所顯示的按鍵都是一樣的,因為這兩個 區塊的按鍵都是使用者經常會用的按鍵,如果不將這些按鍵設定在固定的位置,
會造成使用者無謂的負擔,接著將介紹這三個區塊各設定的功能:
(1). 各盤面的輸入鍵
這個區塊主要為各個盤面的輸入按鍵,例如:在切換到小寫英文盤面 時,按 a 這個按鍵,本輸入裝置就會送出 a 這個字根,而在切換到注音的盤 面時,按ㄅ這個按鍵,本輸入裝置就會送出ㄅ這個字根。在切換到網際網路 盤面時,按開啟 IE 這個按鍵,本輸入裝置將會送出開啟 IE 的資料,也就是
說這個區塊是給每個盤面的輸入鍵所使用。
(2). 盤面切換鍵
在這個區塊裡,一共有八個按鍵,主要功能是做盤面切換,若有設定快 速鍵將會同時把輸入法做切換,每個按鍵相對應的功能如表 4-1 所示:
表 4-1 盤面切換鍵對應功能
按鍵圖形 按鍵功能
切換至小寫英文輸入法盤面。若在 Windows 作業系 統上將英文輸入法的快速鍵設定為 Alt-Shift_0,則 切換時本輸入裝置會順便將輸入法切換為小寫英 文輸入法。
切換至大寫英文輸入法盤面。
切換至注音輸入法盤面。若在 Windows 作業系統上 將注音輸入法的快速鍵設定為 Alt-Shift_3,則切換 時本輸入裝置會順便將輸入法切換為注音輸入法。
切換至倉頡輸入法盤面。若在 Windows 作業系統上 將倉頡輸入法的快速鍵設定為 Alt-Shift_1,則切換 時本輸入裝置會順便將輸入法切換為倉頡輸入法。
切換至無蝦米輸入法盤面。若在 Windows 作業系統 上將無蝦米輸入法的快速鍵設定為 Alt-Shift_2,則 切換時本輸入裝置會順便將輸入法切換為無蝦米 輸入法。
切換至網際網路快速鍵盤面。
切換至常用快速鍵盤面。
切換至自定盤面的主畫面。
(3). 通用功能鍵
在這個區塊裡,都是使用者在使用電腦中必須用到的一些功能鍵。在這 個區塊設計之初,我們有作一個小小的實驗,總共有五位同學以及我參予,
為期一個禮拜,我們將輸入裝置設定成只有鍵盤,然後跟往常一般使用電 腦,並且記錄著那些按鍵最常用到,又或者增加哪些複合鍵、功能鍵會讓使 用者在操作電腦上感覺更輕鬆,然後統計出這些常用的複合鍵、功能鍵並且 在這個區塊上進行編排。由於採樣的人數不夠多,這些預設的功能鍵或許不 夠客觀,但是我想這對使用者在操作電腦上一定有正面的幫助。表 4-2 則是 這個區塊裡每個按鍵的功能。
表 4-2 通用功能鍵對應功能
按鍵圖形 按鍵功能 按鍵圖形 按鍵功能
將程式關 閉。
切 換 桌 面 上 的 程 式。
顯示桌面 顯 示 功 能
選單。
取消鍵。 退後鍵。
消除文字 或物件。
游 標 移 到 字首。
游標移到 字尾。
控 制 文 字 輸 入 時 是 插 入 新 的 字 元 或 者 更 換 原 本 的字元。
往上移一 頁。
往 下 移 一 頁。
定位健。 視窗鍵。
空白鍵。 確認鍵。
上下左右 鍵。
4.2 輸入裝置盤面功能介紹
在本節將介紹各個盤面的版面配置與功能。
4.2.1 預設輸入法盤面介紹
預設的輸入法盤面總共有:小寫英文盤面、大寫英文盤面、注音輸入盤面、
倉 頡 輸 入 盤 面 以 及 無 蝦 米 輸 入 盤 面 , 其 設 定 檔 的 檔 名 分 別 為 : input_eng、
input_bigeng、input_chi、input_chun 以及 input_wu;這些輸入法盤面的功能是一 樣的,都是做輸入字根的動作。
圖 4-4、4-5、4-6 以及 4-7 即為實際上做出來的預設輸入法盤面,其中無蝦米 輸入法的字根就是大寫英文,所以在這邊就不再重複列出,而本輸入裝置的輸入 法按鍵排列方式是採用 QWERTY 排列方式,也就是跟一般鍵盤一樣的排列方 式,這個排列方式是由 C.Shole 所提出,雖然已經有人 (William H Cushman, 1991) 證明出有許多潛在的缺點,例如:常用的字母被放在頂列,而不是放在基本列;
左右分配不均勻…等等,但是這種按鍵排列方式的鍵盤已經太普遍了,幾乎每個 接觸過電腦的人都是使用這種排列方式的鍵盤,為了不想讓初次使用本輸入裝置 的使用者還要重新適應鍵盤按鍵的排列方式,所以本輸入裝置預設的輸入法按鍵 排列皆採用 QWERTY 排列方式。
圖 4-4 小寫英文盤面圖
圖 4-5 大寫英文盤面圖
圖 4-6 注音盤面圖
圖 4-7 倉頡盤面圖
4.2.2 預設快速鍵盤面介紹
本節將介紹預設的快速鍵盤面,本輸入裝置預設的快速鍵盤面分為網際網路 快速鍵盤面以及常用快速鍵盤面,其設定檔的檔名分別為:input_internet 以及 input_fn。
網際網路快速鍵的實際盤面如圖 4-8 所示。由於電腦跟網際網路的普及,現 在人類的生活已經離不開電腦跟網際網路,使用者可以利用電腦上網來接收任何 的訊息,並且找到想要的資料、知識,甚至可以利用電子郵件來當作對外溝通的 橋樑。但是為了要達成使用者所需要的功能,往往都要按好幾個按鍵才能完成所 有步驟,甚至還要利用滑鼠才能執行所需的功能。這些過多的操作步驟對有肢體 障礙的使用者是非常困擾的一件事情,偏偏在使用電腦時又是會經常用到的功 能,為了降低使用者的負擔以及增加使用效能,所以本輸入裝置將這些網際網路
常用的功能集合起來,了解並整合所需的複合鍵,然後設計成單一按鍵 (One Touch) 就能完成所需功能。也就是說在網際網路快速鍵盤面上的按鍵都是當使用 者在上網時會用到的功能,而當使用者想要執行哪個功能都只需按一個按鍵就可 以完成原本繁雜的操作步驟。例如:使用者想要開啟 IE 視窗,一般的作法是要移 動滑鼠到 IE 的圖示上,並且點擊兩下才能開啟,或者要知道複合鍵並由鍵盤輸 出,但是如果利用本輸入裝置,使用者只需在螢幕上的開啟 IE 這個格子裡輕輕的 點一下,本輸入裝置就會自動幫使用者開啟 IE,所以本輸入裝置可以大量減輕使 用者的負擔。而在網際網路快速鍵盤面上按鍵的排列方式為:第一、二行是 IE 瀏覽器的快速鍵,第三行是對 Outlook 電子郵件的快速鍵,第四、五行則是相關 功能的快速鍵。如:尋找,列印…等等。所有的網際網路快速鍵按鍵圖形以及相 對應功能如表 4-3 所示。
圖 4-8 網際網路快速鍵盤面圖
常用快速鍵盤面的設計理念跟網際網路快速鍵盤面是一樣的,本輸入裝置主 要強調的理念就是一個按鍵 (One Touch) 就能完成所需功能,網際網路快速鍵的 實際盤面如圖 4-9 所示。而在這個盤面上有許多使用者在操作電腦時經常會用的 功能,如:檔案的操作功能,編輯功能以及音量控制…等等,甚至可以直接開啟 Word,Notepad,小畫家以及小算盤。就拿開啟小算盤這個功能來說明,一般要 開啟小算盤的操作方式,使用者必須利用滑鼠先點選 Windows 的開始鍵,然後點 選所有程式,再進入附屬應用程式,接下來才可以點選小算盤並且執行它。如果 利用本輸入裝置,只需在螢幕上的小算盤這個格子裡輕輕點一下就可以開啟並且 執行小算盤這個程式了。而在音量控制方面,一般的操作方式是利用滑鼠點選到 喇叭圖示,此時會跳出音量控制選單,而使用者要再利用滑鼠拖曳游標或上下鍵 來調整音量,如果利用本輸入裝置,只需用一個按鍵就能取代所有的步驟了,所 以使用者利用本輸入裝置的快速鍵將可以大量減輕輸入負擔。所有的常用快速鍵 按鍵圖形以及相對應功能如表 4-3 所示。
圖 4-9 常用快速鍵盤面圖 表 4-3 網際網路與常用快速鍵對應功能
按鍵圖形 按鍵功能 按鍵圖形 按鍵功能
開啟 IE 瀏覽器。 開 啟 新 的 瀏 覽 器 視窗。
開啟我的最愛。 加入到我的最愛。
將 IE 瀏覽器以全 螢幕瀏覽。
將 IE 瀏覽器的頁 面 切 換 到 首 頁 瀏 覽。
瀏覽上一頁。 瀏覽下一頁。
停止載入頁面。 重 新 整 理 目 前 的 頁面。
開啟 Outlook 電子
郵件。 建立新的郵件。
傳 送 以 及 接 收 郵 件。
回 覆 目 前 開 啟 的 郵件。
轉 寄 覆 目 前 開 啟
的郵件。 開啟通訊錄。
選取全部。 剪下。
複製。 貼上。
開 啟 尋 找 對 話 方 塊。
開 啟 列 印 對 話 方 塊。
將音量加大。 將音量減小。
將音量設為靜音。
在 目 前 的 物 件 裡 , 開 啟 新 的 檔 案。
開啟舊有的檔案。 儲存目前的檔案。
開啟 Word。 開啟小畫家。
開啟筆記本。 開啟小算盤。
開啟 Dos。 開啟 c 槽。
復原。 螢幕列印鍵。
開啟檔案總管。 關機。
任 何 物 件 , Windows 所 提 供 的問與答。
4.2.3 自定盤面介紹
本節將介紹自定盤面,當使用者點選自定盤面時,本輸入裝置上的輸入區塊 會顯示出 1 到 50 的數字,每一個數字代表的涵義是一個自定的盤面,也就是本 輸入裝置將提供五十個自定盤面讓使用者自行使用,而本輸入裝置規定的自定盤 面設定檔的檔名格式為 input_self+數字代號.txt。例如:1 代表執行自定盤面設定 檔 input_self1.txt,2 代表執行自定盤面設定檔 input_self2.txt,其他以此類推。使
用者可以利用我們研發的編輯程式來進行盤面編輯 (細節在第五章有詳細的說 明),只要將編輯好的盤面檔案上傳至本輸入裝置,將可以顯示使用者編輯的盤面 並且執行自行編輯的盤面,例如:在自定盤面裡,點選 1 就會顯示出第一個自定 盤面 (input_self1.txt),接著可以對自己編輯的盤面進行操作,如果使用者想切換 到另一個自定盤面可以先切換到自定盤面的主畫面,然後再點選想要使用的盤 面,當然在自定盤面裡隨時可以跟輸入法盤面與快速鍵盤面直接的做切換。而實 際的自定盤面的主畫面如圖 4-10 所示。
圖 4-10 自定盤面圖的主畫面
4. 3 程式基本流程
接下來將簡單說明本輸入裝置上的程式基本流程,本輸入裝置的程式基 本流程如圖 4-11 所示。
程式開始
註冊視窗類別,初始化,
並進入訊息回圈 (InitInstance)
程式收到WM_PAINT訊 息,呼叫DoPaintMain
函式
按鍵是否被按下
程式收到WM_LBUTTON DOWN訊息,將資料讀入
,並作判斷
功能鍵 盤面
切換鍵
將資料 送至電 腦端
重畫盤面 是
否
圖 4-11 嵌入式替代性鍵盤的程式流程圖
由於本輸入裝置是在 Windows CE 嵌入式作業系統上進行開發,所以必須採 用 Evc ++ (eMbedded Visual C++) 當作程式開發軟體,而利用 Evc++開發的好處 是:當程式一開始發展時,Evc++可以提供相關的初始設定以及註冊視窗類別,
如圖 4-12 所示。
// Register application main window class.
wc.style = 0; // Window style wc.lpfnWndProc = MainWndProc; // Callback function wc.cbClsExtra = 0; // Extra class data wc.cbWndExtra = 0; // Extra window data wc.hInstance = hInstance; // Owner handle
wc.hIcon = NULL, // Application icon wc.hCursor = LoadCursor (NULL, IDC_ARROW);// Default cursor
wc.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
wc.lpszMenuName = NULL; // Menu name wc.lpszClassName = szAppName; // Window class name if (RegisterClass (&wc) == 0) return 0;
// Create main window.
hWnd = CreateWindow (szAppName, // Window class TEXT("HelloCE"), // Window title // Style flags
WS_VISIBLE | WS_CAPTION | WS_SYSMENU, CW_USEDEFAULT, // x position
CW_USEDEFAULT, // y position CW_USEDEFAULT, // Initial width CW_USEDEFAULT, // Initial height NULL, // Parent
NULL, // Menu, must be null hInstance, // Application instance NULL); // Pointer to create // parameters if (!IsWindow (hWnd)) return 0; // Fail code if not created.
圖 4-12 Evc++建立的初始設定以及註冊視窗類別
當 程 式 經 過 這 些 相 關 設 定 跟 註 冊 後 , 將 會 到 WinMain 函 式 , 並 進 入 GetMesssage 訊息回圈,程式將會在此接收觸發訊息,若沒有訊息,則會在此等 待,所以本程式一開始會利用 fopen( )將英文小寫的資料讀進來,做法如圖 4-13。
由於在嵌入式系統上顯示圖片必須利用 hdc (Handle to a device context) 才可以對 視窗進行繪圖的動作,所以程式接著必須比對按鍵圖片的資料,才能利用 hdc 在 主畫面畫出小寫英文盤面,並且將按鍵資料的型態做轉換,接著就是等待使用者 的觸發。
i=0;
FILE *fp;
fp = fopen("Hard Disk\\input_eng.txt","r"); //開啟英文小寫盤面 設定檔
while(!feof(fp)){
fgets(data[i], 100, fp); // read one line per cycle i++ ;
}
for(j=0;j<=49;j++){ //將按鍵指令轉型態 q[j]=atoi(data[j*2+1]);
}
fclose(fp);
圖 4-13 將設定檔讀進來的程式片段
當 使 用 者 在 本 輸 入 裝 置 的 觸 碰 螢 幕 上 按 下 按 鍵 時 , 將 會 觸 發 DoLButtonDownMain( ),此函式將會算出使用者按下的按鍵位置並做判斷,若按 下的是一般輸入鍵,本程式會利用 switch 多重選擇結構來做判斷,並將由設定檔 讀進來的按鍵值傳給 sendkey_process( ) ,做法如圖 4-14,接著 sendkey_process( ) 會將按鍵資料傳送至電腦端。若按下的是盤面切換鍵,則會呼叫 Clr_Screen( ),
清除畫面並根據 DoLButtonDownMain( )判斷出的按鍵位置,將對應盤面的設定檔 讀進來並做重畫的動作。接著程式將回到 GetMesssage 訊息回圈等待使用者的觸 發。
switch(Mouse_final) { // Mouse_final 是由 case 1: DoLButtonDownMain( ) ParPortInit(); 算出來的位置
sendkey_process(q[0]); //q[0]:由設定檔讀進來的 break; 按鍵資料
case 2:
ParPortInit();
sendkey_process(q[1]);
break;
case 3:
ParPortInit();
sendkey_process(q[2]);
break;
‧ ‧
‧ }
圖 4-14 判斷並送出資料的 switch case 程式片段