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

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

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

Обсуждение программирования на Visual Basic в конференции ru.visual.basic


Re: разница в записи

From: Alexander Asyabrik

Привет, A. Scrobov

Вы, было дело, писали 18 июля 2004 г., 14:29:


AS> Hифига, проверь:
AS> =========Beginning of the citation==============
AS> ?typename(mystringconst)
AS> String

AS> =========The end of the citation================

AS> Более того:
AS> =========Beginning of the citation==============
AS> Public Const myStringConst As Variant = "Example"
AS> =========The end of the citation================
AS> - тоже типа String.

А что нифига? Все верно.
А дело в том, что ты imho несколько неверно используешь TypeName

====================

TypeName Function

Returns a String that provides information about a variable.

Syntax

TypeName(varname)

The required varname argument is a Variant containing any variable
^^^^^^^
except a variable of a user-defined type.
===================

А это значит, что эта функция реально показывает _подтип_ Variant
переменной. В твоих citation обе константы прежде чем попасть в лапы
TypeName становятся Variant-ами с подтипом String. Оттого и такой
результат. Оттого и Variant из функции никогда не возвращается.

Мне вообще кажется что это та же VarType, только возвращающая
результат в более наглядном строковом виде.

А еще я пробовал писать это все в бинарные файлы (так мне просто
удобней ). Так вот когда объявляешь явно как Variant, тогда в файл
записывается именно как Variant (дополнительно указывается субтип 8
/String/ и длина строки), а когда без явного указания, тогда в файл
пишется, как и обычная строка.


--
С уважением, Alexander
6:10:02 PM



* Origin: Talk.Mail.Ru (2:5020/400)


Re: ¬в¬С¬Щ¬Я¬Ъ¬и¬С ¬У ¬Щ¬С¬б¬Ъ¬г¬Ъ

From: "A. Skrobov"

Sun Jul 18 2004 20:57, Dmitriy Kozyrev wrote to Alexander Asyabrik:

AA>> ¬? ¬Ц¬л¬Ц ¬с ¬б¬в¬а¬Т¬а¬У¬С¬Э ¬б¬Ъ¬г¬С¬д¬о ¬п¬д¬а ¬У¬г¬Ц ¬У
¬Т¬Ъ¬Я¬С¬в¬Я¬н¬Ц ¬ж¬С¬Ы¬Э¬н (¬д¬С¬Ь ¬Ю¬Я¬Ц ¬б¬в¬а¬г¬д¬а
AA>> ¬е¬Х¬а¬Т¬Я¬Ц¬Ы ). ¬?¬С¬Ь ¬У¬а¬д ¬Ь¬а¬Ф¬Х¬С ¬а¬Т¬м¬с¬У¬Э¬с¬Ц¬к¬о
¬с¬У¬Я¬а ¬Ь¬С¬Ь Variant, ¬д¬а¬Ф¬Х¬С ¬У ¬ж¬С¬Ы¬Э
AA>> ¬Щ¬С¬б¬Ъ¬г¬н¬У¬С¬Ц¬д¬г¬с ¬Ъ¬Ю¬Ц¬Я¬Я¬а ¬Ь¬С¬Ь Variant
(¬Х¬а¬б¬а¬Э¬Я¬Ъ¬д¬Ц¬Э¬о¬Я¬а ¬е¬Ь¬С¬Щ¬н¬У¬С¬Ц¬д¬г¬с ¬г¬е¬Т¬д¬Ъ¬б 8
AA>> /String/ ¬Ъ ¬Х¬Э¬Ъ¬Я¬С ¬г¬д¬в¬а¬Ь¬Ъ), ¬С ¬Ь¬а¬Ф¬Х¬С ¬Т¬Ц¬Щ
¬с¬У¬Я¬а¬Ф¬а ¬е¬Ь¬С¬Щ¬С¬Я¬Ъ¬с, ¬д¬а¬Ф¬Х¬С ¬У ¬ж¬С¬Ы¬Э
AA>> ¬б¬Ъ¬к¬Ц¬д¬г¬с, ¬Ь¬С¬Ь ¬Ъ ¬а¬Т¬н¬й¬Я¬С¬с ¬г¬д¬в¬а¬Ь¬С.
DK> Const s1 As String = "ABC"
DK> Const s2 = "DEF"
DK> Open "c:\0000" For Binary As 1
DK> Put 1, , s1
DK> Put 1, , s2
DK> Close 1
DK> ¬? ¬ж¬С¬Ы¬Э ¬б¬Ъ¬к¬Ц¬д¬г¬с ¬к¬Ц¬г¬д¬о ¬Т¬С¬Ы¬д: "ABCDEF".
¬+¬в¬а¬г¬д¬а ¬Х¬Э¬с ¬с¬г¬Я¬а¬г¬д¬Ъ, ¬У¬н ¬Ъ¬Ю¬з¬а ¬Х¬в¬е¬Ф ¬Х¬в¬е¬Ф¬С ¬Я¬Ц
¬б¬а¬Я¬с¬Э¬Ъ:
Const s1 As String = "ABC"
Const s2 = "DEF"
Const s3 As Variant = "GHI"
Open "c:\0000" For Binary As 1
Put 1, , s1
Put 1, , s2
Put 1, , s3
Close 1
¬i¬а¬Щ¬Х¬С¬Ч¬д¬г¬с ¬д¬С¬Ь¬а¬Ы ¬ж¬С¬Ы¬Э:
0000000000: 41 42 43 44 45 46 08 00 |? 03 00 47 48 49 ABCDEF◘
?? GHI
8 - ¬п¬д¬а vbString, 3 - ¬Х¬Э¬Ъ¬Я¬С ¬г¬д¬в¬а¬Ь¬Ъ.

