REM Form1.vb
Imports System.IO
Imports System.Net
Imports System.Text
Public Class Form1
Private spVoice As SpVoice
Private Function GoogleTranslate(ByVal [Text] As String) As String
Try
Dim client As New WebClient
client.Headers.Item("Referer") = "http://translate.google.cn/"
client.Headers.Item("User-Agent") = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 663; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)"
Dim bytes As Byte() = client.DownloadData(("http://translate.google.cn/translate_a/t?client=t&text=" & Uri.EscapeDataString([Text]) & "&hl=zh-CN&multires=1&otf=1&pc=0&sc=1" + cype.AutoCompleteCustomSource(cype.SelectedIndex)))
client.Dispose()
Dim ret As String = Encoding.UTF8.GetString(bytes)
Return ret
Catch ex As Exception
Return Nothing
End Try
End Function
Private Sub translate_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles translate.Click
If cype.SelectedIndex > -1 Then
Dim str = MyClass.GoogleTranslate(request.Text)
If str <> Nothing Then
result.Text = str.Substring((str.IndexOf("[[""") + 3),(str.IndexOf(""",""") - 4)).Replace("\r\n",vbNewLine) & vbNewLine
End If
Else
result.Text = request.Text
End If
End Sub
Private Sub deacon_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles deacon.Click
If spVoice Is Nothing Then
spVoice = New SpVoice()
spVoice.Rate = -2
spVoice.Volume = 100
spVoice.SetVoices("Microsoft Sam")
End If
spVoice.Speak(result.Text,spVoice.Flags.SVSFlagsAsync)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles MyBase.Load
cype.SelectedIndex = 0
End Sub
End Class
REM SpVoice.vb
Imports System.Reflection
Imports System.Collections.Generic
Imports System.Runtime.InteropServices
<Guid("ED5DCE10-F40B-4655-9E7B-903779C77AF2")> _
Public Class SpVoice
' Methods
Public Sub New()
Me.Init()
End Sub
Public Sub DisplayUI(ByVal hWndParent As Integer,ByVal Title As String,ByVal TypeOfUI As String,ByVal ExtraData As Object)
Me._ComType.InvokeMember("DisplayUI",BindingFlags.InvokeMethod,Nothing,Me._ComObject,New Object() {hWndParent,Title,TypeOfUI,ExtraData})
End Sub
Public Function GetVoices() As List(Of String)
Dim list As List(Of String) = Nothing
Dim target As Object = Nothing
Dim obj3 As Object = Me._ComType.InvokeMember("GetVoices",Nothing)
Dim num As Integer = CInt(obj3.GetType.InvokeMember("Count",BindingFlags.GetProperty,obj3,Nothing))
If (num <> 0) Then
list = New List(Of String)
End If
Dim i As Integer
For i = 0 To num - 1
target = obj3.GetType.InvokeMember("Item",New Object() {i})
If (Not target Is Nothing) Then
list.Add(target.GetType.InvokeMember("GetDescription",target,Nothing).ToString)
End If
Next i
Return list
End Function
Public Function Init() As Boolean
Me._ComType = Type.GetTypeFromProgID("SAPI.SpVoice",True)
If (Me._ComType Is Nothing) Then
Throw New Exception("COM调用失败")
End If
Me._ComObject = Activator.CreateInstance(Me._ComType,True)
Return (Not Me._ComObject Is Nothing)
End Function
Public Function IsUISupported(ByVal TypeOfUI As String,ByVal ExtraData As Object) As Boolean
Return CBool(Me._ComType.InvokeMember("IsUISupported",New Object() {TypeOfUI,ExtraData}))
End Function
Public Sub Pause()
Me._ComType.InvokeMember("Pause",Nothing)
End Sub
Public Function Release() As Integer
Return Marshal.ReleaseComObject(Me._ComObject)
End Function
Public Sub [Resume]()
Me._ComType.InvokeMember("Resume",Nothing)
End Sub
Public Function SetVoices(ByVal Name As String) As Boolean
Dim target As Object = Nothing
Dim obj3 As Object = Me._ComType.InvokeMember("GetVoices",Nothing))
Dim i As Integer
For i = 0 To num - 1
target = obj3.GetType.InvokeMember("Item",New Object() {i})
If ((Not target Is Nothing) AndAlso (target.GetType.InvokeMember("GetDescription",Nothing).ToString = Name)) Then
Me._ComType.InvokeMember("Voice",BindingFlags.SetProperty,New Object() {target})
End If
Next i
Return False
End Function
Public Function Skip(ByVal Type As Integer,ByVal NumItems As Integer) As Integer
Return CInt(Me._ComType.InvokeMember("Skip",New Object() {Type,NumItems}))
End Function
Public Sub Speak(ByVal [Text] As String,ByVal Flags As Flags)
Me._ComType.InvokeMember("Speak",New Object() {[Text],Flags})
End Sub
Public Function WaitUntilDone(ByVal msTimeout As Integer) As Boolean
Return CBool(Me._ComType.InvokeMember("WaitUntilDone",New Object() {msTimeout}))
End Function
' Properties
Public Property [Property] As Priority
Get
Return DirectCast(Me._ComType.InvokeMember("Priority",Nothing),Priority)
End Get
Set(ByVal value As Priority)
Me._ComType.InvokeMember("Priority",Me._ComType,New Object() {value})
End Set
End Property
Public Property Rate As Integer
Get
Return CInt(Me._ComType.InvokeMember("Rate",Nothing))
End Get
Set(ByVal value As Integer)
Me._ComType.InvokeMember("Rate",New Object() {value})
End Set
End Property
Public Property Volume As Integer
Get
Return CInt(Me._ComType.InvokeMember("Volume",Nothing))
End Get
Set(ByVal value As Integer)
Me._ComType.InvokeMember("Volume",New Object() {value})
End Set
End Property
' Fields
Private _ComObject As Object = Nothing
Private _ComType As Type = Nothing
' Nested Types
Public Enum Flags
' Fields
SVSFDefault = 0
SVSFIsFilename = 4
SVSFIsNotXML = &H10
SVSFIsXML = 8
SVSFlagsAsync = 1
SVSFNLPMask = &H40
SVSFNLPSpeakPunc = &H40
SVSFParseAutodetect = 0
SVSFParseMask = &H180
SVSFParseSapi = &H80
SVSFParseSsml = &H100
SVSFPersistXML = &H20
SVSFPurgeBeforeSpeak = 2
SVSFUnusedFlags = -512
SVSFVoiceMask = &H1FF
End Enum
Public Enum Priority
' Fields
SVPAlert = 1
SVPNormal = 0
SVPOver = 2
End Enum
End Class
REM Form1.Designer.vb
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'Form 重写 Dispose,以清理组件列表。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer
'注意: 以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改它。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.request = New System.Windows.Forms.TextBox()
Me.result = New System.Windows.Forms.TextBox()
Me.translate = New System.Windows.Forms.Button()
Me.cype = New System.Windows.Forms.ComboBox()
Me.deacon = New System.Windows.Forms.Button()
Me.SuspendLayout()
'
'request
'
Me.request.Location = New System.Drawing.Point(12,28)
Me.request.Multiline = True
Me.request.Name = "request"
Me.request.Size = New System.Drawing.Size(221,176)
Me.request.TabIndex = 0
'
'result
'
Me.result.Location = New System.Drawing.Point(239,28)
Me.result.Multiline = True
Me.result.Name = "result"
Me.result.Size = New System.Drawing.Size(248,176)
Me.result.TabIndex = 1
'
'translate
'
Me.translate.Location = New System.Drawing.Point(331,223)
Me.translate.Name = "translate"
Me.translate.Size = New System.Drawing.Size(75,22)
Me.translate.TabIndex = 2
Me.translate.Text = "翻译(&T)"
Me.translate.UseVisualStyleBackColor = True
'
'cype
'
Me.cype.AutoCompleteCustomSource.AddRange(New String() {"&sl=auto&tl=zh-CN","&sl=en&tl=zh-CN","&sl=zh-CN&tl=en","&sl=zh-CN&tl=ja","&sl=ja&tl=zh-CN"})
Me.cype.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList
Me.cype.FormattingEnabled = True
Me.cype.Items.AddRange(New Object() {"自动","英中","中英","中日","日中"})
Me.cype.Location = New System.Drawing.Point(173,224)
Me.cype.Name = "cype"
Me.cype.Size = New System.Drawing.Size(152,20)
Me.cype.TabIndex = 3
'
'deacon
'
Me.deacon.Location = New System.Drawing.Point(413,223)
Me.deacon.Name = "deacon"
Me.deacon.Size = New System.Drawing.Size(75,22)
Me.deacon.TabIndex = 4
Me.deacon.Text = "朗读(&D)"
Me.deacon.UseVisualStyleBackColor = True
'
'Form1
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!,12.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(499,261)
Me.Controls.Add(Me.deacon)
Me.Controls.Add(Me.cype)
Me.Controls.Add(Me.translate)
Me.Controls.Add(Me.result)
Me.Controls.Add(Me.request)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.Name = "Form1"
Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
Me.Text = "Translation"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents request As System.Windows.Forms.TextBox
Friend WithEvents result As System.Windows.Forms.TextBox
Friend WithEvents translate As System.Windows.Forms.Button
Friend WithEvents cype As System.Windows.Forms.ComboBox
Friend WithEvents deacon As System.Windows.Forms.Button
End Class
原文链接:https://www.f2er.com/vb/257835.html