第三章 系統架構與實作
3.2 實作原理與方法
一台電腦上所連接的每一抬印表機都有一個專屬的 print queue 來儲存 print jobs,所謂的 print jobs 就是使用者所要列 印的文件,print queue 則是用來儲存這些 jobs 的序列。其實 windows 本身就為使用者提供了一套簡易的 printer manager,我們 所要做的則是一套更適合用來管理網路印表機的軟體。在這邊我們是 以逢甲大學的電腦實習室為藍本,來構思這一套軟體,預計達成目標 如 1-2 所描述。
經過討論,我們發先要達成目標的重點有兩個。第一點,所有 新進的 print job 必須先暫停列印;第二點,管理員要有更改 print jobs 狀態的權力。首先說明第一點,print job 的狀態有三種,分 別是 printing(列印中)、pause(暫停)、ok(就緒),一般情況下,
print jobs 進入 print queue 時的預設狀態是 printing,而 print queue 本身是屬於 FIFO(First In First Out 先進先出)系統,所 以印表機會按照收到 jobs 順序,將 jobs 一一印出,如圖 3-3
圖 3-3 架構說明圖(一)
但這並不是我們所期望的狀況,所以我們加入了一個時間觸動物件,
這個物件會以很短的時間間隔,不斷的去將 print queue 裡的 jobs 狀態修改為 pause,使 job 不會立即印出,如圖 3-4
圖 3-4 架構說明圖(二)
第二點,為了方便管理,管理員必需具備權力修改 jobs 狀態的 能力,另外還有考量到制度修改的便利性(如漲價,特殊列印方式加 價等)我們認為提供管理員:開始、暫停、刪除及修改價格 四項功 能。
開始:使選定的 jobs 恢復可列印狀態 暫停:使選定的 jobs 進入停止狀態 刪除:將選定的 jobs 刪除
修改價格:可更改每列印一頁的單價 以上就是我們程式的整個架構。
3.3 使用函式解說
IADsContainer:
IADsContainer 介面可以使 ADSI 容器物件去產生、刪除和管理其它 Active Directory 物件。容器物件被使用來組織 Active Directory 的階層式架構和直接來代表在檔案系統裡目錄樹的階層式本性。
方法 說明 get_Count 計算 Active Directory objects 數量.
get__NewEnum 取得 enumerator object 介面.
Get/put_Filter 取得/設定階級計算的 filter.
Get/put_Hints 取得/設定讀取屬性.
GetObject 取得 named object 介面.
Create 產生 specified object.
Delete 刪除 specified object.
CopyHere 複製 sever 內部 specified object.
MoveHere 移動 sever 內部 specified object.
IADsPrintJob:
IADsPrintJob 介面可以使 COM(component object model)物件在 Active Directory 管理一般關於印表工作訊息。用
IADsPrintJobOperations 透過網路來管理這個印表工作本身。印表 工作的聚集被任何一個工作佇列管理是可以用
IADsPrintQueueOperatio::PrintJobs 操作。
方法 說明 get_HostPrintQueue 抓取 print queue
get_User 取得 print job 的 user name.
get_UserPath ADsPath name to user object for user submitting the print job.
get_TimeSubmitted Time job submitted to the print queue.
get_TotalPages 取得 print job 的總頁數.
get_Size 取得 print job 的大小.
get/put_Description 取得/設定 print job 說明.
get/put_Priority 取得/設定 print job 的優先權.
get/put_StartTime 取得/設定 print job 的起始時間.
get/put_UntilTime 取得/設定 print job 的完成時間.
get/put_Notify 通知 job 已完成.
get/put_NotifyPath 通知使用者 job 已完成.
IADsPrintQueue:
IADsPrintQueue 介面可以使在 Active Directory 的 COM 物件去管理 網路上印表工作佇列上的資訊。為了列出或修改佇列裡的工作,要用 IADsPrintQueueOperations::PrintJobs擷取在ADSI PrintJob Objects 聚集的介面。
方法 說明 get/put_PrinterPath 取得/設定共享印表機的路徑.
get/put_Model 取得/設定 print queue 的裝置名稱
get/put_Datatype 取得/設定 print queue 處理的資料型 態.
get/put_PrintProcessor 取得/設定 Print processor 與 print queue 連結.
get/put_Description 取得/設定 print queue 說明.
get/put_Location Administrator's description of print queue location.
get/put_StartTime 取得/設定 print queue 起始時間.
get/put_UntilTime 取得/設定 print queue 結束時間.
get/put_DefaultJobPriority 取得/設定放棄 print job 優先權.
get/put_Priority 取得/設定連接裝置的優先權.
get/put_BannerPage 取得/設定標示頁來區分 jobs.
get/put_PrintDevices 取得/設定列印裝置名稱.
get/put_NetAddresses 取得/設定來源位置.
IADsPrintQueueOperations:
IADsPrintQueueOperations 介面可使 Active Directory 裡的 COM 物 件來支援透過網路控制印表工作的屬性和方法。
方法 說明
get_Status 取得 print queue service 狀態.
PrintJobs 恢復介面觀點到指定的物件.
Pause 暫停 print queue 處理程序.
Resume 恢復 print queue 處理程序.
Purge 刪除 print queue 內全部 jobs.
IADsPrintJobOperations:
IADsPrintJobOperations 介面可使 Active Directory 裡的物件支援 經由網路來控制印表工作的方法。
方法 說明
get_Status 取得 print job 的狀態.
get_TimeElapsed 計算已花費的時間.
get_PagesPrinted 計算頁數.
get/put_Position 取得/設定 print job 在 queue 中的序號.
Pause 暫停處理 print job.
Resume 繼續處理 print job.
第四章 心得與討論
2000 與 windows98 的架構差滿多。在開發應用程式時,可要特別注 意,這次的經驗讓我實際體驗到作業平台與應用程式之間的相關性。站請教別人,對方的回答,會讓我們更清楚下一步如何解決問題,去 那裡查相關資料。這時候,再次體驗到,要在資訊界生存,英文真得 要下功夫,否則很難掌握到最新的技術。
而這個專題能順利完成,除了要感謝李維斌老師的指導,最重要 的就是另一位組員勝銘的全力配合,碰到問題時一起討論研究,讓我 們的工作效率加倍,也才能有今天的成果。
4.2 未來展望
隨著科技不斷的進步,人們也不斷地在追求更方便的生活,生活 E 化已經成為全球一致的目標了,當然,我們學校也不例外。這幾年 來學校不斷的推行著 E 化的政策,象徵著資訊與科技的電腦實習教室 必然是改革的首要目標。不只是電腦設備需要更新,一些老舊的制度 方法也應該要跟進,朝著更方便,更節省人力等方向努力。我們的這 個專題可以說是一個開端,將來若能在搭配上學生 IC 卡的應用,還 可再省下人力收費等步驟,雖然這只是一個小細節,但也使整體更向 目標邁進了一步。
附錄 參考資料
參考書籍
1. Windows 2000 網路實用指南,碁峰資訊,2000 作者:戴有煒 2. Windows 2000 Server 企業網路建構實務-Active Directory 篇,博碩
文化,2000 作者:顏逸品
3. Visual Basic 6.0 實戰講座,旗標,1999 作者:王國榮
4. Visual Basic 6.0 技術應用手冊,文魁資訊,1999 作者:王成春、
蕭雅云
參考網站
http://msdn.microsoft.com/
http://forum.vclxx.org/