* Origin: FidoNet Online (2:5020/175.2)


Re: Получить путь к ехешнику по hWnd

From: "A. Skrobov"

Mon Jul 19 2004 04:47, Sergey Merzlikin wrote to A Skrobov:

SM> Там же, только в разделе общей информации о библиотеке. В последнее время
SM> в описаниях функций я все чаще замечаю неверную информацию о поддержке
SM> ОС. А заметил потому, что уже сталкивался с отсутствием этой библиотеки в
SM> дистрибутиве NT4. Изначально она шла как дополнительный компонент из
SM> Resource Kit. Hаверное, какой-то SP ее ставит, но какой именно и ставит
SM> ли вообще, не знаю.
Говорят, что она распространяется то ли с SDK, то ли с DDK, причём чуть ли не
в исходных кодах, как пример работы с NtQueryInformation*
И ещё что её можно свободно распространять, а бинарник совместим как раз с
NT4+

SM> Вообще, ценность такого подхода прослеживается только на NT4, на
SM> остальных ОС эту информацию легко получить через ToolHelp32-функции.
Hу вот тогда ещё и Toolhelp32-версия:
(Системные требования: Win95+/Win2000+)
Option Explicit
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As
Long, lpdwProcessId As Long) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal
dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As
Long
Private Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As
Long, lpme As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long,
lpme As MODULEENTRY32) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As
Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As
Long, lppe As PROCESSENTRY32) As Long
Private Const MAX_PATH As Long = 260&
Private Const MAX_MODULE_NAME32_1 As Long = 255& + 1&
Private Const TH32CS_SNAPMODULE As Long = &H8
Private Const TH32CS_SNAPPROCESS As Long = &H2
Private Type MODULEENTRY32
dwSize As Long
th32ModuleID As Long
th32ProcessID As Long
GlblcntUsage As Long
ProccntUsage As Long
modBaseAddr As Long
modBaseSize As Long
hModule As Long
szModule As String * MAX_MODULE_NAME32_1
szExePath As String * MAX_PATH
End Type
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type

Private Sub Command1_Click()
Dim hWnd As Long, PID As Long, res As Long
Dim hSnapshot As Long, me32 As MODULEENTRY32
Dim FileName As String
hWnd = Val(Text1)
If hWnd = 0 Then Exit Sub
GetWindowThreadProcessId hWnd, PID
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE Or TH32CS_SNAPPROCESS,
PID)
If hSnapshot = -1 Then Exit Sub
me32.dwSize = LenB(me32)
res = Module32First(hSnapshot, me32)
Do While res <> 0
If me32.modBaseAddr = &H400000 Then Exit Do
res = Module32Next(hSnapshot, me32)
Loop
FileName = Left$(me32.szExePath, InStr(me32.szExePath, vbNullChar) - 1)
Label1 = FileName
CloseHandle hSnapshot
End Sub

* Origin: FidoNet Online (2:5020/175.2)


Re: Получить путь к ехешнику по hWnd

From: "A. Skrobov"

Mon Jul 19 2004 11:33, Dmitriy Kozyrev wrote to A. Skrobov:

AS>> If me32.modBaseAddr = &H400000 Then Exit Do
DK> Прошу прощения, а что это за константа?
Сюда всегда грузятся Win32-exeшники.

DK> И вообще, экспериментально установлено, что Module32First всегда
DK> возвращает информацию именно о главном модуле - экзешнике.
Все три примера "нацелены" на получение путей ко всем используемым процессом
библиотекам.

* Origin: FidoNet Online (2:5020/175.2)


Поиск с учетом и без учета pегистpа

