陳 超
[摘要]通過編程的方式實(shí)現(xiàn)一個鍵鼠狀態(tài)實(shí)時顯示工具,該工具可以在虛擬鍵盤和虛擬鼠標(biāo)上實(shí)時顯示教師的操作,解決在教學(xué)過程教師與學(xué)生之間的信息不對稱及理論與實(shí)際操作相脫節(jié)的問題,同時還探討下一步所要研究的內(nèi)容。
[關(guān)鍵詞]實(shí)時顯示 圖形化窗口 多媒體教學(xué)
中圖分類號:TP3獻(xiàn)標(biāo)識碼:A文章編號:1671-7597(2009)0810069-01
一、引言
在講授計算機(jī)操作類知識時,教師經(jīng)常會有這樣的體會:對于一些實(shí)際操作,學(xué)生在課堂上似乎已經(jīng)完全掌握,但在上機(jī)實(shí)驗(yàn)時卻問題百出。之所以出現(xiàn)這樣的問題,并不是教師沒有認(rèn)真?zhèn)湔n,也不是學(xué)生在課堂上沒有認(rèn)真聽講,而是在教師與學(xué)生之間出現(xiàn)了信息不對稱的問題。教師在講授某個具體操作時,面對的是實(shí)體鍵盤、實(shí)體鼠標(biāo),常常會忽視學(xué)生面前沒有鍵盤、鼠標(biāo)這一事實(shí),這時即使教師講解得非常詳細(xì),學(xué)生也很難將操作步驟與實(shí)際的操作手法聯(lián)系在一起。為解決這一問題,本文通過編程的方式實(shí)現(xiàn)了一個鍵鼠狀態(tài)實(shí)時顯示工具,該工具可以將教師的每個操作都實(shí)時地顯示在虛擬鍵盤和虛擬鼠標(biāo)上,學(xué)生可以在記住操作步驟的同時也記住對應(yīng)的操作手法。該工具的實(shí)現(xiàn)過程詳述如下。
二、鍵鼠狀態(tài)實(shí)時顯示工具的實(shí)現(xiàn)過程
為了監(jiān)控系統(tǒng)的鍵盤、鼠標(biāo)狀態(tài),開發(fā)時首先注冊了WH_KEYBOARD及WH_MOUSE兩個系統(tǒng)掛鉤。其中,WH_MOUSE系統(tǒng)掛鉤負(fù)責(zé)鼠標(biāo)信息的預(yù)處理,在這里鼠標(biāo)信息將被轉(zhuǎn)發(fā)到圖形化窗口;WH_KEYBOARD系統(tǒng)掛鉤負(fù)責(zé)鍵盤信息的預(yù)處理,用于監(jiān)控教師的每個按鍵操作,在這里對Windows系統(tǒng)中的組合鍵進(jìn)行了特殊處理,如在監(jiān)控復(fù)制組合鍵“Ctrl+C”、粘貼組合鍵“Ctrl+V”時,除了監(jiān)控正常的鍵位信息外,還要記錄系統(tǒng)功能鍵的實(shí)時狀態(tài),其實(shí)現(xiàn)代碼如下:
BOOL bCtrlKeyDown = GetAsyncKeyState(VK_CONTROL)>>((sizeof(S
HORT) * 8) - 1);
BOOL bAltKeyDown = GetAsyncKeyState(VK_MENU)>>((sizeof(SHORT)
* 8) - 1);
BOOL bShiftKeyDown = GetAsyncKeyState(VK_SHIFT)>>((sizeof(SH
ORT) * 8) - 1);
if (lParam >= 0)
{
HWND hWnd = ::FindWindow(NULL, "鍵鼠狀態(tài)實(shí)時顯示工具");
if (::IsWindow(hWnd))
{
LPARAM lpMap = 0;
if (bCtrlKeyDown)
lpMap |= CTRL_MAP;
if (bAltKeyDown)
lpMap |= ALT_MAP;
if (bShiftKeyDown)
lpMap |= SHIFT_MAP;
::PostMessage( hWnd, WM_MYKEY, wParam,lpMap);
}
}
在這里,首先使用GetAsyncKeyState函數(shù)分別獲取了Ctrl、Alt、Shift鍵的當(dāng)前狀態(tài),并保存在bCtrlKeyDown、bAltKeyDown、bShiftKeyDo
wn變量中,然后將這三個變量組合后連同普通鍵位信息一起轉(zhuǎn)發(fā)到圖形化窗口。
當(dāng)圖形化窗口接收到傳遞過來的鍵盤、鼠標(biāo)信息后,就可以做出相應(yīng)的處理,在這里有兩種處理方案:1.一種方案是每次收到鍵鼠信息后,圖形化窗口立刻進(jìn)行處理。這種方案能實(shí)現(xiàn)真正意義上的實(shí)時顯示,但是如果教師對鍵盤、鼠標(biāo)的操作很頻繁,大量轉(zhuǎn)發(fā)過來的鍵鼠消息將會阻礙圖形化窗口對其它消息的處理,計算機(jī)的響應(yīng)速度有可能會變慢;2.另一種方案是每次收到鍵鼠信息后,只替換原有的信息存檔,而每隔一定的時間間隔,再從信息存檔中取出鍵鼠信息進(jìn)行顯示。當(dāng)時間間隔設(shè)置得較小時,這種方案的顯示效果同方案一的顯示效果基本沒有區(qū)別,同時還將避免占用過多的CPU處理時間。本文中的鍵鼠狀態(tài)實(shí)時顯示工具基于第二種方案進(jìn)行實(shí)現(xiàn),其流程圖如圖1所示。
三、鍵鼠狀態(tài)實(shí)時顯示工具的應(yīng)用實(shí)例
本文所實(shí)現(xiàn)的鍵鼠狀態(tài)實(shí)時顯示工具已在教學(xué)實(shí)踐中得到了應(yīng)用,并收到了良好的反饋。圖2展示的是其圖形化窗口,該窗口可被擺放在屏幕的任何位置,并可設(shè)置為最前端顯示窗口。在講解復(fù)制操作時,如果教師按下了“Ctrl+C”組合鍵,則虛擬鍵盤上的相應(yīng)鍵位將高亮顯示,如圖2(a)所示。如果教師在操作過程中按下了鼠標(biāo)左鍵,則虛擬鼠標(biāo)上的左鍵也將被高亮顯示,如圖2(b)所示。基于該工具,學(xué)生在課堂上仿佛也直接面對著鍵盤和鼠標(biāo),教學(xué)效果大為改善。
四、結(jié)語
本文所開發(fā)的鍵鼠狀態(tài)實(shí)時顯示工具雖然已部分解決了在課堂教學(xué)過程中,教師與學(xué)生之間信息不對稱及理論與實(shí)際操作相脫節(jié)的問題,還仍然存在著一些需要進(jìn)一步研究的內(nèi)容。如現(xiàn)在的圖形化界面會遮擋住屏幕的部分區(qū)域,有時會影響教師的操作,下一步可以將其設(shè)置為半透明模式,這樣既能實(shí)時顯示鍵鼠狀態(tài),又不會影響教師的操作。同時還可以將教師的操作記錄下來并保存為文件,學(xué)生在課下可以通過播放該文件進(jìn)行相關(guān)操作的自學(xué)。
參考文獻(xiàn):
[1]劉靜華、王永生等,計算機(jī)繪圖[M].北京:高等教育出版社,2006.5.