重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
Option?Explicit
十余年的古冶網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網營銷的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整古冶建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“古冶網站設計”,“古冶網站推廣”以來,每個客戶項目都認真落實執行。
'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這幾種編碼文本
'##?編譯預處理常數?#########################################
'==?全局常數?===============================================
'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,表示使用系統當前代碼頁。可以利用該參數實現讀取其他代碼編碼的文本,比如想在?簡體中文平臺下?讀取?繁體中文平臺生成的txt,就將它設為950
Public?UEFCodePage?As?Long
'判斷BOM
'返回值:BOM所占字節
'dwFirst:[in]文件最開始的4個字節
'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所占字節
'fmt:[in]編碼類型
'dwFirst:[out]文件最開始的4個字節
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
'關閉文件
Call?CloseHandle(hFile)
End?Function
'讀取文本文件
'返回值:讀取的文本。返回vbNullString表示文件無法打開
'FileName:[in]文件名
'fmt:[in,out]使用何種文本編碼格式來讀取文本。為UEF_Auto時表示自動判斷,且在fmt參數返回文本所用編碼格式
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)
'恢復文件指針
If?fmt?=?UEF_Auto?Then?'自動判斷
fmt?=?CurFmt
'cbBOM?=?cbBOM
Else?'手動設置編碼
If?fmt?=?CurFmt?Then?'若編碼相同,則忽略BOM標記
'cbBOM?=?cbBOM
Else?'編碼不同,那么都是數據
cbBOM?=?0
End?If
End?If
Call?SetFilePointer(hFile,?cbBOM,?ByVal?0,?FILE_BEGIN)
cbTextData?=?nFileSize?-?cbBOM
'讀取數據
UEFLoadTextFile?=?""
Select?Case?fmt
Case?UEF_ANSI,?UEF_UTF8
'判斷應使用的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
為何要采用截圖功能去取窗口的句柄呢,可以用窗口標題去取句柄呀。
首先添加一個系統的語音COM組件的引用microsoft speech object library然后在程序中聲明一個語音類dim RC As SpeechLib.SpSharedRecoContext這個類有一些事件,如果你要處理它的一些事件,可以用withevent來聲明然后在窗體LOAD事件或你需要的地方先創建一個實例RC = New SpeechLib.SpSharedRecoContext當一個RC被實例化后,系統就會運行語音識別程序.前提是你的系統已經正確安裝這個功能.一般默認就已經安裝好的.其次提醒一下,WIN7的語音識別比XP的好N倍.從閱讀到偵聽都好很多.然后就可以在你需要閱讀的地方使用RC.Voice.Speak("hello 我", 11)11那里是一些枚舉,用來標識系統用前臺還是后臺或其他方式來閱讀文字,簡單的來說就是閱讀的時候不會卡住你的程序.你可以選其他的枚舉來試試作用.以上為閱讀部分.如果需要程序聽你說話,則需要聲明一個偵聽類dim RG As SpeechLib.ISpeechRecoGrammar在初始化時將之與上面的RC建立關系,此時則必須要用withevent來聲明上面的RC,因為涉及電腦聽到你的語音后,會觸發一個事件,并將聽到的內容傳遞到該事件.其次,要讓系統聽到的解析為命令,就必須準備一個XML結構的文件來保存那些固定的命令.如果電腦在XML文件中找不到那些固定命令或同時不屬于系統命令,電腦將會將其解釋為聽寫.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關閉你自己 /L
/RULE
/GRAMMAR要讓系統正確地偵聽到你說的話,前提你必須運行語音識別程序并讓其激活到"正在聆聽"狀態.并且你必須有一個能正常使用的話筒而且保證話筒已經打開.(廢話-_-|||)以上就是用VB.NET語音識別的最基本的一些操作.希望對你有幫助.更深入的內容有興趣的話可以和我一起研究.
摘自幫助文檔,我也不是很理解
估計只有在Visual Basic 文件輸入和輸出才有用
示例
Visual Basic 復制代碼
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 是信息性的屬性,不能用于將可變長度字符串轉換為固定長度字符串。此屬性的作用是修改那些識別 VBFixedStringAttribute 的方法或 API 調用(如 Len 和 FilePut 函數)使用結構中的字符串以及非局部變量的方式。請記住,此屬性不會更改字符串本身的實際長度。
備注
默認情況下,Visual Basic 字符串為可變長度的字符串。在使用 Visual Basic 文件輸入和輸出函數(如需要固定長度字符串的 FileGet 和 FilePut)時,該屬性非常有用。
注意
VBFixedStringAttribute 屬性以字節而不是字符為單位指定字符串長度。