1

Тема: Вызов функций API через Excel.ExecuteExcel4Macro

Пример восстанавливает все окна на Рабочем столе:

Const GW_HWNDPREV = 3
Const SW_RESTORE = 9

Set Excel=CreateObject("Excel.Application")
Tasks=Array()
hwnd=Excel.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JCC"",""Progman"",""Program Manager"")")
Do
  hwnd=Excel.ExecuteExcel4Macro("CALL(""user32"",""GetWindow"",""JJJ"","& hwnd &","& GW_HWNDPREV &")")
  If hwnd=0 Then Exit Do
  If Excel.ExecuteExcel4Macro("CALL(""user32"",""IsWindowVisible"",""JJ"","& hwnd &")") Then
    If Excel.ExecuteExcel4Macro("CALL(""user32"",""IsIconic"",""JJ"","& hwnd &")") Then
      Push Tasks,hwnd
    End If
  End If
Loop

For Each hwnd In Tasks
  Excel.ExecuteExcel4Macro "CALL(""user32"",""ShowWindow"",""JJJ""," & hwnd & ","& SW_RESTORE &")"
Next

Sub Push(Items,Item)
  ReDim Preserve Items(UBound(Items)+1)
  Items(UBound(Items))=Item
End Sub

Пример перемещает окно с указанным заголовком (в данном случае "Свойства системы", вызывается Win+Pause) на передний план:

Set Excel=CreateObject("Excel.Application") 
hwnd=Excel.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JJC"",0,""Свойства системы"")") 
Excel.ExecuteExcel4Macro("CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & hwnd & ",-1,0,0,0,0,3)")

Метод ExecuteExcel4Macro выполняет код Excel 4.0 и возвращает результат. Функция CALL, используемая в примерах, позволяет вызывать произвольные функции DLL. Синтаксис:

CALL(dll_name, function_name, type_string, arg1, ..., argN)

dll_name - название DLL, которая содержит нужную функцию. Это название должно содержать полный путь, если файл DLL не расположен в папке Windows, Системной папке или папке, указанной в переменной среды PATH.
function_name - имя функции.
type_string - текстовая строка, определяющая тип данных возвращаемого значения и типы данных всех параметров. Первый символ type_string определяет возвращаемое значение.
arg1... argN - параметры функции. Их типы должны соответствовать type_string. Может быть передано до 27 параметров.

Типы данных для type_string:
B - 8-byte floating-point number (IEEE), Transfered by Value, C type double.
C - Zero (null) terminated string (max. length = 255 characters), Transfered by Reference, C type char*
F - Zero (null) terminated string (max. length = 255 characters), Transfered by Reference (modify in place), C type char*
J - 4 bytes wide signed integer, Transfered by Value, C type long int
P - Excel's OPER data structure, Transfered by Reference, C type OPER *
R - Excel's XLOPER data structure, Transfered by Reference, C type XLOPER *

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.