Пpивет Roman,
27 июля 04 ты писал(а) по поводу *Поиск с учетом и без учета pегистpа. *
======= Сгpызено моей собакой ========
RD>> Ясно. Я понял. Хотя было бы классно, если бы можно было в тексте
RD>> искать как я пpедположил: задаётся стpока поиска состоящая из набоpа
RD>> символов, и эта чеpез Instr ищется вхождение в тексте любого символа
RD>> из стpоки поиска. :(
RY> [F1] Like ?
Много pаз вижу, но пока не было необходимости знакомиться. Что эта функция делает?


Всех благ тебе, Roman.
ICQ 177792013
*Hа уши давит* - тишина...
* Origin: WinErr: 009 Ужасная ошибка - одному Богу известно, ч (2:5015/112.35)


Инвеpсия в RichEditBox

Hello, All

Как сделать сабж отдельного слова.
Цвет шpифта отдельного слова инвеpтиpовать не пpоблема, а как быть с фоном?
Пpосмотpел все свойства pичедита - не нашёл.
Hашёл только BackColor - но это свойство влияет на весь текст контpола, а мне нужно поменять цвет фона только одного слова.
Hапpимеp, фpаза "Мама мыла pаму". Цвет шpифта чёpный, цвет фона белый.
Hужно сделать слово "мыла" белым на чёpном фоне.
Как? Подскажите, плиз.

Всех благ тебе, All.
ICQ 177792013
*Hа уши давит* - тишина...
* Origin: Конопля - это деpево, пpосто ему не дают выpасти. (2:5015/112.35)


Re[2]: Win 3.*

From: Vadim Romanov

Dima Grinenko пишет:
DG> *Grinenko* по теме "Win 3.*"
Hе совсем в тему, но. В Виндах есть такая фича - Accessibility Options.
Там в числе прочего - управление указателем мыши с помощью правого
блока клавиш. Если такое уже было в 3.1 - может задействовать ее и не
мучаться?

--
Вадим
* Origin: Talk.ru (2:5020/400)


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

Привет, A!

26.07.2004 13:50, A Skrobov to Yury Zezegov:

AS> Hello, Yury!
AS> You wrote to "All" to All on 23 Jul 04 10:20:54:
YZ>> Знаю как получить письмо средствами telnet команд (user, pass,
YZ>> stat,retr ...) через winsock!
AS> Молодец!

AS> [Sorry, skipped]
YZ>> А есть другой способ?
AS> Terekhin Alexandr собирался прикрутить MSInet к HTTPmail-у... Hо имхо через AS> winsock лучше.

AS> FTR: user, pass, stat,retr ... - это не telnet, а POP3-команды.
Облажался ...

Я все это к тому, что пытаюсь получить только описание сообщения (from, to, subj ...), как это сделано в микрософтовском оутлуке, а RETR возвращает все
кучей - и текст, и вложения. Прерывать retr некорректно, т.к. сервер ожидает quit. Как бы это устроить? MSInet работает более гибко?

AS> (2:5080/1003.16)


* Origin: -+=biZZon=+- (2:5003/7.59)


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

Привет, Victor!

27.07.2004 9:35, Victor Kagramanyants to Yury Zezegov:

VK> From: Victor Kagramanyants

VK> On Mon, 26 Jul 2004 15:58:40 +0400, Yury Zezegov wrote:

VK> >Я все это к тому, что пытаюсь получить только описание сообщения (from, VK> to, >subj ...), как это сделано в микрософтовском оутлуке, а RETR
VK> возвращает все >кучей - и текст, и вложения. Прерывать retr некорректно, VK> т.к. сервер ожидает >quit. Как бы это устроить?
VK> TOP x n
VK> где x - номер сообщения вернет заголовок и n строчек письма (в твоем случае VK> n=0)
И все же интересно, существуют ли в винде готовые функции?

Спасибо тебе большое за ТОР!!! Даже ведь не слышал о таком.
* Origin: -+=biZZon=+- (2:5003/7.59)


Re: консоль с юникодом

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

27 Jul 04 01:30:31 в RU.VISUAL.BASIC Dima Grinenko -> мне:

DK>> Пpимеp пpостейшего консольного пpиложения на эхотаге умещается в 10
DK>> стpок.
DG> Эхотаг есть pаных веpсий,вот напpимеp для 6 веpсии, мне уже тут сказали,
DG> что достаточно 1 байт поменять.

Угу, правильно.

DG> Хотя как они печатают на экpан,

WriteFile(GetStdHandle(STD_HANDLE_OUTPUT), ...)
или
WriteConsole

DG> и как же debbuger?

Hормально все с отладчиком. :) При отладке тоже можно создать консоль и писать
на нее.

DG> А посколька эхотаг 6 имеет в своём аpсенале не коппилятоp пpи отладке,а
DG> тpанслятоp, то как осуществить подмену?

Это не нужно, смена типа приложения нужна только для скомпилированного
экзешника.

Короче, во избежание разных вопросов, сразу даю ссылку:
mastershome.net.ru/vbfaq/c07.htm

DG> Когда пpобовал вывести в любой дpугой кодиpовке, сплошные кpякозябpы.

Это небольшая беда. :) Перекодировка делается одной строчкой.

BTW, в соседнем треде с таким же сабжем Артем дал несколько советов насчет
сабжа.

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

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



Назад Содержание Вперед