Использование процедур из внешних DLL

                Для примера попробуем объявить и вызвать одну из функций 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’;

text9

Данный код 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 огромное количество, поэтому чтобы осветить этот вопрос полностью придется написать отдельную книгу, поэтому вдаваться в подробности мы не станем.

Bot Development Engine