Лучший на мой взгляд электронный словарь _//lingvo.ru_ не имеет возможности перевода слова из коммандной строки. Таким образом, подключение его в меню Oper'ы становится задачей нетривиальной.
Долгое время я не мог узнать как именно передаётся слово из сторонних программ в Lingvo [_//forum.lingvo.ru/actualthread.aspx?bid=2&tid=723&pg=-1_].
Узнать содержимое макроса, передающего выделенное в Word'е слово в Lingvo оказалось очень просто.
У меня, правда, версия 6.5, но не думаю что в последующих жто сильно изменилось. Надо открыть шаблон LINGVO6A.DOT, находящийся в папке Lingvo. Тогда станет доступной кнопка редактирования для макросов лингво.
И мне открылись 3 модуля: autoexec (пустой), TranslateByLingvo и TranslateWord99.
TranslateByLingvo Code:
Public Sub MAIN()
Dim wordVer$
wordVer$ = WordBasic.[AppInfo$](2)
If (Mid(wordVer$, 1, 1) <> "6") Then
WordBasic.ToolsMacro Name:="TranslateWord99", Run:=1
End If
End Sub
TranslateWord99 Code:
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal HWND As Long) As Boolean
Dim msg__$()
'----------------------------------------------------------------------------------
'Fills in the array of messages
'----------------------------------------------------------------------------------
Private Sub FillMsgArray()
'Get language version of WinWord
If (WordBasic.[AppInfo$](16) = "Русский") Then
msg__$(1) = "Невозможно запустить Lingvo. Возможно, ошибка установки или исполняемые файлы удалены."
Else
msg__$(1) = "Cannot run Lingvo. The executable files may be missing."
End If
End Sub
Private Function GetSelectedText() As String
Dim st
Dim bkmrkName$
Dim theWord$
theWord$ = ""
If (WordBasic.CountWindows() = 0) Then GoTo exitFunc
If (WordBasic.SelInfo(27) = -1) Then GoTo exitFunc
st = WordBasic.SelType()
If (st = 1 Or st = 5) Then
'No selection
bkmrkName$ = "_t_Lingvo_get_word"
WordBasic.EditBookmark Name:=bkmrkName$, Add:=1
WordBasic.WordLeft
WordBasic.WordRight , 1
theWord$ = WordBasic.[Selection$]()
WordBasic.EditBookmark Name:=bkmrkName$, GoTo:=1
WordBasic.EditBookmark Name:=bkmrkName$, Delete:=1
ElseIf (st = 2 Or st = 6) Then
'We have a selection
theWord$ = WordBasic.[Selection$]()
End If
exitFunc:
GetSelectedText = theWord$
End Function
Private Sub LingvoTranslateWord()
Dim theWord$
theWord$ = GetSelectedText()
If theWord$ = "" Then GoTo exitSub
Dim a As Object
Set a = CreateObject("Lingvo.Application")
On Error Resume Next
If (Err.Number <> 0) Then
'Не удалось запустить Lingvo
WordBasic.MsgBox msg__$(1), 48
GoTo exitSub
End If
Dim HWND As Long
HWND = a.GetLingvoHWND
If (HWND <> 0) Then
Dim success As Boolean
success = SetForegroundWindow(HWND)
End If
a.TranslateText theWord$
exitSub:
End Sub
Public Sub MAIN()
ReDim msg__$(4)
FillMsgArray
LingvoTranslateWord
End Sub
- Так можно ли тем способом, каким Word передаёт слово в Lingvo передать слово из Oper'ы?
- А если нельзя, то может, кто-нибудь возьмётся написать программульку, которая передавала бы слово через коммандную строку?