Супервозможности Delphi. Работа с API функциями Windows

Xakep, номер #035, стр. 035-069-3


ИТОГ!!!

Вот и все! Наш пример удался, можешь скомпилить и проверить. Мы написали прогу, которая использует WinAPI, и ты даже не заметил этого. Я прав? А как же функция EnumWindowsProc или же SendMessage? Это самые настоящие WinAPI функции. RegisterServiceProcess - тоже относится к WinAPI, но нам пришлось ее описать вручную, потому что ее описания в стандартных библиотеках нет.

Наша программа не видна по трем клавишам и без проблем прошла тест в Win98. Единственное, что я тебе не рассказал, так это как я делаю задержку в 100 мс (в исходнике помечено комментариями). Но это уже отдельная история, и всему свое время.

Ну а на сегодня хватит. Как всегда, ты можешь забрать исходники с моего сайта. www.cydsoft.com/vr-online/.

Листинг1

program Project1;

uses windows, Messages;

procedure registerserviceprocess; external 'kernel32.dll'

name 'RegisterServiceProcess';

//Функция EnumWindowsProc

function EnumWindowsProc(h: hwnd): BOOL; stdcall;

begin

SendMessage(h,WM_SETTEXT,0,lparam(PChar('Я за тобой наблюдаю...')));

end;

//Начало программы

var

h:THandle;

begin

asm

push 1

push 0

call registerserviceprocess;

end;

//Запускаю цикл

while true do

begin

//Запускаю перечисление всех окон

EnumWindows(@EnumWindowsProc,0);

//Делаю задержку в 100 мс.

h:=CreateEvent(nil, true, false, '');

WaitForSingleObject(h, 100);

CloseHandle(h);

end;

end.

Миф о большом коде Delphi

Есть заблуждение, что в Delphi нельзя создать маленькие утилиты небольшого размера. Это не так. Сегодня я опровергнул это, потому что мой пример занимает чуть больше 8 кило. Просто я не использовал библиотеку VCL.

С++ тоже не может создавать компактные утилиты, потому что MFC не менее громоздкий и жрет очень много места. Только на чистом С, можно написать что-нибудь действительно маленькое (не используя MFC).

Delphi без VCL - это то же самое, что и С++ без MFC. Приходится писать проги на голом языке с использованием только API функций Windows. Но это на много сложнее, поэтому здесь встает дилема: либо потерять пару сотен кило, но быстро и легко написать даже самую сложную утилу, либо писать все руками, но дать юзеру компактную софтину. Каждый делает свой выбор.

Назад на стр. 035-069-2  Содержание