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