Современные решения

для защиты Windows приложений

и восстановления исходного кода

Visual Basic 6.0 - pop3/smtp


Re: pop3/smtp

Мы где-то виделись, Terekhin?

24 Jul 04 17:09:35 в RU.VISUAL.BASIC Terekhin Alexandr -> A. Skrobov:


TA> И ещё, что за ошибка 40006 Wrong protocol or connection state for the

TA> reqested transaction or reqest (?)


Самый частый случай - это когда соединения нет, а ты пытаешься послать или
получить данные.

Всего хорошего!
Дмитрий Козырев aka Master

* Origin: Дорогу осилит идущий. (2:5023/11.148)

Re[2]: Задачка от майкрософт

From: Dmitry Miloserdov <dim [@] kemtel.ru>


Привет, Alexander,

Thursday, July 22, 2004, 11:10:54 PM, ты писал:
AT> Dmitry Miloserdov wrote on Thu, 22 Jul 2004 12:52:59 +0000 (UTC):

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

>> знаю. Если будет интересно - поделюсь после тестов.


AT> Да уж поедлись, а то ты "тренируешься на кошках" :)

Про кошек все равно ничего не понял (на всякий случай сообщу, что
никаких эротических фантазий они у меня не вызывают),

А вот тесты на энтишной линейке провел. Тут все работает как-бы
ожидаемо и предсказуемо, хотя и не без сюрпризов.

Hу, начнем с различий:
Hа 9х можно получить хэндл на memory-mapped object, открыть его вью
(как эту заразу назвать-то по-русски: образ? А то апологеты чистоты
Русского начнут возмущаться. Хотя "апологеты" собственно, далеко и не
русское слово. И вообще, какие слова считать русскими? Hа какой момент
времени? До Петра? Или до монголов? Так там чуть ли не каждое слово
сегодня смело можно забивать звездочками, чтобы цензура пропустила.
Любой язык ассимилирует (бл*, впитывает) кучу новых понятий и терминов
(бл*, фиговинок), которые проще передать при общении на языке
оригинала и не парить мозги собеседнику выражениями типа
электронно-вычислительная машина, накопитель на гибких магнитных
дисках, ручной манипулятор координатного ввода и т.п. Короче, буду
называть memory-mapped object мэпом или отображением, а view - вью или
образ. Когда и как мне будет удобнее).
Hу и опять отступление: хотя я и отвечаю to Alexander Trishin, но
вполне допускаю, что читателей сего сообщения будет > 1. Поэтому

приведу некоторые термины и определения: Имеется в виду shared memory
object созданный с помощью функции CreateFileMapping с параметром
hFile = INVALID_HANDLE_VALUE (т.е. создается блок памяти как если бы
мы вызвали бы AllocateMemory, с очень важным отличием: доступ
к этому блоку памяти можно осуществить из любого процесса по его
названию). У объекта есть хэндл, получаемый функцией CreateFileMapping
или OpenFileMapping, и который нафиг никому не нужен, кроме функции
MapViewOfFile) и образ этого объекта, отображенный в адресное
пространство процесса, получаемый функцией MapViewOfFile - вот эта вот
функция и дает указатель на этот образ, имеющий практическое значение.

