




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、111章章導(dǎo)讀第第 家庭視頻監(jiān)控系統(tǒng)(C# 4.0+Microsoft Access 2003+視頻采集卡實現(xiàn))本章使用C#4.0+視頻采集卡制作一個簡單的家庭視頻監(jiān)控系統(tǒng),并將系統(tǒng)劃分為幾個模塊進(jìn)行詳細(xì)講解。通過對這些模塊的學(xué)習(xí),讀者完全可以掌握視頻監(jiān)控系統(tǒng)的開發(fā)技術(shù)及原理。筆者通過簡潔的程序代碼和通俗的技術(shù)講解,將家庭視頻監(jiān)控系統(tǒng)的奧秘完全展示在讀者面前,使讀者可以更輕松地理解其中的內(nèi)容。通過閱讀本章,讀者可以學(xué)習(xí)到:: 了解單元測試及常用單元測試工具: 了解Access 2003數(shù)據(jù)庫和數(shù)據(jù)表的創(chuàng)建: 掌握如何在WinForms程序中操作Access 2003數(shù)據(jù)庫: 掌握視頻采集卡的使
2、用: 掌握Pelco-D協(xié)議: 掌握如何使用Pelco-D協(xié)議進(jìn)行云臺控制: 掌握如何讀取和寫入注冊表信息1.1 開 發(fā) 背 景XXX家庭為了緊隨逐漸加快的生活節(jié)奏,并適應(yīng)不斷增加的工作壓力,現(xiàn)需要委托其他單位開發(fā)一個視頻監(jiān)控系統(tǒng)。該系統(tǒng)的主要作用是:當(dāng)用戶外出時,可以使用該系統(tǒng)監(jiān)控家里的各種情況,并可以將家里的變化情況錄制成視頻文件,以供后期查看。 系 統(tǒng) 分 析1.2.1 需求分析隨著生活節(jié)奏的加快,工作壓力的增加,人們用于照顧家庭的時間越來越少。年幼孩子的看護、年邁父母的照管、家庭財產(chǎn)的防竊等一系列問題經(jīng)常纏繞著人們,成為人們忙碌中揮之不去的牽掛。本章使用C#語言結(jié)合視頻采集卡制作了一個
3、簡單的家庭視頻監(jiān)控系統(tǒng),以解決上面出現(xiàn)的各種問題。 可行性分析根據(jù)GB856788計算機軟件產(chǎn)品開發(fā)文件編制指南中可行性分析的要求,制定可行性研究報告如下。1引言 編寫目的為了給企業(yè)的決策層提供是否進(jìn)行項目實施的參考依據(jù),現(xiàn)以文件的形式分析項目的風(fēng)險、項目需要的投資與效益。 背景XXX家庭為了在外出時可以監(jiān)控家里的各種情況,現(xiàn)委托相關(guān)公司開發(fā)一個視頻監(jiān)控系統(tǒng),項目名稱為家庭視頻監(jiān)控系統(tǒng)。2可行性研究的前提 要求家庭視頻監(jiān)控系統(tǒng)要求能夠提供視頻監(jiān)控、快照、錄像和自動監(jiān)控等功能。 目標(biāo)家庭視頻監(jiān)控系統(tǒng)的主要目標(biāo)是保證家里的安全。 條件、假定和限制項目需要在1個月內(nèi)交付用戶使用,系統(tǒng)分析人員需要兩天
4、內(nèi)到位,用戶需要3天時間確認(rèn)需求分析文檔,去除其中可能出現(xiàn)的問題,例如用戶可能臨時有事,占用5天時間確認(rèn)需求分析。那么程序開發(fā)人員需要在23天內(nèi)進(jìn)行系統(tǒng)設(shè)計、程序編碼、系統(tǒng)測試、程序調(diào)試和系統(tǒng)打包部署工作,期間還包括員工每周的休息時間。3投資及效益分析 支出根據(jù)系統(tǒng)的規(guī)模及項目的開發(fā)周期(1個月),公司決定投入3個人。此外,公司將直接支付3萬元的工資及各種福利待遇。在項目安裝及調(diào)試階段,用戶培訓(xùn)、員工出差等費用支出需要1萬元。在項目維護階段,預(yù)計需要投入1.5萬元的資金。累計項目投入需要5.5萬元資金。 收益用戶提供項目資金10萬元。對于項目運行后進(jìn)行的改動,采取協(xié)商的原則,根據(jù)改動規(guī)模額外提
5、供資金。因此從投資與收益的效益比上,公司可以獲得4.5萬元的利潤。項目完成后,會給公司提供資源儲備,包括技術(shù)、經(jīng)驗的積累,其后再開發(fā)類似項目時,可以極大地縮短項目開發(fā)周期。4結(jié)論根據(jù)前面的分析,在技術(shù)上不會存在問題,因此項目延期的可能性很小。在效益上公司投入3個人、1個月的時間獲利4.5萬元,比較可觀;在公司今后發(fā)展上可以儲備軟件開發(fā)的經(jīng)驗和資源,因此認(rèn)為該項目可以開發(fā)。 編寫項目計劃書根據(jù)GB856788計算機軟件產(chǎn)品開發(fā)文件編制指南中的項目開發(fā)計劃要求,結(jié)合單位實際情況,設(shè)計項目計劃書如下。1引言 編寫目的為了保證項目開發(fā)人員按時保質(zhì)地完成預(yù)訂目標(biāo),更好地了解項目實際情況,按照合理的順序開
6、展工作,現(xiàn)以書面的形式將項目開發(fā)生命周期中的項目任務(wù)范圍、項目團隊組織結(jié)構(gòu)、團隊成員的工作責(zé)任、團隊內(nèi)外溝通協(xié)作方式、開發(fā)進(jìn)度、檢查項目工作等內(nèi)容描述出來,作為項目相關(guān)人員之間的統(tǒng)一約定和項目生命周期內(nèi)的所有項目活動的行動基礎(chǔ)。 背景家庭視頻監(jiān)控系統(tǒng)是由XXX家庭委托我公司開發(fā)的小型視頻監(jiān)控系統(tǒng),主要用于監(jiān)控家里的人員活動情況,項目周期為1個月。項目背景規(guī)劃如表1.1所示。表1.1 項目背景規(guī)劃項 目 名 稱項目委托單位任務(wù)提出者項目承擔(dān)部門家庭視頻監(jiān)控系統(tǒng)XXX家庭王經(jīng)理研發(fā)部門測試部門2概述 項目目標(biāo)項目目標(biāo)應(yīng)當(dāng)符合SMART原則,把項目要完成的工作用清晰的語言描述出來。家庭視頻監(jiān)控系統(tǒng)的
7、項目目標(biāo)如下:家庭視頻監(jiān)控系統(tǒng)的主要目的是隨時對家里的情況進(jìn)行監(jiān)控,并可以由用戶靈活控制監(jiān)控方向。另外,用戶還可以設(shè)置自動監(jiān)控、對監(jiān)控畫面進(jìn)行快照和錄像等。 應(yīng)交付成果項目開發(fā)完成后,交付的內(nèi)容如下: 以光盤的形式提供家庭視頻監(jiān)控的源程序、系統(tǒng)數(shù)據(jù)庫文件和系統(tǒng)使用說明書。 系統(tǒng)發(fā)布后,進(jìn)行無償維護和服務(wù)6個月,超過6個月進(jìn)行系統(tǒng)有償維護與服務(wù)。 項目開發(fā)環(huán)境開發(fā)本項目所用的操作系統(tǒng)可以是Windows XP、Windows Server 2003或Windows 7,開發(fā)工具為Visual Studio 2010+視頻采集卡,數(shù)據(jù)庫采用Microsoft Access 2003。 項目驗收方式
8、與依據(jù)圖1.1 項目團隊組織結(jié)構(gòu)圖項目驗收分為內(nèi)部驗收和外部驗收兩種方式。在項目開發(fā)完成后,首先進(jìn)行內(nèi)部驗收,由測試人員根據(jù)用戶需求和項目目標(biāo)進(jìn)行驗收。項目在通過內(nèi)部驗收后交給用戶進(jìn)行外部驗收,驗收的主要依據(jù)為需求規(guī)格說明書。3項目團隊組織 組織結(jié)構(gòu)為了完成家庭視頻監(jiān)控系統(tǒng)的開發(fā),公司組建了一個臨時的項目團隊,由項目經(jīng)理、軟件工程師和測試人員構(gòu)成,如圖1.1所示。 人員分工為了明確項目團隊中每個人的任務(wù)分工,現(xiàn)制定人員分工表,如表1.2所示。表1.2 人員分工表姓 名技 術(shù) 水 平所 屬 部 門角 色工 作 描 述王某MBA項目開發(fā)部項目經(jīng)理負(fù)責(zé)項目的前期分析、策劃,項目開發(fā)進(jìn)度的跟蹤,項目質(zhì)
9、量的檢查劉某高級軟件工程師項目開發(fā)部軟件工程師負(fù)責(zé)系統(tǒng)功能分析、軟件設(shè)計與編碼張某中級系統(tǒng)測試工程師項目開發(fā)部測試人員對軟件進(jìn)行測試、編寫軟件測試文檔1.3 系 統(tǒng) 設(shè) 計 系統(tǒng)目標(biāo)本系統(tǒng)屬于小型的家庭視頻監(jiān)控系統(tǒng),可以對指定的區(qū)域進(jìn)行適時監(jiān)控。本系統(tǒng)主要實現(xiàn)以下 目標(biāo): 系統(tǒng)采用人機交互的方式,界面美觀友好,視頻監(jiān)控靈活、方便。 靈活控制云臺,以監(jiān)控某一區(qū)域的各個角落。 適時對監(jiān)控畫面進(jìn)行快照和錄像操作。 選擇觀看已經(jīng)錄制的視頻文件。 完善的系統(tǒng)注冊功能。 系統(tǒng)最大限度地實現(xiàn)易維護性和易操作性。 系統(tǒng)功能結(jié)構(gòu)家庭視頻監(jiān)控系統(tǒng)的功能結(jié)構(gòu)如圖1.2所示。圖1.2 家庭視頻監(jiān)控系統(tǒng)功能結(jié)構(gòu)圖 業(yè)務(wù)
10、流程圖家庭視頻監(jiān)控系統(tǒng)的業(yè)務(wù)流程圖如圖1.3所示。圖1.3 家庭視頻監(jiān)控系統(tǒng)業(yè)務(wù)流程圖 系統(tǒng)預(yù)覽家庭視頻監(jiān)控系統(tǒng)由多個程序窗體組成,下面僅列出幾個典型窗體,其他窗體參見光盤中的源程序。系統(tǒng)登錄窗體如圖1.4所示,主要用于實現(xiàn)用戶登錄。主窗體如圖1.5所示,主要用于實現(xiàn)視頻監(jiān)控及云臺控制等功能。 圖1.4 系統(tǒng)登錄窗體(光盤TM01) 圖1.5 主窗體(光盤TM01)監(jiān)控管理窗體如圖1.6所示,主要用于添加、修改和刪除用戶功能。軟件注冊窗體如圖1.7所示,主要用于實現(xiàn)軟件注冊功能。 圖1.6 監(jiān)控管理窗體(光盤TM01) 圖1.7 軟件注冊窗體(光盤TM01) 程序運行環(huán)境本系統(tǒng)的程序運行環(huán)境具
11、體如下。 系統(tǒng)開發(fā)平臺:Microsoft Visual Studio 2010。 系統(tǒng)開發(fā)語言:C# 4.0。 數(shù)據(jù)庫管理系統(tǒng)軟件:Microsoft Access數(shù)據(jù)庫。 運行平臺:Windows XP(SP3)/Windows Server 2003(SP2)/Windows 7。 運行環(huán)境:Microsoft.NET Framework SDK v4.0。 分辨率:最佳效果1024768像素。 編碼規(guī)范1數(shù)據(jù)庫命名規(guī)范 數(shù)據(jù)庫數(shù)據(jù)庫命名以字母“db”開頭(小寫),后面加數(shù)據(jù)庫相關(guān)英文單詞或縮寫。下面將舉例進(jìn)行說明,如表1.3所示。 數(shù)據(jù)庫命名數(shù)據(jù)庫名稱描 述db_VWMS視頻監(jiān)控管理系
12、統(tǒng)數(shù)據(jù)庫 數(shù)據(jù)表數(shù)據(jù)表命名以字母“tb”開頭(小寫),后面加數(shù)據(jù)表相關(guān)英文單詞或縮寫。下面將舉例進(jìn)行說明,如表1.4所示。表1.4 數(shù)據(jù)表命名數(shù)據(jù)表名稱描 述tb_admin管理員信息表 字段字段一率采用英文單詞或詞組(可利用翻譯軟件)命名,如找不到專業(yè)的英文單詞或詞組,可以用相同意義的英文單詞或詞組代替。下面將舉例進(jìn)行說明,如表1.5所示。表1.5 字段命名字 段 名 稱描 述name名字id密碼 視圖視圖命名以字母view開頭(小寫),后面加表示該視圖作用的相關(guān)英文單詞或縮寫。下面將舉例進(jìn)行說明,如表1.6所示。表1.6 視圖命名視 圖 名 稱描 述view_AdminInfo視圖全名vi
13、ew視圖AdminInfo查看管理員信息 存儲過程存儲過程命名以字母proc開頭(小寫),后面加表示該存儲過程作用的相關(guān)英文單詞或縮寫。下面將舉例進(jìn)行說明,如表1.7所示。表1.7 存儲過程命名存儲過程名稱描 述proc_Login存儲過程全名proc存儲過程Login實現(xiàn)登錄功能 觸發(fā)器觸發(fā)器命名以字母trig開頭(小寫),后面加表示該觸發(fā)器作用的相關(guān)英文單詞或縮寫。下面將舉例進(jìn)行說明,如表1.8所示。表1.8 觸發(fā)器命名觸發(fā)器名稱描 述trig_inAdmin觸發(fā)器全名trig觸發(fā)器inAdmin插入管理員信息2程序代碼命名規(guī)范(1)變量及對象名稱定義規(guī)則根據(jù)不同的程序需要,編寫代碼時都需
14、要定義一定的變量或常量。下面介紹一種常見的變量及常量命名規(guī)則,如表1.9所示。 變量及常量命名規(guī)則變量及常量級別命 名 規(guī) 則舉 例模塊級變量M_+數(shù)據(jù)類型簡寫+變量名稱M_int_xx全局變量G_+數(shù)據(jù)類型簡寫+變量名稱G_int_xx局部變量P_+數(shù)據(jù)類型簡寫+變量名稱P_dbl_sl模塊級常量Mc_+數(shù)據(jù)類型簡寫+常量名稱Mc_str_xx全局常量Gc_+數(shù)據(jù)類型簡寫+常量名稱Gc_str_xx過程級常量Pc_+數(shù)據(jù)類型簡寫+常量名稱Pc_str_xx(2)數(shù)據(jù)類型簡寫規(guī)則程序中定義常量、變量或方法等內(nèi)容時,常常需要指定類型。下面介紹一種常見的數(shù)據(jù)類型簡寫規(guī)則,如表1.10所示。表1.1
15、0 數(shù)據(jù)類型簡寫規(guī)則數(shù) 據(jù) 類 型簡 寫整型int字符串str布爾型bl短整型sint長整型lint單精度浮點型flt雙精度浮點型dbl字節(jié)型bt(3)控件命名規(guī)則所有的對象名稱都為自然名稱的拼音簡寫,出現(xiàn)沖突可采用不同的簡寫規(guī)則。另外,在編碼過程中涉及不到編碼的控件,其名稱可以取默認(rèn)名稱??丶?guī)則如表1.11所示。表1.11 控件命名規(guī)則控 件縮 寫 形 式FormfrmTextBoxtxtButtonbtnComboBoxcboxLabellabDataGridViewdgvListBoxlb續(xù)表 控 件縮 寫 形 式TimertmrCheckBoxchbLinkLabelllblRi
16、chTextBoxrtboxCheckedListBoxclboxRadioButtonrbtnNumericUpDownnudownPanelplGroupBoxgboxTabControltclErrorProvidereproImageListilistHelpProviderhproListViewlvTreeViewtvPictrueBoxpboxNotifyIconniconDateTimePickerdtpickerMonthCalendarmcalenToolTipttipProgressBarpbar 數(shù)據(jù)庫設(shè)計一套完善的系統(tǒng)離不開數(shù)據(jù)庫的設(shè)計,數(shù)據(jù)庫設(shè)計的好壞直接影響系統(tǒng)運
17、行的效率,所以在制作某個系統(tǒng)之前,首先要根據(jù)項目的成本以及整個系統(tǒng)的信息量去選擇數(shù)據(jù)庫,然后根據(jù)系統(tǒng)的具體要求和功能去設(shè)計數(shù)據(jù)庫。1數(shù)據(jù)庫分析在家庭視頻監(jiān)控系統(tǒng)中,因為系統(tǒng)的信息量不是很大,并且系統(tǒng)的項目成本不高,數(shù)據(jù)庫主要用來存儲用戶登錄系統(tǒng)的名字和密碼,因此對數(shù)據(jù)庫的要求并不是很高,所以本系統(tǒng)采用MicrosoftAccess 2003作為后臺數(shù)據(jù)庫,數(shù)據(jù)庫命名為db_VWMS,其中包含了一張數(shù)據(jù)表,用于存儲用戶登錄信息。詳細(xì)信息如圖1.8所示。2數(shù)據(jù)庫概念設(shè)計在系統(tǒng)開發(fā)過程中,數(shù)據(jù)庫設(shè)計占有重要地位,數(shù)據(jù)庫設(shè)計的原則是根據(jù)系統(tǒng)的整體需求而定的。例如,在本系統(tǒng)中,為了增加系統(tǒng)的安全性,每個
18、用戶首先都要通過系統(tǒng)登錄模塊的驗證才能進(jìn)入主窗體,這時,就要在數(shù)據(jù)庫中創(chuàng)建一個存儲登錄名和登錄密碼的管理員基本信息表。管理員基本信息實體E-R圖如圖1.9所示。 圖1.8 數(shù)據(jù)庫db_ VWMS中的所有表 圖1.9 管理員信息實體E-R圖3數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計根據(jù)設(shè)計好的E-R圖在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表,本系統(tǒng)中只有一個tb_admin表,主要用于保存管理員登錄的基本信息,其結(jié)構(gòu)如表1.12所示。表1.12 管理員登錄信息表字 段 名數(shù) 據(jù) 類 型主 鍵描 述name文本否登錄用戶名pwd文本否登錄密碼圖1.10 項目文件夾組織結(jié)構(gòu) 文件夾組織結(jié)構(gòu)每個項目都會有相應(yīng)的文件夾組織結(jié)構(gòu),如果項目中窗體數(shù)
19、量很多,可以將所有的窗體及資源放在不同的文件夾中。如果項目中窗體不是很多,可以將圖片、公共類或者程序資源文件放在相應(yīng)的文件夾中,而窗體可以直接放在項目根目錄下。家庭視頻監(jiān)控系統(tǒng)就是按照后者的文件夾組織結(jié)構(gòu)排列的,如圖1.10所示。1.4 公共類設(shè)計在開發(fā)項目中以類的形式來組織、封裝一些常用的方法和事件,不僅可以提高代碼的重用率,也大大方便了代碼的管理。本系統(tǒng)中創(chuàng)建了5個公共類,分別為DataCon類、DataOperate類、SoftReg類、VideoOperate類和PelcoD類。其中,DataCon類用來訪問Microsoft Access 2003數(shù)據(jù)庫;DataOperate類用于
20、對MicrosoftAccess2003數(shù)據(jù)庫進(jìn)行操作;SoftReg類用來實現(xiàn)生成機器碼和系統(tǒng)注冊功能;VideoOperate類用來封裝視頻采集卡中的各種枚舉和API函數(shù);PelcoD類用來實現(xiàn)Pelco-D協(xié)議。在程序開發(fā)時,窗體只需調(diào)用相應(yīng)的方法即可。下面分別對這5個類中的方法進(jìn)行詳細(xì)介紹。 DataCon類在DataCon類中,因為本系統(tǒng)使用的是MicrosoftAccess2003數(shù)據(jù)庫,所以在命名空間區(qū)域內(nèi)引用using來連接數(shù)據(jù)庫。該類中定義了一個getCon()方法,用來使用OleDbConnection對象連接Access數(shù)據(jù)庫。getCon()方法的主要代碼如下:例程01
21、 代碼位置:光盤TM01VWMSVWMSCommonClassDataCon.cspublic OleDbConnection getCon() string strDPath = Application.StartupPath; string strDataSource = Provider=Microsoft.Jet.OLEDB.4.0;Data Source= +strDPath.Substring(0,strDPath.LastIndexOf().Substring(0,strDPath.Substring(0,strDPath. LastIndexOf().LastIndexOf()
22、 + DataBasedb_VWMS.mdb;u OleDbConnection oledbCon = new OleDbConnection(strDataSource); return oledbCon;U代碼貼士u OleDbConnection:用來連接OLEDB數(shù)據(jù)源。 DataOperate類在DataOperate類中,首先實例化datacon、oledbcon、oledbcom、oledbda和ds5個對象。其中,datacon對象用來調(diào)用自定義類DataCon類中的方法;oledbcon對象用來連接Access數(shù)據(jù)庫;oledbcom對象用來執(zhí)行Command命令語句;ole
23、dbda對象表示用于填充DataSet數(shù)據(jù)集和更新Access數(shù)據(jù)庫的一組數(shù)據(jù)命令和一個數(shù)據(jù)庫連接;ds對象為數(shù)據(jù)集。實例化datacon、oledbcon、oledbcom、oledbda和ds5個對象的代碼如下:例程02 代碼位置:光盤TM01VWMSVWMSCommonClassDataOperate.csDataCon datacon = new DataCon();/實例化DataCon類對象OleDbConnection oledbcon; /實例化OleDbConnection類對象,用來連接Access數(shù)據(jù)庫OleDbCommand oledbcom; /實例化OleDbCom
24、mand類對象,用來執(zhí)行SQL語句OleDbDataAdapter oledbda; /實例化OleDbDataAdapter類對象,用來執(zhí)行SQL語句,并記錄結(jié)果集DataSet ds; /DataSet數(shù)據(jù)集DataOperate類中自定義了getCom()和getDs()兩個方法,下面對它們分別進(jìn)行介紹。1getCom()方法getCom()方法為無返回值類型的自定義方法,主要用來執(zhí)行SQL語句。代碼如下:例程03 代碼位置:光盤TM01VWMSVWMSCommonClassDataOperate.cspublic void getCom(string strCon) oledbcon
25、= datacon.getCon(); oledbcom = new OleDbCommand(strCon, oledbcon);u oledbcon.Open();v oledbcom.ExecuteNonQuery();w oledbcon.Close();U代碼貼士u Open():該方法用來打開數(shù)據(jù)庫連接。v ExecuteNonQuery():該方法用于執(zhí)行Command命令。w Close():該方法用來關(guān)閉數(shù)據(jù)庫連接。2getDs()方法getDs()方法用來執(zhí)行SQL語句,并返回一個DataSet類型的數(shù)據(jù)集對象。此方法中,首先調(diào)用DataCon類中的getCon()方法實現(xiàn)
26、Access數(shù)據(jù)庫連接,然后使用OleDbDataAdapter類對象填充DataSet數(shù)據(jù)集。代碼如下:例程04 代碼位置:光盤TM01VWMSVWMSCommonClassDataOperate.cspublic DataSet getDs(string strCon,string tbname) oledbcon = datacon.getCon(); /獲得數(shù)據(jù)庫連接 oledbda = new OleDbDataAdapter(strCon, oledbcon); /實例化OleDbDataAdapter對象 ds = new DataSet(); /實例化DataSet對象 ole
27、dbda.Fill(ds, tbname); /填充DataSet數(shù)據(jù)集 return ds; SoftReg類SoftReg類中自定義了GetDiskVolumeSerialNumber()、getCpu()、getMNum()和getRNum()4個方法,下面對它們分別進(jìn)行介紹。1GetDiskVolumeSerialNumber()方法GetDiskVolumeSerialNumber()方法用來使用ManagementObject對象的GetPropertyValue()方法獲得本機的硬盤標(biāo)識號。代碼如下:例程05 代碼位置:光盤TM01VWMSVWMSCommonClassSoftR
28、eg.cs/取得設(shè)備硬盤的卷標(biāo)號public string GetDiskVolumeSerialNumber()u ManagementClass mc = new ManagementClass(Win32_NetworkAdapterConfiguration);v ManagementObject disk = new ManagementObject(win32_logicaldisk.deviceid=d:); disk.Get();w return disk.GetPropertyValue(VolumeSerialNumber).ToString();U代碼貼士u Manage
29、mentClass:公共信息模型(CIM)管理類,它是一個WMI類,通過該類的成員,可以使用特定的WMI類路徑訪問WMI數(shù)據(jù)。v ManagementObject:表示W(wǎng)MI實例。w GetPropertyValue():該方法用來獲取某屬性值的等效訪問器。2getCpu()方法getCpu()方法用來獲得本機的CPU序列號。代碼如下:例程06 代碼位置:光盤TM01VWMSVWMSCommonClassSoftReg.cs/獲得CPU的序列號public string getCpu() string strCpu = null; ManagementClass myCpu = new Man
30、agementClass(win32_Processor);/指定win32_Processor管理類 ManagementObjectCollection myCpuConnection = myCpu.GetInstances(); foreach (ManagementObject myObject in myCpuConnection) strCpu = myObject.PropertiesProcessorid.Value.ToString(); /獲得CPU序列號 break; return strCpu;3getMNum()方法getMNum()方法用來從得到的硬盤標(biāo)識號和CP
31、U序列號中取出一定的位數(shù)作為機器碼。代碼如下:例程07 代碼位置:光盤TM01VWMSVWMSCommonClassSoftReg.cs/生成機器碼public string getMNum() string strNum = getCpu() + GetDiskVolumeSerialNumber();/獲得CPU和硬盤序列號 string strMNum = strNum.Substring(0,24);/從生成的字符串中取出前24個字符作為機器碼 return strMNum;public int intCode = new int127;/存儲密鑰public int intNumbe
32、r = new int25;/存儲機器碼的ASCII值public char Charcode = new char25;/存儲機器碼字public void setIntCode()/給數(shù)組賦值小于10的數(shù) for (int i = 1; i intCode.Length; i+) intCodei = i % 9; 4getRNum()方法getRNum()方法用來根據(jù)得到的機器碼生成注冊碼。代碼如下:例程08 代碼位置:光盤TM01VWMSVWMSCommonClassSoftReg.cs/生成注冊碼public string getRNum() setIntCode();/初始化為數(shù)組
33、 for (int i = 1; i Charcode.Length; i+)/把機器碼存入數(shù)組中 etMNum().Substring(i - 1, 1); for (int j = 1; j intNumber.Length; j+)/把字符的ASCII值存入一個整數(shù)組中 intNumberj = intCodeConvert.ToInt32(Charcodej) + Convert.ToInt32(Charcodej); string strAsciiName = ;/用于存儲注冊碼 for (int j = 1; j = 48 & intNumberj = 65 & intNumber
34、j = 97 & intNumberj 122) /判斷字符ASCII值是否大于z strAsciiName += Convert.ToChar(intNumberj - 10).ToString(); else strAsciiName += Convert.ToChar(intNumberj - 9).ToString(); return strAsciiName; VideoOperate類VideoOperate類主要封裝了操作視頻采集卡的各種枚舉及方法,由于要調(diào)用動態(tài)鏈接庫,所以首先要引用命名空間。封裝動態(tài)鏈接庫中各種枚舉及方法的代碼如下:例程09 代碼位置:光盤TM01VWMSVW
35、MSCommonClassVideoOperate.cs#region 視頻采集卡中的枚舉public enum DISPLAYTRANSTYPE NOT_DISPLAY = 0, PCI_VIEDOMEMORY = 1, PCI_MEMORY_VIDEOMEMORY = 2/視頻預(yù)覽和視頻捕捉數(shù)據(jù)流格式,目前版本只支持UUY2格式public enum COLORFORMAT RGB32 = 0x0, RGB24 = 0x1, RGB16 = 0x2, RGB15 = 0x3, YUY2 = 0x4, TYUV = 0x5, 8 = 0x6, GB8 = 0x7, L422 = 0x8, L
36、411 = 0x9, UV12 = 0xA, UV9 = 0xB, AW = 0xE/*視頻預(yù)覽及視頻捕獲的顯示屬性,其中: BRIGHTNESS為亮度,value范圍:0255,最佳:80 CONTRAST為對比度,value范圍:-128127,最佳:x44 SATURATION為飽和度,value范圍:-128127,最佳:x40 HUE為色度,value范圍:-128127,最佳:x0 只有當(dāng)COLORDEVICETYPE等于COLOR_DECODER時才有效 SHARPNESS為銳度,value范圍:-87,最佳:x0 只有當(dāng)COLORDEVICETYPE等于COLOR_DECODE
37、R時才有效*/public enum COLORCONTROL BRIGHTNESS = 0, CONTRAST = 1, SATURATION = 2, HUE = 3, SHARPNESS = 4/*顯示設(shè)備的顯示屬性,其中: COLOR_DECODER為解碼器的顯示屬性,它會影響視頻預(yù)覽和視頻捕獲的顯示屬性 COLOR_PREVIEW為視頻預(yù)覽的顯示屬性 COLOR_CAPTURE為視頻捕獲的顯示屬性 */pblic enum COLORDEVICETYPE COLOR_DECODER = 0, COLOR_PREVIEW = 1, COLOR_CAPTURE = 2,/*視頻捕獲方式,
38、其中: CAP_NULL_STREAM表示捕獲無效 CAP_ORIGIN_STREAM表示捕獲為原始流回調(diào) CAP_MPEG4_STREAM表示捕獲為MPEG4 */ public enum CAPMODEL CAP_NULL_STREAM = 0, CAP_ORIGIN_STREAM = 1, CAP_MPEG4_STREAM = 2, /*音視頻MPEG4捕獲方式,只有CAPMODEL等于CAP_MPEG4_STREAM時有效,其中: MPEG4_AVIFILE_ONLY表示存為MPEG4文件 MPEG4_CALLBACK_ONLY表示MPEG數(shù)據(jù)回調(diào) MPEG4_AVIFILE_CALL
39、BACK表示存為MPEG文件并回調(diào) */ public enum MP4MODEL MPEG4_AVIFILE_ONLY = 0, MPEG4_CALLBACK_ONLY = 1, MPEG4_AVIFILE_CALLBACK = 2, /*MPEG4_XVID壓縮模式,其中: XVID_CBR_MODE為固定碼率模式 XVID_VBR_MODE為動態(tài)碼率模式 */ public enum COMPRESSMODE XVID_CBR_MODE = 0, XVID_VBR_MODE = 1, /*視頻源的輸入頻率,其中: FIELD_FREQ_50HZ 50HZ為絕對多數(shù)為PAL制式 FIELD
40、_FREQ_60HZ 60HZ為絕對多數(shù)為NTSC制式 FIELD_FREQ_0HZ為無信號*/ public enum eFieldFrequency FIELD_FREQ_50HZ = 0, FIELD_FREQ_60HZ = 1, FIELD_FREQ_0HZ = 2, /*電平狀態(tài),其中: HIGH_VOLTAGE為高電平 LOW_VOLTAGE為低電平*/ public enum eVOLTAGELEVEL HIGH_VOLTAGE = 0, LOW_VOLTAGE = 1, #endregion#region 視頻采集卡中的API函數(shù)/初始化系統(tǒng)資源DllImport(Sa7134
41、Capture.dll, EntryPoint = VCAInitSdk)public extern static bool VCAInitSdk(IntPtr hWndMain, DISPLAYTRANSTYPE eDispTransType, bool bLnitAuDev);/釋放系統(tǒng)資源DllImport(Sa7134Capture.dll, EntryPoint = VCAUnInitSdk)public extern static void VCAUnInitSdk();/打開指定卡號的設(shè)備,分配相應(yīng)系統(tǒng)資源DllImport(Sa7134Capture.dll, EntryPoi
42、nt = VCAOpenDevice)public extern static bool VCAOpenDevice(Int32 dwCard, IntPtr hPreviewWnd);/關(guān)閉指定卡號的設(shè)備,釋放相應(yīng)系統(tǒng)資源DllImport(Sa7134Capture.dll, EntryPoint = VCACloseDevice)public extern static bool VCACloseDevice(Int32 dwCard);/返回系統(tǒng)當(dāng)中卡號數(shù)量,即為SAA7134硬件數(shù)目,為0時表示沒有設(shè)備存在DllImport(Sa7134Capture.dll, EntryPoint
43、 = VCAGetDevNum)public extern static int VCAGetDevNum();/開始視頻預(yù)覽DllImport(Sa7134Capture.dll, EntryPoint = VCAStartVideoPreview)public extern static bool VCAStartVideoPreview(Int32 dwCard);/停止視頻預(yù)覽DllImport(Sa7134Capture.dll, EntryPoint = VCAStopVideoPreview)public extern static bool VCAStopVideoPrevie
44、w(Int32 dwCard);/更新視頻預(yù)覽DllImport(Sa7134Capture.dll, EntryPoint = VCAUpdateVideoPreview)public extern static bool VCAUpdateVideoPreview(Int32 dwCard, IntPtr hPreviewWnd);/更新overlay窗口,當(dāng)overlay窗口句柄改變或尺寸、位置改變時調(diào)用,overlay窗口就是包含/多路顯示小窗口的大窗口,overlay窗口必須有一個,多路顯示小窗口必須包含在其內(nèi)部DllImport(Sa7134Capture.dll, EntryPo
45、int = VCAUpdateOverlayWnd)public extern static bool VCAUpdateOverlayWnd(IntPtr hOverlayWnd);/保存快照為JPEG文件DllImport(Sa7134Capture.dll, EntryPoint = VCASaveAsJpegFile)public extern static bool VCASaveAsJpegFile(Int32 dwCard, string lpFileName, Int32 dwQuality);/保存快照為BMP文件DllImport(Sa7134Capture.dll, En
46、tryPoint = VCASaveAsBmpFile)public extern static bool VCASaveAsBmpFile(Int32 dwCard, string lpFileName);/開始視頻捕獲DllImport(Sa7134Capture.dll, EntryPoint = VCAStartVideoCapture)public extern static bool VCAStartVideoCapture(Int32 dwCard, CAPMODEL enCapMode, MP4MODEL enMp4Mode, string lpFileName);/停止視頻捕
47、獲DllImport(Sa7134Capture.dll, EntryPoint = VCAStopVideoCapture)public extern static bool VCAStopVideoCapture(Int32 dwCard);/設(shè)置視頻捕獲尺寸,dwWidth和dwHeight最好為16的倍數(shù),否則,動態(tài)檢測為1616的一個檢測小塊,檢測/將會不準(zhǔn)確DllImport(Sa7134Capture.dll, EntryPoint = VCASetVidCapSize)public extern static bool VCASetVidCapSize(Int32 dwCard
48、, Int32 dwWidth, Int32 dwHeight);/得到視頻捕獲尺寸DllImport(Sa7134Capture.dll, EntryPoint = VCAGetVidCapSize)public extern static bool VCAGetVidCapSize(Int32 dwCard, Int32 dwWidth, Int32 dwHeight);/設(shè)置視頻捕獲頻率DllImport(Sa7134Capture.dll, EntryPoint = VCASetVidCapFrameRate)public extern static bool VCASetVidCap
49、FrameRate(Int32 dwCard, Int32 dwFrameRate, bool bFrameRateReduction);/設(shè)置MPEG壓縮的位率DllImport(Sa7134Capture.dll, EntryPoint = VCASetBitRate)public extern static bool VCASetBitRate(Int32 dwCard, Int32 dwBitRate);/設(shè)置MPEG壓縮的關(guān)鍵幀間隔,必須大于等于幀率DllImport(Sa7134Capture.dll, EntryPoint = VCASetKeyFrmInterval)public extern static bool VCASetKeyFr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高層土方施工方案
- 樓板管口灌漿施工方案
- 房產(chǎn)委托代理合同
- 旅游酒店業(yè)智慧客房服務(wù)系統(tǒng)建設(shè)方案
- 橋梁基礎(chǔ)注漿施工方案
- 鐵藝別墅施工方案
- 冷凍機房施工方案
- 低壓柜施工方案
- phc靜壓樁施工方案
- 順德瀝青鋪路工程施工方案
- 23G409先張法預(yù)應(yīng)力混凝土管樁
- 2024年江蘇省中小學(xué)生金鑰匙科技競賽(高中組)考試題庫(含答案)
- DBJ53/T-39-2020 云南省民用建筑節(jié)能設(shè)計標(biāo)準(zhǔn)
- 2023年山東春季高考數(shù)學(xué)試題
- 初中 初一 勞動教育《舉辦一次家庭聚會》教學(xué)設(shè)計
- 人教版六年級上冊數(shù)學(xué)第六單元測試卷(百分?jǐn)?shù)(一))
- 《基礎(chǔ)英語》課件 Unit 1 Thinking as a Hobby
- 雅思大作文資料_十大類題材_解析詳細(xì)_應(yīng)有盡有(最好全部打印后看_非常全)
- 小學(xué)綜合實踐食品添加劑
- 電氣消防設(shè)計說明專篇
- GCP知識考核試題與答案
評論
0/150
提交評論