Option?Explicit
十余年的古冶網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。成都全網(wǎng)營銷的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整古冶建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“古冶網(wǎng)站設(shè)計”,“古冶網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
'mTextUTF.bas
'模塊:UTF文本文件訪問
'作者:zyl910
'版本:1.0
'日期:2006-1-23
'==?說明?===================================================
'支持Unicode編碼的文本文件讀寫。暫時支持ANSI、UTF-8、UTF-16LE、UTF-16BE這幾種編碼文本
'==?更新記錄?===============================================
'[V1.0]?2006-1-23
'1.支持最常見的ANSI、UTF-8、UTF-16LE、UTF-16BE這幾種編碼文本
'##?編譯預(yù)處理常數(shù)?#########################################
'==?全局常數(shù)?===============================================
'IncludeAPILib:引用了API庫,此時不需要手動寫API聲明
'##?API?####################################################
#If?IncludeAPILib?=?0?Then
'==?File?===================================================
Private?Declare?Function?CreateFile?Lib?"kernel32"?Alias?"CreateFileA"?(ByVal?lpFileName?As?String,?ByVal?dwDesiredAccess?As?Long,?ByVal?dwShareMode?As?Long,?ByVal?lpSecurityAttributes?As?Long,?ByVal?dwCreationDisposition?As?Long,?ByVal?dwFlagsAndAttributes?As?Long,?ByVal?hTemplateFile?As?Long)?As?Long
Private?Declare?Function?CloseHandle?Lib?"kernel32"?(ByVal?hObject?As?Long)?As?Long
Private?Declare?Function?ReadFile?Lib?"kernel32"?(ByVal?hFile?As?Long,?lpBuffer?As?Any,?ByVal?nNumberOfBytesToRead?As?Long,?lpNumberOfBytesRead?As?Long,?ByVal?lpOverlapped?As?Long)?As?Long
Private?Declare?Function?WriteFile?Lib?"kernel32"?(ByVal?hFile?As?Long,?lpBuffer?As?Any,?ByVal?nNumberOfBytesToWrite?As?Long,?lpNumberOfBytesWritten?As?Long,?ByVal?lpOverlapped?As?Long)?As?Long
Private?Declare?Function?GetFileSize?Lib?"kernel32"?(ByVal?hFile?As?Long,?lpFileSizeHigh?As?Long)?As?Long
Private?Declare?Function?SetFilePointer?Lib?"kernel32"?(ByVal?hFile?As?Long,?ByVal?lDistanceToMove?As?Long,?lpDistanceToMoveHigh?As?Long,?ByVal?dwMoveMethod?As?Long)?As?Long
Private?Const?INVALID_HANDLE_VALUE?=?-1
Private?Const?GENERIC_READ?=?H80000000
Private?Const?GENERIC_WRITE?=?H40000000
Private?Const?FILE_SHARE_READ?=?H1
Private?Const?FILE_SHARE_WRITE?=?H2
Private?Const?Create_NEW?=?1
Private?Const?Create_ALWAYS?=?2
Private?Const?OPEN_EXISTING?=?3
Private?Const?OPEN_ALWAYS?=?4
Private?Const?TRUNCATE_EXISTING?=?5
Private?Const?FILE_ATTRIBUTE_NORMAL?=?H80
Private?Const?FILE_BEGIN?=?0
Private?Const?FILE_CURRENT?=?1
Private?Const?FILE_END?=?2
'==?Unicode?================================================
Private?Declare?Function?MultiByteToWideChar?Lib?"kernel32"?(ByVal?CodePage?As?Long,?ByVal?dwFlags?As?Long,?ByRef?lpMultiByteStr?As?Any,?ByVal?cchMultiByte?As?Long,?ByRef?lpWideCharStr?As?Any,?ByVal?cchWideChar?As?Long)?As?Long
Private?Declare?Function?WideCharToMultiByte?Lib?"kernel32"?(ByVal?CodePage?As?Long,?ByVal?dwFlags?As?Long,?ByRef?lpWideCharStr?As?Any,?ByVal?cchWideChar?As?Long,?ByRef?lpMultiByteStr?As?Any,?ByVal?cchMultiByte?As?Long,?ByRef?lpDefaultChar?As?Any,?ByVal?lpUsedDefaultChar?As?Long)?As?Long
Private?Const?CP_UTF8?As?Long?=?65001
#End?If
'###########################################################
'Unicode編碼格式
Public?Enum?UnicodeEncodeFormat
UEF_ANSI?=?0?'ANSI+DBCS
UEF_UTF8?'UTF-8
UEF_UTF16LE?'UTF-16LE
UEF_UTF16BE?'UTF-16BE
UEF_UTF32LE?'UTF-32LE
UEF_UTF32BE?'UTF-32BE
UEF_Auto?=?-1?'自動識別編碼
'隱藏項目
[_UEF_Min]?=?UEF_ANSI
[_UEF_Max]?=?UEF_UTF32BE
End?Enum
'ANSI+DBCS方式的文本所使用的代碼頁。默認為0,表示使用系統(tǒng)當前代碼頁??梢岳迷搮?shù)實現(xiàn)讀取其他代碼編碼的文本,比如想在?簡體中文平臺下?讀取?繁體中文平臺生成的txt,就將它設(shè)為950
Public?UEFCodePage?As?Long
'判斷BOM
'返回值:BOM所占字節(jié)
'dwFirst:[in]文件最開始的4個字節(jié)
'fmt:[out]返回編碼類型
Public?Function?UEFCheckBOM(ByVal?dwFirst?As?Long,?ByRef?fmt?As?UnicodeEncodeFormat)?As?Long
If?dwFirst?=?HFEFF?Then
fmt?=?UEF_UTF32LE
UEFCheckBOM?=?4
ElseIf?dwFirst?=?HFFFE0000?Then
fmt?=?UEF_UTF32BE
UEFCheckBOM?=?4
ElseIf?(dwFirst?And?HFFFF)?=?HFEFF?Then
fmt?=?UEF_UTF16LE
UEFCheckBOM?=?2
ElseIf?(dwFirst?And?HFFFF)?=?HFFFE?Then
fmt?=?UEF_UTF16BE
UEFCheckBOM?=?2
ElseIf?(dwFirst?And?HFFFFFF)?=?HBFBBEF?Then
fmt?=?UEF_UTF8
UEFCheckBOM?=?3
Else
fmt?=?UEF_ANSI
UEFCheckBOM?=?0
End?If
End?Function
'生成BOM
'返回值:BOM所占字節(jié)
'fmt:[in]編碼類型
'dwFirst:[out]文件最開始的4個字節(jié)
Public?Function?UEFMakeBOM(ByVal?fmt?As?UnicodeEncodeFormat,?ByRef?dwFirst?As?Long)?As?Long
Select?Case?fmt
Case?UEF_UTF8
dwFirst?=?HBFBBEF
UEFMakeBOM?=?3
Case?UEF_UTF16LE
dwFirst?=?HFEFF
UEFMakeBOM?=?2
Case?UEF_UTF16BE
dwFirst?=?HFFFE
UEFMakeBOM?=?2
Case?UEF_UTF32LE
dwFirst?=?HFEFF
UEFMakeBOM?=?4
Case?UEF_UTF32BE
dwFirst?=?HFFFE0000
UEFMakeBOM?=?4
Case?Else
dwFirst?=?0
UEFMakeBOM?=?0
End?Select
End?Function
'判斷文本文件的編碼類型
'返回值:編碼類型。文件無法打開時,返回UEF_Auto
'FileName:文件名
Public?Function?UEFCheckTextFileFormat(ByVal?FileName?As?String)?As?UnicodeEncodeFormat
Dim?hFile?As?Long
Dim?dwFirst?As?Long
Dim?nNumRead?As?Long
'打開文件
hFile?=?CreateFile(FileName,?GENERIC_READ,?FILE_SHARE_READ?Or?FILE_SHARE_WRITE,?ByVal?0,?OPEN_EXISTING,?FILE_ATTRIBUTE_NORMAL,?ByVal?0)
If?INVALID_HANDLE_VALUE?=?hFile?Then?'文件無法打開
UEFCheckTextFileFormat?=?UEF_Auto
Exit?Function
End?If
'判斷BOM
dwFirst?=?0
Call?ReadFile(hFile,?dwFirst,?4,?nNumRead,?ByVal?0)
nNumRead?=?UEFCheckBOM(dwFirst,?UEFCheckTextFileFormat)
'Debug.Print?nNumRead
'關(guān)閉文件
Call?CloseHandle(hFile)
End?Function
'讀取文本文件
'返回值:讀取的文本。返回vbNullString表示文件無法打開
'FileName:[in]文件名
'fmt:[in,out]使用何種文本編碼格式來讀取文本。為UEF_Auto時表示自動判斷,且在fmt參數(shù)返回文本所用編碼格式
Public?Function?UEFLoadTextFile(ByVal?FileName?As?String,?Optional?ByRef?fmt?As?UnicodeEncodeFormat?=?UEF_Auto)?As?String
Dim?hFile?As?Long
Dim?nFileSize?As?Long
Dim?nNumRead?As?Long
Dim?dwFirst?As?Long
Dim?CurFmt?As?UnicodeEncodeFormat
Dim?cbBOM?As?Long
Dim?cbTextData?As?Long
Dim?CurCP?As?Long
Dim?byBuf()?As?Byte
Dim?cchStr?As?Long
Dim?I?As?Long
Dim?byTemp?As?Byte
'判斷fmt范圍
If?fmt??UEF_Auto?Then
If?fmt??[_UEF_Min]?Or?fmt??[_UEF_Max]?Then
GoTo?FunEnd
End?If
End?If
'打開文件
hFile?=?CreateFile(FileName,?GENERIC_READ,?FILE_SHARE_READ?Or?FILE_SHARE_WRITE,?ByVal?0,?OPEN_EXISTING,?FILE_ATTRIBUTE_NORMAL,?ByVal?0)
If?INVALID_HANDLE_VALUE?=?hFile?Then?'文件無法打開
GoTo?FunEnd
End?If
'判斷文件大小
nFileSize?=?GetFileSize(hFile,?nNumRead)
If?nNumRead??0?Then?'超過4GB
GoTo?FreeHandle
End?If
If?nFileSize??0?Then?'超過2GB
GoTo?FreeHandle
End?If
'判斷BOM
dwFirst?=?0
Call?ReadFile(hFile,?dwFirst,?4,?nNumRead,?ByVal?0)
cbBOM?=?UEFCheckBOM(dwFirst,?CurFmt)
'恢復(fù)文件指針
If?fmt?=?UEF_Auto?Then?'自動判斷
fmt?=?CurFmt
'cbBOM?=?cbBOM
Else?'手動設(shè)置編碼
If?fmt?=?CurFmt?Then?'若編碼相同,則忽略BOM標記
'cbBOM?=?cbBOM
Else?'編碼不同,那么都是數(shù)據(jù)
cbBOM?=?0
End?If
End?If
Call?SetFilePointer(hFile,?cbBOM,?ByVal?0,?FILE_BEGIN)
cbTextData?=?nFileSize?-?cbBOM
'讀取數(shù)據(jù)
UEFLoadTextFile?=?""
Select?Case?fmt
Case?UEF_ANSI,?UEF_UTF8
'判斷應(yīng)使用的CodePage
CurCP?=?IIf(fmt?=?UEF_UTF8,?CP_UTF8,?UEFCodePage)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox2.Text = Mid(TextBox1.Text, 11, 2) ’第十一位開始算起的2個字符
End Sub
為何要采用截圖功能去取窗口的句柄呢,可以用窗口標題去取句柄呀。
首先添加一個系統(tǒng)的語音COM組件的引用microsoft speech object library然后在程序中聲明一個語音類dim RC As SpeechLib.SpSharedRecoContext這個類有一些事件,如果你要處理它的一些事件,可以用withevent來聲明然后在窗體LOAD事件或你需要的地方先創(chuàng)建一個實例RC = New SpeechLib.SpSharedRecoContext當一個RC被實例化后,系統(tǒng)就會運行語音識別程序.前提是你的系統(tǒng)已經(jīng)正確安裝這個功能.一般默認就已經(jīng)安裝好的.其次提醒一下,WIN7的語音識別比XP的好N倍.從閱讀到偵聽都好很多.然后就可以在你需要閱讀的地方使用RC.Voice.Speak("hello 我", 11)11那里是一些枚舉,用來標識系統(tǒng)用前臺還是后臺或其他方式來閱讀文字,簡單的來說就是閱讀的時候不會卡住你的程序.你可以選其他的枚舉來試試作用.以上為閱讀部分.如果需要程序聽你說話,則需要聲明一個偵聽類dim RG As SpeechLib.ISpeechRecoGrammar在初始化時將之與上面的RC建立關(guān)系,此時則必須要用withevent來聲明上面的RC,因為涉及電腦聽到你的語音后,會觸發(fā)一個事件,并將聽到的內(nèi)容傳遞到該事件.其次,要讓系統(tǒng)聽到的解析為命令,就必須準備一個XML結(jié)構(gòu)的文件來保存那些固定的命令.如果電腦在XML文件中找不到那些固定命令或同時不屬于系統(tǒng)命令,電腦將會將其解釋為聽寫.RG = RC.CreateGrammar '(0)
RG.CmdLoadFromFile("聽到.xml", SpeechLib.SpeechLoadOption.SLODynamic)
RG.CmdSetRuleIdState(0, SpeechLib.SpeechRuleState.SGDSActive)然后寫一個過程來處理聽到的事件Private Sub 聽到命令(ByVal StreamNumber As Integer, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal 話語 As SpeechLib.ISpeechRecoResult) Handles RC.Recognition RC.Voice.Speak("我聽到了" 話語.PhraseInfo.GetText, 11)End Sub以上為偵聽部分.下面列一個XML的例文?xml version="1.0" encoding="gb2312"?
GRAMMAR LANGID="804"
RULE NAME="命令" TOPLEVEL="ACTIVE"
L
P打開播放器
P上我的QQ
P關(guān)閉你自己 /L
/RULE
/GRAMMAR要讓系統(tǒng)正確地偵聽到你說的話,前提你必須運行語音識別程序并讓其激活到"正在聆聽"狀態(tài).并且你必須有一個能正常使用的話筒而且保證話筒已經(jīng)打開.(廢話-_-|||)以上就是用VB.NET語音識別的最基本的一些操作.希望對你有幫助.更深入的內(nèi)容有興趣的話可以和我一起研究.
摘自幫助文檔,我也不是很理解
估計只有在Visual Basic 文件輸入和輸出才有用
示例
Visual Basic 復(fù)制代碼
Structure Person
Public ID As Integer
Public MonthlySalary As Decimal
Public LastReviewDate As Long
VBFixedString(15) Public FirstName As String
VBFixedString(15) Public LastName As String
VBFixedString(15) Public Title As String
VBFixedString(150) Public ReviewComments As String
End Structure
注意
VBFixedStringAttribute 是信息性的屬性,不能用于將可變長度字符串轉(zhuǎn)換為固定長度字符串。此屬性的作用是修改那些識別 VBFixedStringAttribute 的方法或 API 調(diào)用(如 Len 和 FilePut 函數(shù))使用結(jié)構(gòu)中的字符串以及非局部變量的方式。請記住,此屬性不會更改字符串本身的實際長度。
備注
默認情況下,Visual Basic 字符串為可變長度的字符串。在使用 Visual Basic 文件輸入和輸出函數(shù)(如需要固定長度字符串的 FileGet 和 FilePut)時,該屬性非常有用。
注意
VBFixedStringAttribute 屬性以字節(jié)而不是字符為單位指定字符串長度。