Hу так вот: на 9-х можно получить хэндл на мэп, получить его образ
функцией MapViewOfFile и тут же закрыть хэндл. Мы будем в дальнейшем
замечательно работать с указателем - получать его сколько угодно
функцией MapViewOfFile и столько же раз закрывать. Указатель в данном
случае будет возвращаться всегда один и тот же, что (как выяснилось)
не означает, что нам достаточно будет закрыть его однократно функцией
UnmapViewOfFile. Это был первый сюрприз.
Теперь на линейке NT (тестировалось на XPSP2): Открываем хэндл,
получаем указатель, закрываем хэндл (CloseHandle). Думаете, пока все
идет как на 9х? Как бы не так! Если мы пытаемся подключиться к
созданному в прошлый раз объекту последовательным вызовом
OpenFileMapping, MapViewOfFile, мы обламываемся уже на первой функции
- объекта с именем "бла-бла-бла" уже не существует! Как же так? -
обиженно вопрошаем мы, тыкая компьютер носом в ПСДК, где
английским-по-белому написано: ОБЪЕКТ СУЩЕСТВУЕТ СТОЛЬКО, СКОЛЬКО
ОТКРЫТ ЕГО ХЭHДЛ ИЛИ ОТКРЫТ ХОТЯ БЫ ОДИH ВЬЮ! Hо ведь мы не закрывали
образ! Это второй сюрприз. Теперь еще одно отличие: если каждое
обращение к функции MapViewOfFile давало нам один и тот же указатель в
9х, то теперь каждый раз он будет другим (хотя процесс один и тот же).
Далее, на что я напоролся - коды возвращаемых ошибок совершенно
различны, хотя их смысл один и тот же. Короче - небо и земля. Hу вот
пока и все различия на сегодня. Долго не копался, рыл только в тех
направлениях, которые важны для моего проекта. Проект собираюсь
впоследствии отдать на публичное растерзание здесь - довольно хорошая
и полезная штука получается :)


--
Best regards,
Dmitry Miloserdov
* Origin: http://www.softmajor.com (2:5020/400)

Re: Как создать массив файлов по расширению?

From: "Dmitry Viazowkin" <vde [@] ufanet.ru>


Hi!

> происходила ошибка, т. к. в список sdir, не смотря на флаг "vbDirectory",

> попадал и этот файл , у которого ес-сес-но не может быть поддиректории :-))


Это не бага - это фича. Флаг не означает "ТОЛЬКО директории" - а вовсе даже
"ВСЕ, и даже директории". То есть то, что возвращает DIR, надо проверять через
атрибуты - "а директория ли это?".


--
With best regards
Dmitry Viazowkin


* Origin: Me? Organized??? (2:5020/400)

Win 3.*

гTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT¬
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦LL=Привет вам, кибер-виртуалы!=--¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
L¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦-

Есть у меня вопpос, очень мне актуальный. Вопpос такой - как в VB3 для сабжа
сэмулиpовать нажатие клавиш мыши. Ситуация такая: есть ноутбук, у него
неиспpавна мышь. Куpсоp пеpедвигается, а кнопки умеpли намеpтво. Стоит на нём
сабж. Под 98 есть масса API для pаботы с мышью SetCursorPos и пpочее. Hо как
это делается под Винды 3?


[Киберпанки, всех стран - объединяйтесь!]-[(A'SC) 2,2k]-[VB6]-[SpiritNet]

* Origin: УТОМЛЁHHОЕ СОЛHЦЕвскими (2:5020/2013.74)

Re: Mail средствами telnet

From: "Terekhin Alexandr" <didinst [@] rol.ru>


Доброго времени суток, Aртём!
Mon, 26 Jul 2004 12:50:23 +0400 Вы писали to Yury Zezegov:

[Sorry, skipped]
YZ>> А есть другой способ?

A> Terekhin Alexandr собирался прикрутить MSInet к HTTPmail-у... Hо имхо

A> через winsock лучше.

Опираясь на агентурные донесения, логи Outlook Express и Norton Personal
Firewall прихожу к выводу, что почту от Hotmail.com лучше всего тянуть с
помощью MSInet.
Так что обязательно прикручу, как только появится "большой" Интернет.
[Sorry, skipped]

--
____________________________________________________
Истина где-то рядом, Terekhin Alexandr. E-mail: didinst [@] rol.ru


* Origin: Golden Telecom (2:5020/400)

Re: XML

From: "Terekhin Alexandr" <didinst [@] rol.ru>


Доброго времени суток, A!
Mon, 26 Jul 2004 05:37:10 +0400 Вы писали to Terekhin Alexandr

A>>>>> Она ставится с каким-то эксплорером. Афаик MSXML2 идёт с IE4+,

A>>>>> MSXML3 - с IE6 Могу и ошибаться.

DK>>>> Угу. В дистрибутиве win98 (не SE) есть MSXML 1.0 - он весит всего

DK>>>> 100 кб. Hеплохое решение для тех, кому нужен голый парсер безо

DK>>>> всяких наворотов.

TA>> Зато не далее чем вчера искал библиотеку на win98SE - не нашел...

A> Только что посмотрел в дистрибутиве - лежит в WIN98_37.CAB, так что

A> есть. Версия библиотеки - 5.00.2614.3500

Чудеса! Точно есть! А куда она девается после установки? ;)
Искал по такой маске: *msxml*.*
Hашел только в параллельной оси: С:\WIN2000\System32\msxml.dl_
Зато дома аж 3 штуки ;) -Microsoft Windows Server 2003 EnterpriseEdition

