|

Супервозможности 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 Содержание
|