摘要:分析了分布式會計模擬訓(xùn)練系統(tǒng)在使用中普遍存在的問題,提出了研制會計模擬訓(xùn)練管理系統(tǒng)的需求。會計模擬訓(xùn)練管理系統(tǒng)采用了Client/Server模式,通過安裝在會計訓(xùn)練系統(tǒng)終端的客戶端響應(yīng)總控端控制消息,來實現(xiàn)遠程控制,節(jié)點漫游等功能。研究了管理系統(tǒng)各項功能的實現(xiàn)方法并給出關(guān)鍵代碼,主要應(yīng)用的技術(shù)手段包括:鉤子技術(shù)、進程控制、窗口消息傳遞、屏幕截取、圖像壓縮、數(shù)據(jù)庫讀寫等。
關(guān)鍵詞:會計;模擬訓(xùn)練;網(wǎng)絡(luò);管理;遠程控制
中圖分類號:F23 文獻標(biāo)志碼:A文章編號:1673-291X(2011)22-0089-02
會計模擬訓(xùn)練是會計操作訓(xùn)練的一項重要形式,許多院校都配備了模擬訓(xùn)練器材。會計模擬訓(xùn)練豐富了訓(xùn)練手段,但在訓(xùn)練和使用過程中,也出現(xiàn)了許多需要解決的問題,比如:受訓(xùn)人員對計算機技術(shù)掌握水平偏低。經(jīng)常出現(xiàn)錯誤啟動訓(xùn)練程序以及誤操作破壞系統(tǒng)的問題,使訓(xùn)練不能正常進行。會計模擬訓(xùn)練系統(tǒng)規(guī)模往往較大,但是專門的管理人員很少,在日常維護和使用時,管理人員難以管理。需要實現(xiàn)訓(xùn)練過程監(jiān)控以及訓(xùn)后分析講評。為解決這些高校在使用會計模擬訓(xùn)練器材中遇到的共性問題,只有提供一套技術(shù)解決方案才能較好的解決。根據(jù)這個需求,本文設(shè)計并實現(xiàn)了會計模擬訓(xùn)練管理系統(tǒng)。
一、系統(tǒng)功能組成與流程
會計模擬訓(xùn)練管理系統(tǒng)分為總控端和客戶端,系統(tǒng)功能包括網(wǎng)絡(luò)遠程控制、故障監(jiān)控和節(jié)點漫游,各部分功能又由相關(guān)模塊組成。系統(tǒng)的總控端由控制、信息反饋和視頻接收三部分組成;客戶端由各功能模塊組成??偪囟税l(fā)布控制消息,各客戶端接收并解析后獲得相關(guān)信息,然后按照命令執(zhí)行相應(yīng)功能。訓(xùn)練程序運行過程中,客戶端負(fù)責(zé)監(jiān)控其執(zhí)行情況。
二、系統(tǒng)實現(xiàn)
(一)遠程控制
1.系統(tǒng)控制
會計模擬訓(xùn)練管理系統(tǒng)控制的主要目的是鎖定屏幕,防止受訓(xùn)人員誤操作損壞系統(tǒng)。實現(xiàn)鎖屏功能需要在動態(tài)鏈接庫中調(diào)用HOOK函數(shù),然后在HOOK處理函數(shù)中攔截鍵盤和鼠標(biāo)消息,同時隱藏任務(wù)欄和桌面。鏈接庫的部分代碼如下:
::ShowWindow(::FindWindow(“Shell_TrayWnd”,NULL),SW_HIDE);//隱藏任務(wù)欄
::ShowWindow(::FindWindow(“Progman”,NULL),SW_
HIDE);//隱藏桌面
hHook=SetWindowsHookEx(WH_KEYBOARD_LL,myLow
LevelKeyboardProc,hAppInstance,0);
hHookmouse=SetWindowsHookEx(WH_MOUSE_LL,myLow
LevelMouseProc,hAppInstance,0);
LRESULT CALLBACK myLowLevelMouseProc (INT nCode,
WPARAM wParam,LPARAM lParam) /*鼠標(biāo)處理*/
{return 1;}
LRESULT CALLBACK myLowLevelKeyboardProc (INT nCode,
WPARAM wParam,LPARAM lParam) /*鍵盤處理*/
{ KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
BOOL bControlKeyDown = 0;
BOOL bDelete=0;
switch (nCode)
{case HC_ACTION:
{//此處處理鍵盤消息代碼,對于需要處理的鍵盤消息,調(diào)用CallNextHookEx,其他消息直接返回
break;}
//其他處理
return 1;}
return 1; }
在需要解鎖時執(zhí)行如下代碼:
UnhookWindowsHookEx(hHook);
UnhookWindowsHookEx(hHookmouse);
::ShowWindow(::FindWindow(“Shell_Tray Wnd”,NULL),SW_SHOW);//任務(wù)欄
::ShowWindow(::FindWindow(“Progman”,NULL),SW_
SHOW);//桌面
2.角色控制
(1)角色選擇。對于會計模擬訓(xùn)練系統(tǒng),數(shù)字仿真逐漸成為主流,往往需要一個硬件平臺上運行多套訓(xùn)練軟件。我們把一套訓(xùn)練程序視為一種角色,訓(xùn)練前由總控端自由選擇各節(jié)點的角色。在運行時,總控端與各節(jié)點之間維持著一個協(xié)議,各節(jié)點在本地保存有所有角色運行所需的全部資源。節(jié)點接收角色協(xié)議后,按照協(xié)議運行或退出相應(yīng)訓(xùn)練程序。這樣總控端就實現(xiàn)了各節(jié)點角色的選擇。
(2)角色運行。管理系統(tǒng)的客戶端接收角色協(xié)議后,啟動程序的代碼如下:
CreateProcess(strModulename,//運行程序模塊
NULL,NULL,NULL,F(xiàn)ALSE,
0,NULL,strDir,//路徑
StartupInfo,pProcessInfo)
(3)角色退出。當(dāng)客戶端發(fā)現(xiàn)運行中角色列表與總控端協(xié)議不同時,或者總控端確定退出訓(xùn)練時,客戶端需要終止程序。終止過程分兩步:第一步,首先找到該進程對應(yīng)主窗口發(fā)送退出消息;第二步,如果等待一段時間后仍然沒有退出,則通過API函數(shù)TerminateProcess()將其強行關(guān)閉。
(二)節(jié)點漫游
在大型會計模擬訓(xùn)練系統(tǒng)中,需要在導(dǎo)演部對關(guān)鍵訓(xùn)練節(jié)點實施監(jiān)控。這樣有利于對訓(xùn)練情況的掌握和信息集中。方法為總控端向漫游節(jié)點客戶端發(fā)出指令,由客戶端連續(xù)發(fā)送該節(jié)點訓(xùn)練界面到總控端顯示。截屏的部分代碼如下:
Void CaptureScreen()
{
intnScreenWidth = GetSystemMetrics(SM_CXSCREEN);
intnScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HWNDhDesktopWnd = GetDesktopWindow();
HDChDesktopDC = GetDC(hDesktopWnd);
HBITMAP hCaptureBitmap =CreateCompatibleBitmap(hDe-
sktopDC,nScreenWidth,nScreenHeight);
SelectObject(hCaptureDC,hCaptureBitmap);
BitBlt(hCaptureDC,0,0,nScreenWidth,nScreenHeight,hDesktopDC,0,0,SRCCOPY);
SaveandSendCapturedBitmap(hCaptureBitmap); //保存并發(fā)送圖像
ReleaseDC(hDesktopWnd,hDesktopDC);
DeleteDC(hCaptureDC);
DeleteObject(hCaptureBitmap);
}
為了最大限度的壓縮數(shù)據(jù),減輕網(wǎng)絡(luò)負(fù)荷,提高圖畫幀數(shù),函數(shù)利用CxImage::Encode()將圖像以JPEG2000格式導(dǎo)出至臨時創(chuàng)建的內(nèi)存緩沖區(qū),然后將內(nèi)存數(shù)據(jù)通過局域網(wǎng)發(fā)送到總控端。最后總控端調(diào)用CxImage::Decode()讀入內(nèi)存圖像數(shù)據(jù)并進行顯示。
三、結(jié)束語
通過長期的實踐證明,該系統(tǒng)能大大減輕管理人員的工作強度,降低了系統(tǒng)故障率,解決了會計模擬訓(xùn)練在集中管理、系統(tǒng)安全、訓(xùn)練監(jiān)控、效果評判方面的需求。
參考文獻:
[1]張量,詹國華,袁貞明.計算機遠程控制的實現(xiàn)與應(yīng)用[J].計算機應(yīng)用,2002,(4):62-66.
[2]Davide Pizzolato.CxImage[EB/OL].http://www.codeproject.com//KB/graphics/cximage.aspx.[責(zé)任編輯 陳麗敏]