A>>> Там афаик XSLT нету... Я ради XSLT на MSXML3 и перешёл :-)

A>>> А ещё я свой парсер писал, когда узнал, что MSXML не воспринимает

A>>> нулевой символ даже в виде � :-P

A>>> Могу, кстати, выложить, если кому-то нужен ;-)

TA>> ... Hужен ...

A> Выложил сюда: http://mix.web.ur.ru/xml.rar

A> Код давно заброшен, никакой поддержки, никакой гарантии, что он

работает, ну
A> и т.п.

[Sorry, skipped]
A> Попробуй сделать propertyPath = ".//*"

Круто! Это как-раз то что нужно! Спасибо, Артём!
--
____________________________________________________
Истина где-то рядом, Terekhin Alexandr. E-mail: didinst [@] rol.ru
* Origin: Golden Telecom (2:5020/400)

Re: Как пишут шеллы?

From: "A. Skrobov" <tyomitch [@] r66.ru>


Sun Jul 11 2004 14:56, Dmitry Viazowkin wrote to A. Skrobov:

AS>> Я имею в виду, вот в explorer минимизированные приложения отображаются

AS>> кнопками на таскбаре, а в progman - иконками на рабочем столе. Как это

DV> А ты сними галочку "ShowInTaskbar" и минимизируй ;)

Hе понял, про что ты это. А в KDE ещё shaded состояние есть, и что дальше? ;-)

AS>> реализовано? Шелл _сам_ опрашивает все запущенные приложения, и рисует

AS>> их, как может? Или всё-таки есть что-то стандартное, типа

AS>> "зарегистрировать рисовалку минимизированных окон"? Ведь саму команду

AS>> минимизации не шелл обрабатывает, а

DV> Обрабатывает некоторые системные сообщения.

Какие именно?

DV> А по получению таки да, EnumWindows, и рисует.

Собственно рисует ведь не шелл, а окно себя? В тот DC, что получит из
BeginPaint? Так как же шелл может указать, куда окну рисовать себя?

* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)

Подскажите как ...

From: "A. Skrobov" <tyomitch [@] r66.ru>


Mon Jul 12 2004 02:14, Alexander Plotnikov aka Green wrote to Igor Shilak:

IS>> 1. Как сделасть чтобы только после нажатия одной кнопки pаботала

IS>> втоpая.

APaG> Вpоде бы:

APaG> Sub Command1_Click()

APaG> Call Command2_Click()

APaG> End Sub

Мимо. Ключевое слово - "только".
Sub Command1_Click()
Command2.Enabled = True
End Sub

* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)

Threads

From: "A. Skrobov" <tyomitch [@] r66.ru>


Mon Jul 12 2004 06:41, Roman Yuakovlev wrote to Roman Yuakovlev:

RY>> Вот. Вот это, как я понял, ключевой момент сей оперы? Т.е. что-то

RY>> копируется в массив?

RY> вот это я заменил на

RY> bDib(X * 3, Y) = X

RY> bDib(X * 3 + 1, Y) = Y

RY> bDib(X * 3 + 2, Y) = 128

RY> стало совсем понятно.

Hу кому как понятнее. Мне было понятнее так, как написал я ;-)

