Для примера попробуем объявить и вызвать одну из функций WinAPI. Все WinAPI функции находятся в Dll user32.dll и kernell.dll — стандартная библиотека Windows.
function keybd_event(bVk: Byte; bScan: Byte; dwFlags: cardinal; dwExtraInfo: Integer): Longint; external ‘keybd_event@user32.dll stdcall’;
Данный код 10 000 раз нажмет и отпустит кнопку А, если во время выполнения кода передать фокус в какой-нибудь текстовый редактор, то в этом можно наглядно убедиться ).
В заголовочном файле Windows в IDE Delphi эта процедура определена следующим образом:
procedure keybd_event(bVk: Byte; bScan: Byte; dwFlags: DWORD; dwExtraInfo: UIntPtr); stdcall;
т.к. типы данных DWORD и UIntPtr в нашем скрипте не определены, то мне пришлось заменить их на аналогичные известные нашему скрипту (а может и не очень аналогичные, но весьма похожие, главное не передать что-нибудь такое чего эта функция не сможет переварить).
Более того у меня эта «Процедура» у меня объявлена как функция — это не вполне корректно, но интерпретатор проглотил и это, и код выполнил. Хотя правильней все же сделать ее процедурой, и в любом случае не стоит ожидать, что такая «функция» будет возвращать какое-то значение, т.к. процедуры значений не возвращают. Аналогичным образом можно объявить и функцию поиска окна
function FindWindow(C1, C2: PChar): Longint; external ‘FindWindowA@user32.dll stdcall’;
и все остальные API функции. Нашему скрипту также не известны значения констант типа KEYEVENTF_KEYUP или VK_MENU, поэтому такие константы нужно заменять числами. Числовые значения их можно найти в том же модуле Windows в Delphi, или в интернете. Для примера приведу значения констант возможных для функции keybd_event:
const
{$EXTERNALSYM KEYEVENTF_EXTENDEDKEY}
KEYEVENTF_EXTENDEDKEY = 1;
{$EXTERNALSYM KEYEVENTF_KEYUP}
KEYEVENTF_KEYUP = 2;
{$EXTERNALSYM KEYEVENTF_UNICODE}
KEYEVENTF_UNICODE = 4;
{$EXTERNALSYM KEYEVENTF_SCANCODE}
KEYEVENTF_SCANCODE = 8;
В остальном же работа с этими функциями хорошо описана в интернете, а функций WinAPI огромное количество, поэтому чтобы осветить этот вопрос полностью придется написать отдельную книгу, поэтому вдаваться в подробности мы не станем.