1

Тема: OOo Basic: работа с Windows-технологиями (COM, Win32 API)

Если OpenOffice.org установлен под Windows, в макросах OOo Basic можно использовать некоторые Windows-технологии. Приёмы работы похожи на VBA в MS Office.

Пример работы с COM-объектом:

oleService = createUnoService("com.sun.star.bridge.OleObjectFactory")
IE = oleService.createInstance("InternetExplorer.Application")
IE.Visible = 1
IE.Navigate("http://www.openoffice.org")

Пример объявления и вызова функции из внешней DLL (Win32 API):

Declare Function BeepAPI Lib "kernel32" Alias "Beep" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Sub Test()
    BeepAPI 200, 200
End Sub
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2 (изменено: Poltergeyst, 2010-09-04 00:42:40)

Re: OOo Basic: работа с Windows-технологиями (COM, Win32 API)

Достаточно подробную информацию по созданию макросов для Open Office, снабженную базовыми примерами,  можно найти в документе:
http://www.pitonyak.org/AndrewMacro.odt (англ)
http://www.pitonyak.org/AndrewMacro_rus.odt (русский)

Подробнее: http://www.pitonyak.org/oo.php

3 (изменено: Poltergeyst, 2010-09-04 00:50:05)

Re: OOo Basic: работа с Windows-технологиями (COM, Win32 API)

Скрипт OOo Basic воспроизводит выбранный WAV-файл с помощью команд MCI. Запустите код в редакторе OOo Basic, например из под Calc.

Lang: OOo Basic
Open Office 2.x
ОС: WinMe/XP

'/Воспроизведение wav-файла с помощью команд интерфейса MCI/
'/Lang: OOo Basic/
'--------------------------------------------------------------------------------
    Declare Function mciSendStringA Lib "WINMM.DLL" Alias "mciSendStringA" ( _
        ByVal lpstrCommand As String, _
        ByVal lpstrReturnString As String, _
        ByVal uReturnLength As Integer, _
        ByVal hwndCallback As Integer) As Integer
    
    Declare Sub Sleep Lib "KERNEL32.DLL" Alias "Sleep" ( _
        ByVal lTime As Long)

'[Набор команд MCI]    
'--------------------------------------------------------------------------------
Sub Main

    GlobalScope.BasicLibraries.LoadLibrary("Tools")    
    oleService = createUnoService("com.sun.star.bridge.OleObjectFactory")
    scrRun     = oleService.createInstance("Scripting.FileSystemObject")
    track = DlgOpen()
    
    If Len(track) > 0 Then
     
        track = scrRun.GetFile(track).ShortPath
        MsgBox "Воспроизведение: " & track & Chr(32), 64, "wav"
        mciRes =  mciCommand("open waveaudio!" & track & " alias mywave wait")
        Sleep(100)
        mciRes =  mciCommand("play mywave wait")
        Sleep(100)
        mciRes =  mciCommand("close mywave")
        Sleep(100)
    
    End If    
    
    oleService = Nothing
    scrRun = Nothing
End Sub    

'[Отправка команды MCI]
'--------------------------------------------------------------------------------
Function mciCommand(mciCmd As String)
    mciCommand = mciSendStringA(mciCmd & Chr(0), "",0,0)
End Function

'[Диалог выбора файла для воспроизведения]
'--------------------------------------------------------------------------------
Function DlgOpen()

    oPS = createUnoService("com.sun.star.util.PathSettings")
    oFileDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
    
    Dim filterNames(1) As String
    filterNames(0) = "*.wav"
    AddFiltersToDialog(filterNames(), oFileDialog)
    InitPath = ConvertFromUrl(oPS.getPropertyValue("Work"))
    oFileDialog.SetDisplayDirectory(InitPath)
    
    iAccept = oFileDialog.Execute()
    If iAccept = 1 Then
        DlgOpen = ConvertFromUrl(oFileDialog.Files(0))
    End If
    oFileDialog.Dispose()

End Function
'--------------------------------------------------------------------------------