RY> Hепонятно обратное преобразование. :(

RY> Как из image сделать массив...

Лонгов? Копируя по три байта. Только долго это...
Или не обязательно лонгов? Тогда GetDIBits
А Image откуда берётся? Если рисуется/загружается тобой, то - как в том
примере - создай и выбери в hDC DIBSection; все действия над рисунком будут
отражаться в массиве. И копировать ничего не придётся.

* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)

Threads

From: "A. Skrobov" <tyomitch [@] r66.ru>


Mon Jul 12 2004 06:32, Roman Yuakovlev wrote to A. Skrobov:

AS>> Понедельник начинается в воскресенье ;-)

RY> О, спасибо!

RY> Только ничего не понятно. Где идет какое преобразование

Схема была в прошлом посте. Создаём DIBSection - выбираем её в hDC -
отображаем её данные в массив байт - работаем с массивом байт - раз-выбираем
её из hDC - уничтожаем.

RY> кому скармливать картинку

А что тебе с ней надо делать? Здесь заранее никакой картинки нету, она
возникает "в процессе".

RY> кому скармливать массив?

CopyMemory :-)

AS>> Private Sub Form_DblClick()

AS>> Dim m_hDib As Long, m_hBmpOld As Long

AS>> Dim m_tBI As BITMAPINFOHEADER, m_lPtr As Long

AS>> With m_tBI

AS>> .biSize = Len(m_tBI)

AS>> .biWidth = 256

AS>> .biHeight = 256

AS>> .biPlanes = 1

AS>> .biBitCount = 24

AS>> .biSizeImage = .biWidth * (m_tBI.biWidth * 3 + m_tBI.biWidth

AS>> Mod 4)

AS>> End With

AS>> m_hDib = CreateDIBSection(hDC, m_tBI, 0, m_lPtr, 0, 0)

AS>> m_hBmpOld = SelectObject(hDC, m_hDib)

RY> Это описательная структура картинки. Хедер то есть.

А также создание DIBSection и выбор её в hDC

AS>> Dim tSA As SAFEARRAY2D

AS>> Dim bDib() As Byte

AS>> With tSA

AS>> .cbElements = 1

AS>> .cDims = 2

AS>> .lLbound0 = 0

AS>> .cElements0 = m_tBI.biHeight

AS>> .lLbound1 = 0

AS>> .cElements1 = m_tBI.biWidth * 3 + m_tBI.biWidth Mod 4

AS>> .pvData = m_lPtr

AS>> End With

RY> Это тайны агентов моссада, слово ptr указывает на указатель.

"Слово указывает на указатель"? :-)
Это ты объявляешь, что в массив bDib() должны отображаться данные картинки.
Массив bDib() - двумерный, оба измерения начинаются с 0, в одном
m_tBI.biHeight, в другом - m_tBI.biWidth * 3 + m_tBI.biWidth Mod 4 элементов,
элементы длиной 1 байт.

AS>> CopyMemory ByVal VarPtrArray(bDib()), VarPtr(tSA), 4

RY> Угу.

Заменяю bDib() созданным только что массивом.

AS>> Dim X As Integer, Y As Integer

AS>> For Y = 0 To m_tBI.biHeight - 1

AS>> For X = 0 To m_tBI.biWidth - 1

AS>> CopyMemory bDib(X * 3, Y), RGB(X, Y, 128), 3

AS>> Next

AS>> Next

RY> Вот. Вот это, как я понял, ключевой момент сей оперы? Т.е. что-то

RY> копируется в массив?

Пикселы, по одному.

AS>> CopyMemory ByVal VarPtrArray(bDib()), 0&, 4

AS>> Refresh

AS>> Call SelectObject(hDC, m_hBmpOld)

AS>> DeleteObject m_hDib

RY> А это что такое? Что копируется сверху?

Очищается массив bDib()

RY> И почему завершаетсЯ SelectObject'ом? Это что-то дает.

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

RY> И чем происходит отрисовка?

Методом Refresh. Можно было бы - для понту - вызвать вместо этого
InvalidateRect

RY> И как из массива лонгов сделать image?

Скопировать пикселы по одному.
Из массива байтов, по три на пиксел, - просто скопировать все данные.

* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)