СообЧа > База Знаний > Программирование

Вопрос

Где можно достать «музыку» написанную на QBasic'e

Ответ

Песня о зеленом кузнечике:

Play "mft240AEAEAG#G#P4G#EG#EG#AAP4"
Play "AEAEAG#G#P4G#EG#EG#AP2"
Play "ABB8B8B4B4>CC8C8C8CCC<BAG#AAP4"
Play "ABB8B8B4B4>CC8C8C8CCC<BAG#AP4"

Павел Сурменок

Вопрос

Народ, подскажите, где искать стандартные картинки — например «дискетка» — для сохранения, «крестик» — для удаления и т.д. Хочу на кнопочку поместить?

Ответ

В папке VisualStudio поройся, там вагон иконок (и маленькая тележка)

http://www.foood.net/
http://ico.brush.ru/

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

Создаешь новый проект, из предложенного списка выбираешь "Application Wizard", тыкаешь на кнопку <Next>, пока не дойдешь до "Вид Toolbar'ы", набираешь все, что тебе нужно, и, когда завершаешь, на MainФорме будет ImageList с твоими иконками. Копируй его (Edit/Copy) и вставляй на свою форму в своем проекте. А там видно будет.

Из конференции VB

Вопрос

Не могли бы вы подсказать, где можно раздобыть методички по Pascal-ю. Всяческие задания. Если можно то пожалуйста укажите ссылочки.

Ответ

Посмотри следующие линки:

www.ugatu.ac.ru
www.catalog.alledu.ru
www.school.holm.ru
www.pascal.km.ru

Из конференции Expert_FAQ

Можно еще вот тут поискать:
http://altnet.ru/~mcsmall/cat_inf.htm

Денис Смолин

Вопрос

Где мне найти книгу по АЗАМ программирования?

Все эти книги <для чайников> написаны, на самом деле, как минимум, для электронных самоваров, а я еще не дорос.

Что такое «xor», «call», «je» (и чем это отличается от «ja»), «eax», прочие так называемые <регистры> и <операции>, что все это значит — где об этом можно прочитать по-людски, на человеческом языке?

Ответ

Очень советую посетить сайт http://hi-tech.nsys.by:8100/ там можно найти очень грамотно и со вкусом сделанные материалы по программированию на асме. Не пожалеешь :)

Из конференции Expert_FAQ

Вопрос

Кстате, кто-нить знает, где можно поживиться исходниками (естественно, Си'шными) таких компонентов, как ComboBox, ListBox, MSHFlexGrid?

Ответ

На codeproject.com посмотри, там есть куча хороших контролов с исходными кодами (в основном на C#).

Павел Сурменок

Вопрос

Где я могу почитать о такой вещи, как субклассинг?

Ответ

http://www.vbnet.ru — там классная статья была от Ивана (Сообщения в виндовс).
http://msdn.microsoft.com
или просто в MSDN.

Артем Кривокрисенко

Вопрос

Есть ли насчет directx полезные доки или книги?

Ответ

DirectX SDK — там инфы немного есть.

Но непосвященному в этом разобраться трудно. Если еще учесть, что документация только про C++. Я как-то пытался чего-то добиться в области Direct3D 9, но абсолютно ничего сделать не смог, даже банального отображения на экране 3d-модели.

Из конференции VB

Вопрос

Есть ли программы «декомпиляторы», которые EXE файл преобразуют в исходный текст?

Ответ

Это невозможно. Полный текст программы в исходном виде из exe'шника восстановить не удастся. Если exe'шник выл скомпилирован со включенными опциями «Debug information» и «Local symbols», то можно попробовать получить более-менее удобочитаемый асм'овский код, где у переменных и процедур будут их нормальные исходные имена. Компилятор сохраняет текст, описывающий формы/диалоги в секции ресурсов exe файла. Можно взять что-нибудь вроде Restorator'а и посмотреть…

Из конференции Expert_FAQ

Для некоторых «ненастоящих» ехе существуют более-менее сносные компиляторы. Так, можно декомпилировать VB3 (DoDi), Flash (Flare) и некоторые другие. Кроме того, существуют программы, пытающиеся перевести дизассемблерированный листинг на язык высокого уровня, использую специфические свойства компилятора, например Delphi (DeDe). Некоторые из таких программ можно найти на wasm.ru, в разделе «Инструменты».

sharp-c

Вопрос

Как в Excel 2000/XP отключить предупреждение о наличаи в документе макросов? Не обязательно кодом. Можно и вручную.

Ответ

Сервис — Макрос — Безопасность. Отмечаем Низкая, жмем Ok.

Павел Сурменок

Вопрос

Как в Excel VBA при сохранении файла методом SaveAs сделать, чтобы имя файла попадало в список ранее открывавшихся файлов?

Ответ

ActiveWorkbook.SaveAs Filename:="C:\aaaa.xls", AddToMru:=True

Вопрос

Как в своем приложение в системе XP включить поддержку улудшенных элементов интерфейса?

Ответ

Создать XML файл с именем запускаемого приложения .manifest Например Excel.exe.manifest

А вот заготовка манифеста из одного примера MS для VB .NET (с сайта microsoft.com). Нужно только подставить название версию и описание приложения туда, где квадратные скобки.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
  xmlns="urn:schemas-microsoft-com:asm.v1"
   manifestVersion="1.0">
<assemblyIdentity
  version="[APPLICATION_VERSION]"
  processorArchitecture="X86"
  name="[APPLICATION_NAME]"
  type="win32" />
<description>[APPLICATION_DESCRIPTION]</description>
<dependency>
  <dependentAssembly>
   <assemblyIdentity
   type="win32"
  name="Microsoft.Windows.Common-Controls"
  version="6.0.0.0"
  processorArchitecture="X86"
   publicKeyToken="6595b64144ccf1df"
   language="*" />
     </dependentAssembly>
</dependency>
</assembly>

Из конференции VB

Вопрос

Как надежно удалить программу после завершения ее работы, т.е. запускаем EXE-шник, закрываем, а после этого он сам себя удаляет?

Ответ

Создай файл *.bat такого содержания:

:Sub_Main
@Del /F /Q MyApp.exe
@Cls
@If Exist MyApp.exe Goto Sub_Main
@Del /F /Q Killer.bat

И запусти перед выходом (желательно, в скрытом виде). Как только прога завершится, никаких следов ее пребывания не останется.

Savenger

Вопрос

Вот все говорят что вся инфа в двоичном коде, я понимаю что например в картинке или звуке куча едениц и нулей, а вот как это все преобразуется в картинку или звук?

Ответ

Очень просто — посмотрите на картинку

0000000 если присмотреться -

0111110 то можно увидеть 11111

0110000 букву 'Е' 11

0111110 11111

0110000 11

0111110 11111

0000000

Наши органы чувств (зрение и слух) обладают двумя важными качествами. Во-первых, если что-то состоит из очень маленьких кусочков — то это что-то нам кажется целым. Например, мы сами состоит из атомов, однако сами же этого и не замечаем. Во-вторых, мы умеем автоматически соединять фрагменты в единое целое. Например, даже плохо пропечатанный или полустертый текст мы можем прочесть. И хотя внешний наш мир — непрерывен, мы можем сохранять последовательность маленьких кусочков. И восстанавливая звук/изображение из этих маленких кусочков — мы либо не замечаем промежутка между ними, либо наш мозг услужливо заполняет паузы предыдущим кусочком. Если картинка черно-белая, то ее легко превратить в двоичный вид.

Рисуем сетку, и если в клеточки боле половины черного, то ставим в клеточку 1, а в остальные 0. И получаем двоичный вид картинки. Если картинка цветная, то нам нужно как-то сохранить цвет. Мы можем каждому цвету приписать число. Цвета можно нумеровать по-разному. (RGB — по вкладу каждого из 3 основных цветов). И тогда в каждую клеточку мы место 0/1 запишем число. А любое число в последовательность 0 и 1

записывается очень легко:

1= 0001 5= 0101 9= 1001 13= 1101

2= 0010 6= 0110 10= 1010 14= 1110

3= 0011 7= 0111 11= 1011 15= 1111

4= 0100 8= 1000 12= 1100 и т.д.

Даже текст, который Вы сейчас читаете — записан с помощью 0 и 1. Каждой букве соответствует фиксированное число. Это называют кодировкой. Возьмем слово «звук».

В кодировке Win-1251 — это последовательность чисел 231, 226, 243, 234

KOI8-R 218, 215, 213, 203

При чем в этих двух кодировках под букву выделено 8 позиций (бит). С помощью последовательности из 8 ноликов и единичек мы можем считать только до 2 в 8-ой степени (=256). А значит использовать сразу не больше 256 букв. И такие кодировки (т.е таблицы соотношения между символом и его порядковым номером) называются 8-битными. Существуют кодировки использующие 16-бит и больше (Одна из них — UNICODE — может быть слышали.)

Однако в таких кодировках текст занимает места в 2 и более раз больше. Аналогичная ситуация с цветом — посмотрите «Свойства экрана» — Правая кнопка мыши на пустом рабочем окне — Вкладыш «Параметры» — там Вы можете указать 16-, 24-, 32- разряда, а над ними 256 цветов (это 8-разрядов) для паллитры. Это то же самое, что и кодировка, но для цветов — сколько различных цветов Вы можете видеть и использовать на своем экране.

Со звуком примерно то же самое. Мы сначала его превращаем в последовательность чисел, а числа уже пишем с помощью ноликов и единиц. Причем — если у нас нотная музыка — то мы нумеруем ноты, октавы и инструменты — а при воспроизведении наша звуковая карта используем закодированные в ней инструменты, наиболее близкие к записанному. Шумы или, если хотите, «живой» звук имеет две чисто физические характеристики — амплитуду и частоту. Вот последовательность этих величин фактически и хранятся в wav формате. Поэтому он такой «жирный». Проигрыватель читает файл с данными и выдает на колонки через звуковую карту сигнал с этой амплитудой и частотой.

С картинкой то же самой — я когда программирую — говорю видеокарте — точку (пиксель) в такой-то позиции (10-ая сверху, 5- слева) в такой-то цвет окрасит. И видеокарта посылает сигнал с соответствующими характеристиками монитору.

Надеюсь, Вам стало чуточку понятнее :-)

Из конференции Expert_FAQ

Вопрос

Как добавить в контекстное меню проводника пункт:
1. если расширение такое-то (или такие-то), то пункт есть, иначе — нету.
2. этот пункт должен стартовать прогу, которая откроет этот файл.

Ответ

Итак, допустим себе такую задачу. Есть у тебя расширение (для примера — .html, как нестандартное (4 буквы)).
Ты хочешь для всех файлов такого типа (для .htm и .html) добавить свою команду.

Залазишь в HKCR \ .htm

Там есть «Параметр по умолчанию» (при работе с реестром чтоб получить к нему доступ нужно указать "").

Написано там, например, htmlfile

Ищешь HKCR \ htmlfile \ shell

Туда вставляешь свою команду (ну посмотри по аналогии с теми, что там есть).

Вот вроде и все.

Артем Кривокрисенко

Можно это сделать и без лазания по реестру.
Нажми Пуск — Свойства папки — Типы файлов, находищь в списке нужное расширение.
Нажимаешь изменить и правишь глагол open, либо добавляешь дополнительные пункты.

sm-art2001

Вопрос

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

Но проблема в том что после выбора пользователя если ты забыл пароль можно нажать на сочетание клавиш Alt+ = и откроется системное меню программы где можно увидеть пароль выбранного пользователя. Я понимаю что это было сделано для личных целей разработчиков и эта фишка нужна программистам, но есть неблагодарные люди которые рассказали эту фишку почти всем в офисе и теперь почти каждый юсер может залезть в программу с правами супервизора.

Что я хочу!

Я думаю что нужна программа которая бы загружалась при загрузке Windows, то есть *.vxd (почему именно драйвер *.vxd так лучше всего зашифровать прогу) которую бы нельзя было убить например нажатием клавиш Alt+CTRL+DEL и которая бы прерывала нажатие клавиш

Alt + =. То есть если пользователь захочет посмотреть пароль и нажал на эти волшебные клавиши то ничего не произойдет (перехватить прерывания).

Ответ

Пеpехват клавы в vxd — исходники — fido7.talks.asm

keylock.vxd благополучно работает более чем на 100 машинах уже в течение четыpех месяцев в компьютеpных клубах, глюков не замечено. Если не нравиться код замены — 91 код кнопки 'Win' можете поставить код любой дpугой кнопки, либо пеpеписать код так, что бы он не вызывал пpедыдущий обpаботчик, когда была нажата последовательность пеpехвата.

Компилится все с помощью make.bat,

для компиляции нужны следующие файлы, все лежит в MS DDK:

MSPDB50 DLL 157 456 29.09.98 19:51 MSPDB50.DLL
ML ERR 9 461 14.09.98 13:43 ML.ERR
LINK EXE 462 899 29.09.98 19:51 LINK.EXE
ML EXE 388 096 21.09.98 10:45 ML.EXE
IFS INC 43 293 03.08.98 17:16 IFS.INC
IFSMGR INC 64 914 03.09.98 20:53 IFSMGR.INC
SHELL INC 4 480 03.08.98 17:16 SHELL.INC
VKD INC 8 272 18.11.98 16:45 VKD.INC
VKDPASTE INC 3 149 03.09.98 20:53 VKDPASTE.INC
VMM INC 93 146 03.08.98 17:16 VMM.INC

User.asm:

;Alt+Tab, Alt+Esc and Ctrl+Alt+Del blocking
;© Dmitry Belkevich. With all questions write on
;dmbel(at)mail.ru or dmbel(at)tyt.by MASM=1 .386p .XLIST INCLUDE VMM.Inc INCLUDE vkd.Inc .LIST Declare_Virtual_Device Keylock, 1, 0, Keylock_Control, Undefined_Device_ID ,,, VxD_REAL_INIT_SEG;
;Код инициализации в pеальном pежиме для win95 BeginProc VxD_Real_Init_Proc mov ax, Device_Load_Ok mov bx, 0 mov edx,0 mov si, bx ret EndProc VxD_Real_Init_Proc VxD_REAL_INIT_ENDS VxD_LOCKED_CODE_SEG
;Эта пpоцедуpа стоит между виpтуальными дpовами клавы и ядpом
;Именно в ней можно с клавой делать все что угодно, как в стаpом-добpом ДОСе
;) BeginProc KeyLock_KbdProc cmp CL, 42
;сканкод шифта je shiftdown cmp CL, 54
;сканкод втоpого шифта je shiftdown cmp CL, 29
;-//- контpола je ctrldown cmp CL, 56 ; Стpанно, а почему по одному сканкоду? Сейчас, жалко, таблицу не помню
; Hу, навеpно, когда сканы искал — альты и контpолы один код выдавали
; Если что, по обpазу и подобию дописать сканы на два альта/контpола
; Hо у меня все pаботает уже месяца 4 где-то на 100 машинах. cmp CL, 42+128
;скан отпускания шифта je shiftup cmp CL, 54+128
;скан отпускания втоpого шифта je shiftup cmp CL, 29+128
;отпускание контpола je ctrlup cmp CL, 56+128
;отпускание альта je altup cmp cl, 15
;нажатие таба je tabdown cmp cl, 15+128
;отпускание таба je tabup cmp cl, 83
;нажатие дела je deldown cmp cl, 83+128
;отпускание je delup cmp cl, 1
;нажатие ескейпа je escdown cmp cl, 1+128
;отпускание je escup jmp l3
;ничего интеpесного не нашли escdown: test AltState, 1
;альт нажат? je l3 mov cl, 91
;затык alt+esc — замена кода esc на код 91 jmp l3 escup: test AltState, 1
;альт нажат? je l3 mov cl, 91+128
;затык отжатия alt+esc — замена кода esc на код 91 jmp l3 tabdown: test AltState, 1 je l3 mov cl, 91
;затык alt+tab — замена кода tab на код 91 jmp l3 tabup: test AltState, 1 je l3 mov cl, 91+128
;затык отпускания alt+tab — замена кода tab на код 91 jmp l3 deldown: test AltState, 1 je l3 test CtrlState, 1 je l3 mov cl, 91
;затык ctrl+alt+del — замена кода del на код 91 jmp l3 delup: test AltState, 1 je l3 test CtrlState, 1 je l3 mov cl, 91+128
;затык отпускания ctrl+alt+del — замена кода del на код 91 jmp l3
;код для флагов состояния кнопок ctrl, alt, del сделан неменого чеpез ____
;так как любая логика с памятью (or,xor,and, и т.д.) pаботать не хочет
;более того — если идут подpяд две команды — на чтение, а затем сpазу же
;на запись — все вешается, если эти команды немного pазнесены по коду —
;все pаботает shiftdown: mov ShftState, 1 jmp l3 ctrldown: mov CtrlState, 1 jmp l3 altdown: mov AltState, 1 jmp l3 shiftup: mov ShftState, 0 jmp l3 ctrlup: mov CtrlState, 0 jmp l3 altup: mov AltState, 0 jmp l3 l3: push eax mov eax, dword ptr Prev_KbdProc call dword ptr eax
;вызов пpедыдущего обpаботчика нажатий кнопок
;скоpее всего в ядpе, если еще кто-то не
;пеpехватил pop eax clc ret EndProc KeyLock_KbdProc BeginProc KeyLock_Device_Init GetVxDServiceOrdinal eax, VKD_Filter_Keyboard_Input mov esi, offset32 KeyLock_KbdProc VMMCall Hook_Device_Service
;Устанавливаем наш обpаботчик mov dword ptr Prev_KbdProc, esi
;запоминаем адpес пpедыдущего обpаботчика clc ret EndProc KeyLock_Device_Init BeginProc KeyLock_Control Control_Dispatch Init_Complete, KeyLock_Device_Init clc ret EndProc KeyLock_Control VxD_LOCKED_CODE_ENDS VxD_LOCKED_DATA_SEG
;здесь, кстати, по pекомендации от MS должно быть как можно меньше пеpеменных
;т.к. этот сегмент находится всегда в памяти, что бы в своп не лезть,
;хотя для клавы ИМХО все pавно ShftState db 0
CtrlState db 0
AltState db 0
Prev_KbdProc dw 0
VxD_LOCKED_DATA_ENDS
END === Cut === User.Def:
=== Cut === LIBRARY Keylock DESCRIPTION 'user95' EXETYPE DEV386 SEGMENTS _LTEXT PRELOAD NONDISCARDABLE _LDATA PRELOAD NONDISCARDABLE _ITEXT CLASS
'ICODE' DISCARDABLE _IDATA CLASS
'ICODE' DISCARDABLE _TEXT CLASS
'PCODE' NONDISCARDABLE _DATA CLASS
'PCODE' NONDISCARDABLE EXPORTS Keylock_DDB @1


Make.bat:

=== Cut ===
ml -coff -DBLD_COFF -DIS_32 -W2 -c -Cx -Zm -DMASM6 user.asm
LINK /VXD /NOD /MAP /ignore:4078 user.obj /DEF:user.def
=== Cut ===

Из конференции Expert_FAQ

Вопрос

Может кто-нибудь поделится соображениями о защите программ от нелегального копирования в VB?

Ответ

Вообще, защитить программу от нелегального копирования нельзя, в принципе. Если утюг какой-то фирмы сложно скопировать хотя бы потому, что надо знать его устройство, то с компьютером проще — F5 в любой оболочке… И не надо никаких исходников, ничего, кроме самой программы…

Можно вставить несколько палок в колеса тем, кто нелегально собирается нажимать на F5.

Во-первых, надо использовать все доступные способы отличия зарегистрированной программы от демоверсии… Серийные номера, файлы-ключи… Специальные регистраторы, создающие, например, файл в реестре и самоудаляющиеся… и т.д.

Но все это можно скопировать, и ключик в реестре создать и серийный на 10 машинах подряд ввести и т.д… По-моему, защититься тут можно (более-менее) онлайн-регистрацией…

Т.е. юзер регистрируется и заносится в базу данных на сервере. И еще: надо привязывать копию программы к конкретной машине… именно машине, а не установленному Windows и т.п.

Как это осуществить? Можно много способов придумать, чем машины различаются (главное, чтоб условие было всегда истинно на зарегистрированной машине). Тут можно взять размер винчестера, как самое элементарное (но не больно надежное), можно к номеру BIOSа (только как его получить?), вроде как в Pentium тоже хотели номера вшивать… так, что можно к процессору привязать…

В общем, фантазировать можно много, но… Самое эффективное, наверное онлайн-регистрация с последующей привязкой к особенностям зарегистрированной машины.

Savenger

Вопрос

Как и в чем делаются хелповские файлы. *.chm, *.hlp?

Ответ

1. .chm это «Compiled HtMl», можно сделать с помощью утилитки Html2chm (или htm2chm), брать в Инете. Ей надо подсунуть действующую модель в виде html, и она все это сожмет.

2. Хелп обыкновенный тоже ляпается с помощью спецсофта, вроде даже где-то видел утилитку для преобразования того же html в hlp. Иначе — загружаются в нее текстовые файлы, проставляются ссылки, специальные цифровые метки (для взаимодействия с контектной помощью), и все это потом трансформируется в .hlp.

Из конференции Expert_FAQ

CHM создаются в программе MS HTML Help WorkShop, а HLP — в основном из специальным образом размеченного RTF. Автоматизировать процесс создания такого RTF (и его последующую компиляцию) может программа Crimson Help.

sharp-c

Вопрос

Как и на чем пишут плагины к Winamp'у? Очень интересуюсь этим вопросом.
Если кто может подкиньте документацию или ссылки.

Ответ

Это называется Winamp SDK. Писать можно на C, delphi и так далее…
http://www.winamp.com/nsdn/winamp2x/dev/sdk/

MINISDK:
http://ftp.winamp.com/winamp/nsdn/in_minisdk.zip
http://ftp.winamp.com/winamp/nsdn/out_minisdk.zip
http://ftp.winamp.com/winamp/nsdn/gen_minisdk.zip
http://ftp.winamp.com/winamp/nsdn/dsp_minisdk.zip
http://ftp.winamp.com/winamp/nsdn/vis_minisdk.zip

VC++:
ftp://leftcoast.winamp.com/pub/winamp/development/vis_minisdk.zip
ftp://leftcoast.winamp.com/pub/winamp/development/dsp_minisdk.zip
ftp://leftcoast.winamp.com/pub/winamp/development/gen_minisdk.zip
ftp://leftcoast.winamp.com/pub/winamp/development/in_minisdk.zip

Delphi & other pascal:
http://www.stnd.de — там много pазных пpимеpов с пояснениями.

Serg A. Knyazev

Вопрос

Как можно сделать приложение модальным по отношению к рабочему столу Windows? Т.е. игнорировать все нажатия мыши вне данного приложения, перехватить все события от клавиатуры, включая комбинации типа Ctrl + Alt + Del, с возможностью их обработки внутри программы.

Ответ

Примерно на VB будет так:

a.. Как ловить нажатия на клавиши вне вашей программы

1. Положите на форму таймер, поставьте интервал в 50
2. Добавьте в модуль:

Declare Function GetAsyncKeyState Lib "user32"
(ByVal vKey As Long) As Integer Public Const VK_TAB = &H9
' Константа для TAB key.
' константы для других кнопок посмотрите в API вьювере
' Поместите в событие Timer: If GetAsyncKeyState(VK_TAB) And KEY_SHIFT = True Then msgboх "Кто то трогает ТАБ", vbinformation End If


А чтобы игнорировать нажатия клавиш,то просто делаешь большущую форму, делаешь ее прозрачной, и при щелчке на форме ничего не делаешь…

Из конференции Expert_FAQ

Вопрос

Имеется фотография, как можно убрать почти монотонный фон, если можно пример на VB or Delphi.

У меня получается двумя способами, но они имеют недостатки.
1. Если я ближайшую точку сравниваю по цвету, но в таком случае может произойти заползание на другие цвета и в этом случае приходится изменять значение, которое отвечает за приблизительное сравнение точек.
2) Ближайшую точку сравниваю по контрасту, получается хороший контур, но участок не убирается если фон, в каком то месте темнеет.

Ответ

Проверяй попадание точки в заданный тобой цветовой интервал. Напр., пусть, фон почти белый. Определим интервал от белого

RGB:[255, 255, 255] до 20% серого RGB:[201, 201, 201].

И если цвет точки находится на границе или внутри интервала, то эту точку не отображаем.

А вообще, то же самое можно привести к одному цвету в каком-нибудь «фотошопе».

Из конференции Expert_FAQ

Вопрос

Есть программа DOS, написанная одной фирмой. Они установили защиту от копирования — привязку к железу. Фирма ликвидирована и концов не найти.
Алгоритм регистрации такой: вводишь свой номер и код, после ввода кода создается файл 123.cfg с кодом.
При правильном коде основная программа из демо-версии становилась полной. Стоит сменить что-либо из железа, так сразу «демонстрационная версия».
Как можно обойти привязку к железу (обмануть, взломать, переписать, повеситься)?

Ответ

Я могу посоветовать использовать дебаггер (WinICE, SoftICE) и искать точку входа на процедуру проверки. А потом отключить ее вызов. Но это требует знания ассемблера и, на всякий случай, резервной копии программы. Либо попробуйте подписаться в какую-либо конференцию по взлому и попросите решить вашу проблему.

lujana

Вопрос

Как открыть WAV файл для дальнейшего редактирования, то есть нужно описание какой байт, в файле, к чему относится: частота дискредитации, битрейд, длина звуковой дорожки и сама звуковая дорожка. В итоге приблизительно должен получится массив с частотами или что-то в этом роде.

Ответ

.WAV — файл (как и любой RIFF файл) состоит из набора (не знаю как сказать) thunk-ов, про которые в инструкции говорится:
если программка не знает зачем он нужен — она должна его пропустить (в каждом есть заголовочек, а в ем длина thunkа), а сам файл начинается с заголовка:

struct RIFF
{
char ID[4]; // четыре буковки "RIFF"
long Len; // длина файла без этого заголовка
}
Riff = { "RIFF", 0 };


дальше обычно заголовок собственно WAVа:

struct WAVE
{
char ID[4]; // "WAVE" — заголовок WAV
char Fmt[4]; // "fmt" — thunk формата
long Len; // длинна етого thunka
int Format; // собственно формат
int Channels; // число каналов (1/2)
long SamplesPerSecond; // отсчетов/сек
long AvgBytesPerSecond; // байтов/сек
int BlockAlign; // выравнивание блоков
int BitsPerSample; // битов на отсчет
}
Wave = { "WAVE", "fmt", 16L, 1, 1, 0L, 0L, 1, 8 } ;

формат бывает 1-Microsoft Pulse Code, 0x101 — IBM mu-law, 0x102 — IBM a-law,
0x103 — IBM AVC Adaptive Differential Pulse Code, но самый распространенный (по моему) #1
дальше thunk самплов (отсчетов) один там или несколько:

struct DATA {
char ID[4]; // "data"
long Len; // длина етого thunkа (должен быть выровнен на
// границу слова)
} Data = { "data", 0L };

а потом сами отсчеты, если каналов 2, то отсчет 1 канала, потом 2го, 1го…
если битов/отсчет меньше чем в байте/слове то дополняется нулями в младших битах и все равно занимает байт или слово.

Писал я это все так (для 8-битовых отсчетов):

DataLen= число отсчетов в байтах
if( DataLen % 2 ) PadFlg=1;
else PadFlg=0;
Riff.Len=sizeof(Wave)+sizeof(Data)+DataLen+PadFlg;
Wave.SamplesPerSecond=частота квантования в Гц
Wave.AvgBytesPerSecond=то же самое
Data.Len=DataLen+PadFlg;
fwrite(&Riff,1,sizeof(Riff),fo);
fwrite(&Wave,1,sizeof(Wave),fo);
fwrite(&Data,1,sizeof(Data),fo);
{
unsigned c;
for(long i=0; i<DataLen; i++)
{
c=getc(fi);
putc(c,fo);
}
if( PadFlg ) putc(c,fo);
}


Из конференции Expert_FAQ

Вопрос

Какой алгоритм перевода чисел из десятичной системы в двоичную и обратно? Восьми/ шестнадцатеричную? В двух словах, если не трудно.

Ответ

Для перевода чисел из десятичной системы исчисления в какую-либо другую используется метод деления. Допустим, у вас имеется число 173 и его необходимо перевести в двоичную систему. В данном случае модуль системы исчисления (количество цифр в обном десятке) равен 2 (для 16-ричной модуль равен 16, 8-ричной — 8). Делается это так: 173 | 1 — делим 173 на 2, получаем: 173/2 = 86, остаток 1
 86 | 0 — делим 86 на 2, получаем 86/2= 43, остаток 0
 43 | 1 — 43/2 = 21, остаток — 1
 21 | 1 — 21/2 = 10, остаток — 1
 10 | 0 — 10/2 = 5, остаток — 0
  5 | 1 — 5/2 = 2, остаток — 1
  2 | 0 — 2/2 = 1, остаток — 0
  1 | 1 — на этом вычисления заканчиваются.
Число читаем снизу вверх: 10101101

Еще для примера — представим число 2473 в 16-ричной системе исчисления:
2475 | 11(В)- 2475/16 = 154, остаток — 11
 154 | 10(А)- 154/16 = 9, остаток — 10
  9 | 9 — на этом вычисления заканчиваются.
Число читаем снизу вверх: 9АВ

В 16-ричной системе для обозначения цифр больше 9 используются первые буквы латинского алфавита: 10 16
****** 0 0
1 1
2 2
. .
. .
9 9
10 A
11 B
12 C
13 D
14 E
15 F
16 10
17 11
.. ..
.. ..

Для перевода чисел из какой-либо системы исчисления в десятичную необходимо каждую цифру числа умножить на модуль системы, возведенный в степень, равную разряду данной цифры, и затем сложить результаты. Например, переведем число 1101101101 в десятичную систему исчисления:
9 8 7 6 5 4 3 2 1 0 — разряд цифры, находящейся ниже.
1 1 0 1 1 0 1 1 0 1 — число
N = 1*2^9 + 1*2^8 + 0*2^7 + 1*2^6 + 1*2^5 + 0*2^4 + 1*2^3 + 1*2^2 + 0*2^1 + 1*2^0 = = 1*512 + 1*256 + 0*128 + 1*64 + 1*32 + 0*16 + 1*8 + 1*4 + 0*2 + 1*1 = 877.
Для 16-ричной системы необходимо было бы 2 в предыдущем выражении заменить на 16.

Алексей

Если вам лень все это делать вручную, то на моем сайте www.il-a.pochtamt.ru лежит исходник, позволяющий переводить не только целые числа (это есть почти везде), но и дробные, причем из любой _четной_ системы (<37, т.к. 26 англ. букв) в любую (напр. из 14-ричной в 36-ричную) — через двоичную.

Вопрос

Как передать МНОГО параметров в скрипт?

Решил написать маленький WHS скриптик для копирования файлов по определенному сценарию и столкнулся с такой проблемой:
имена файлов для копирования нужно как-то в этот скрипт передать, например так:
myScript.vbs zzz\zzz\zzz.zzz zzz\zzz\zzz\zzz1.zzz zzz2\zzz2.zzz …
или, что то же самое, выделить мышой в эксплорере и «Send_их_To» мой скриптик. Соответственно в "\win…\SendTo\» я добавляю линк на мой скрипт. ну а уже в скриптике что-то вроде:

Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count — 1
WScript.Echo objArgs(I)
'… ну или все что мне нужно …
Next


так вот проблема в том, что, если выделить три-пять-десять файлов, то все работает нормально, а если выделить достаточно много — то выдается ошибка:

Unable to execute — arguments list is too long

Причем ошибка не зависит от запускаемой программы/скрипта — очевидно, что срабатывает ограничение длины командной строки (кажется 254) но с другой стороны если выделить 100 файлов и Send_их_To какую-то директорию, или «Mail Recipient», то все 100 посылаются.
Значит можно как-то это сделать?

Так как же мне передать в скрипт/программу 100 выделенных в эксплорере файлов?

Ответ

Начну с цитаты:

"Web-сервер передает и извлекает информацию из вашей программы CGI в двух разных формах:
— как параметры командной строки;
— как файл данных.

Windows CGI 1.3 определяет один параметр командной строки:
CGI.exe cgi-data-file.ini»

Д.Чепмен «Internet-приложения в Delphi»

Огрызки спецификацию WinCGI, но по-русски, можно взять тут

www.citforum.ru Суть в том, что cgi-data-file.ini — это обычный ини-файл. И в одной из секции указывается значения полей формы и имя входного файла — еже ли таковой имеется. К сожалению, не зная под какой сервер Вы пишите CGI нельзя с определенностью сказать как будет называться секция и параметры в ней.

— * --

Теперь, что касается возможности «винды» работать с большим списком файлов. На самом деле — все зависит от того, в какой программе Вы работаете. Эксплорер — это еще не винда. Замените в секции [boot] файла system.ini строку

shell=Explorer.exe
на
shell=far.exe

И эксплорер Вы будет запускать, как обычное приложение из Фара :)

Для обработки большого списка файлов некоторым внешним приложением существует два способа:

— либо сохранить этот список файлов в tmp-файле, и передать внешнему приложению имя этого файла со списком, указав, что файлы внутри;
— либо передавать внешнему приложению по одному файлу

Из конференции Expert_FAQ

Вопрос

Как программе после ее запуска проверить свой код на правильность (целостность)?

Ответ

Как вариант — подсчитывать CRC тех участков памяти, целостность которых Вам важна.

Про CRC можно почитать, например это

Ross N.Williams

Элементарное руководство по CRC алгоритмам обнаружения ошибок

www.uic.nnov.ru

Из конференции Expert_FAQ

Вопрос

Сделал *.CHM к своей программе, а как его «вызвать» программой?

Ответ

Нужно использовать ShellExecute. Она автоматом для выбранного файла вызовет связанную программу. В данном случае — виндовый движок хелпа (для *.chm).

Рязанов Андрей

Вопрос

Как и где можно сделать Help к программе?

Ответ

Вопрос очень объемный. Как делать hlp-файлы, уже неинтересно, а вот chm-файлы делаются так.
1. Пишешь help в виде HTML-проекта.
2. Загоняешь его в какой-нибудь html-help-maker, например, Microsoft HTML Help Workshop, что поставляется вместе с VS ServcePack.
3. Там добавляешь к нему index и содержание.
4. Компилируешь.
5. Ну и ссылки на help из программы. (Мне это делать еще не приходилось).
За help к контролу отвечает свойство HelpIndex.
За глобальный help к проекту — в Project Proerties заполнить надо.

Слава

Вопрос

Как сделать хранитель экрана для Windows? Т.е. есть файл *.scr с возможностью настройки.

Ответ

На самом деле *.scr файл — это обычный exe-шник переименованный в scr. Для возможности настроцки при запуске программы Windows передает ему параметры:

/c — запускаем программу в режиме конфигурации
/p — запускаем программу в режиме просмотра
/s — запускаем программу в обычном режиме

Из конференции Expert_FAQ

Вопрос

Хочу записать на болванку треки. Как сделать, чтобы при запуске компашки сразу грузился проигрыватель со списком треков. Короче сделать его загрузочным чтоли?

И еще если записать на болванку допустим программы, картинки. Как сделать чтобы при запуске компакта у него был свой интерфейс. Ну там типа кнопочки это то-то, или жми сюда и инсталируй. Короче на каком языке это все пишется и как это делается. Приветствуется любая информация, ссылки чем больше тем лучше.

Ответ

AutoPlay Menu Studio

Благодаря своему интуитивно понятному интерфейсу, простоте и удобству в использовании, AutoPlay Menu Studio Pro можно назвать одной из лучших программ своего класса. При запуске приложения появляется окно выбора, предоставляющее опции Create a New Project (создать новый проект), Open Existing Project (открыть существующий проект), Open Last Project (открыть последний проект) и Exit (Выход).И вот перед нами заготовка нашей будущей менюшки, которую осталось только разукрасить на свой вкус и подстроить под свои нужды. AutoPlay Menu Studio имеет достаточно большое количество инструментов и предоставляет очень простые способы оформления и настройки объектов меню.

Для этого достаточно просто щелкнуть правой кнопкой мыши на тексте, рисунке, гипперссылке или в идеофайле (все это и есть объекты меню) и выбрать пункт меню Object Properties. Появится окно настройки свойств объекта, состоящее из нескольких вкладок.. На вкладке Actions устанавливаются разнообразные эффекты, которые будут сопровождать ваши действия при работе с меню: проигрывание .wav-, .mp3- и .avi-файлов; запуск приложений; открытие документов, каталогов и сайтов; свертывание, восстановление и закрытие окна меню и многое другое. AutoPlay Menu Studio позволяет также создавать многостраничные меню.

Для создания новых страниц и редактирования уже существующих используются пункты меню Page. Чтобы было легче перемещаться между страницами в процессе редактирования, они представлены в виде вкладок внизу главного окна программы, что позволяет одним клик ом мышью сразу же перейти к интересующему фрагменту меню.

После того как вы создали и оформили образ своего будущего меню, можно приступать и к его созданию. Для этого выбираете команду Build: в меню Project, далее появляется окно, в котором нужно задать имя исполняемого файла (по умолчанию — autorun.exe), выбрать каталог, в который будет помещаться меню, а также задать имя подкаталога, в котором будут храниться все так званые файлы поддержки. После всех этих процедур можно спокойно жать на ОК чтобы запустить процесс создания меню. И вот, все готово, осталось только записать меню на болванку и наслаждаться удобством авторана каждый раз при загрузке CD в привод.

Скачать AutoPlay Menu Studio можно здесь:
http://tucows.online.ru/mmedia/
Русификатор для AutoPlay Menu Studio лежит здесь:
http://www.rip.net.ua/

Из конференции Expert_FAQ

Вопрос

Как «вручную» русифицировать программу, написанную под Виндовс? Может есть какие-то спец. программы для этого?

Ответ

Конечно существуют!
Лучшая из них — Restorator!
www.bome.com/restorator

Из конференции Expert_FAQ

Restorator платный, но не делает некоторых вещей, которые делает ResHacker, хотя выглядит эта программа не так массивно (там просто нет ничего лишнего).

s3335

Вопрос

Расскажите, пожалуйста, о существующих сейчас языках программирования, точнее, на что каждый из них ориентирован.

Ответ

Языков существует огромное количество, и их описание может занять не одну книгу. Имеет, наверно, смысл рассмотреть основные из них.
Начать стоит, наверное, с основы основ — Ассемблера. Это язык низкого уровня, который фактически отражает систему команд процессора: они записываются в удобном для человека виде, плюс дополнительные средства, например, метки (иначе вам бы пришлось самому высчитывать кол-во байт для команд переходов и вызовов, а это очень даже не просто). Еще в старые времена, когда компьютеры были большими :), ассемблер использовался для очень специфических вещей, требующих большой скорости и компактности. Это драйверы, различные утилиты, системы обработки в реальном времени и пр. Сейчас, в эпоху Виндов, написание программ на ассемблере стало неактуальным, и его используют для написания драйверов, или как ассемблерные вставки в других языках. Хотя некоторым нравится писать на ассемблере для Win, но это очень своеобразно.
Дальше можно рассмотреть большую группу т.н. процедурных языков. Это и Basic (Visual), и Pascal(Delphi), C (C++, Visual и др.), а также несколько устаревшие языки, такие как Алгол, Фортран, PL/1, Ада (правда, для некоторых из них существуют современные компиляторы, и их продолжают использовать). Все эти языки очень похожи друг на друга и отличаются разве что синтаксисом операторов и определенными специфическими моментами, делающими каждый из них более удобным для решения определенных задач. Но фактически это универсальные языки, и при наличии хорошего компилятора и библиотек их можно использовать для написания любых программ — от драйверов и бухгалтерии до игр и ПО для интернета.
Вкратце можно сказать следующее. Basic считается языком для новичков за счет достаточно понятных операторов и их простой конструкции. К тому же, его можно отнести к процедурному языку только частично. Однако, современные версии компиляторов наделили этот язык достаточно развитыми средствами и его можно использовать для любых целей. Pascal и C (С++) очень похожи друг на друга, но С считается языком профессионалов, т.к. позволяет использовать очень мудреные синтаксические конструкции (в ущерб читабельности программы), которые, ввиду особенностей компилятора, позволяют добиться большей производительности и компактности.
Остальные языки также по своей сути очень похожи и разрабатывались различными институтами или университетами для решения своих конкретных задач, а потом стали достоянием общественности. На самом деле, таких языков множество, я перечислил только те, что вспомнил. К этой группе можно отнести и Java. Данный язык по синтаксису напоминает С, но уже на этапе разработки был построен полностью на объектной модели (в отличии от С). Особенность его заключается в том, что программа компилируется в промежуточный код, а на компьютере при ее выполнении используется т.н. Java VM (виртуальная машина, фактически интерпретатор этого промежуточного кода). За счет этого достигается улучшенная переносимость программ. Также при его разработке были учтены вопросы безопасности.
Теперь языки для управления БД (базы данных). Это Clipper, FoxPro, dBase, Paradox, SQL. Опять же, принципиально (за исключением SQL) они мало отличаются. Это просто попытки различных фирм выйти на рынок ПО для работы с БД. Они очень похожи на вышеприведенные процедурные языки, но отличаются наличием встроенных команд для работы с БД. SQL выделяется из этой группы, т.к. является не языком программирования, а языком запросов. Его основу составляет технология «клиент-сервер», где клиентская часть формирует запрос на получение определенных данных от сервера, сервер этот запрос обрабатывает и передает запрашиваемые данные обратно клиенту. Создавался для обеспечения надежной и эффективной работы с большими БД и большим числом клиентских машин. Его основу составляет сервер, а клиентское ПО может быть написано на любом языке при наличии определенных библиотек, обеспечивающих посылки запроса и обработки полученных данных.
В отдельную группу можно выделить Perl, PHP и др. Программы, написанные на них, работают на стороне сервера. Они также чем-то похожи на процедурные языки, но отличаются тем, что имеют улучшенные возможности для работы со строками, т.к. получаемый на выходе HTML файл по своей сути является обычным текстом. Конечно, бухгалтерии на них не напишешь, но для работы интернет-серверов они незаменимы.
Необходимо также рассмотреть и т.н. скрипты. JavaScript и VBScript, которые являются Java и VisualBasic, но не компилируются, а интерпретируются во время работы браузера. Сюда же можно отнести и SSI, а также пакетные файлы MSDOS, различные файлы сценариев и пр. Задача скрипта — дополнить существующую систему новыми функциями или автоматизировать определенные действия.
Существуют очень специфические языки, которые сейчас практически не используются, а если и используются, то очень редко и часто в академических целях. Например, Пролог, Лисп, Форт.
Пролог построен на основах мат. логики. Его еще называют языком искусственного интеллекта. Очень специфический и трудный для освоения язык, т.к. в нем в корне изменен подход к программированию. Он работает с т.н. базой знаний, в которой изначально заложены определенные факты и правила работы с ними. Потом, используя эту информацию и входные данные, решается определенная задача. Удобен для построения экспертных систем, однако есть, например, очень изящные программы для решения дифференциальных уравнений, причем именно в текстовом, а не числовом виде, т.е. фактически в базу знаний заносятся правила решения дифференциальных уравнений, а программа, используя их, выдает результат.
Лисп — язык обработки списков. Тоже очень необычный и специфический язык. Его основу составляют списки. Могут быть списки списков и т.д, а это очень удобно для работы с информацией, имеющий древовидную структуру. Несмотря на кажущуюся узкую направленность, при наличии хорошей системы программирования может использоваться для любых применений, даже бухгалтерии или системы реального времени. Очень интересный язык, если будет возможность, очень рекомендую с ним ознакомиться хотя бы в познавательных целях.
Форт — тоже необычный язык. Чем-то похож на ассемблер. Интересно то, что в его основу положен стек, т.е. на нем нельзя записать 2+2. Дает очень быстрый и компактный код. В свое время даже разрабатывались специальные процессоры, поддерживающие его, т.е. он становился «ассемблером» для этих процессоров.
Ну, и на закуску — язык программирования для детей! Лого. Его основа — черепашка, которая перемещается по экрану и умеет рисовать. Но для того, чтобы что-то нарисовать, надо дать черепашке ценные указания, задать ей программу :)
Конечно, ответ не исчерпывающий, но иначе его можно было бы сразу сдавать в типографию. Я перечислил основные группы языков и наиболее известные из них.

Goltsov Dmitry

Вопрос

1.Есть DLL. Как узнать, какие функции она экспортирует? 2.Есть название функции. Как узнать, в какой DLL она содержится?

Ответ

1. Единственная программа, которую я знаю — это Dependency Walker из комплекта Microsoft Visual Studio 6 или MS Platform SDK. Она позволяет посмотреть какие функции экспортируются из .DLL по имени и «ordinal value». К сожалению, я не смог найти, как можно узнать какие параметры есть у экспортируемой функции.

2. Это уже значительно сложнее. Но если известно, в какой программе она используется, то можно посмотреть .exe файл этой программы, найти оттуда с помощью простого viewer-а (например у FAR-а), какие .dll файлы прописаны внутри .exe, и затем посмотреть эти .dll с Dependency Walker.

Алексей

C:\Program Files\Borland\Delphi6\Bin\TDUMP.exe
Запускаешь програмку под какой нибудь оболочкой или с помощью командной строки открываешь нужную тебе *.dll'ку с нужными тебе параметрами! Очень даже удобно! Но описание самих функций придется поискать.

Вопрос

Я уже заканчиваю 10 класс через год поступать в ВУЗ, а пока не определился куда!
Есно связанное с компами, сам разбираюсь неплохо в железе, знаю PASCAL, занимал 2-3 места в городских олимпиадах по программированию!
Учусь на хорошо (не считая химии)!!! Во многих вузах 2 курса проходят основы WINDOWS, Офиса, зачем мне это я хочу сразу начать углубленно изучать железо, другие языки программирования! Местоположение вуза не имеет значения!

Ответ

Екатеринбург УГТУ-УПИ РАДОТЕХНИЧЕСКИЙ ФАКУЛЬТЕТ КАФЕДРА АТ&Т

Челябинск ЮУрГУ ОТДЕЛЕНИЕ ПРИБОРОСТРОЕНИЯ (за название не ручаюсь)

Ну, Москва, Питер.., а вообще, посмотрите специальность (и учебный план по ней) 220100, должно понравиться. Такая есть почти в каждом ВТУЗе.

Из конференции Expert_FAQ

Вопрос

Можно ли реализовать UUE без дополнительных библиотек?

Ответ

//**************************************************
  * uuencode/decode functions
****************************************************/

//
// Taken from NCSA HTTP and wwwlib.
//
// NOTE: These conform to RFC1113, which is slightly different then the Unix
// uuencode and uudecode!
//

const int pr2six[256]={
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,62,64,64,64,63,
52,53,54,55,56,57,58,59,60,61,64,64,64,64,64,64,64,0,1,2,3,4,5,6,7,8,9,
10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,64,64,64,64,64,64,26,27,
28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,
64,64,64,64,64,64,64,64,64,64,64,64,64
};

char six2pr[64] = {
  'A','B','C','D','E','F','G','H','I','J','K','L','M',
  'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
  'a','b','c','d','e','f','g','h','i','j','k','l','m',
  'n','o','p','q','r','s','t','u','v','w','x','y','z',
  '0','1','2','3','4','5','6','7','8','9','+','/'
};


BOOL
uudecode(
     char * bufcoded,
     BUFFER * pbuffdecoded,
     DWORD * pcbDecoded )
/*++

  Routine Description:

     uudecode a string of data

  Arguments:

     bufcoded pointer to uuencoded data
     pbuffdecoded pointer to output BUFFER structure
     pcbDecoded number of decode bytes

  Return Value:

  Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
     int nbytesdecoded;
     char *bufin = bufcoded;
     unsigned char *bufout;
     int nprbytes;

     /* Strip leading whitespace. */

  while(*bufcoded==' ' || *bufcoded == '\t') bufcoded++;

  /* Figure out how many characters are in the input buffer.
  * If this would decode into more bytes than would fit into
  * the output buffer, adjust the number of input bytes downwards.
   */
  bufin = bufcoded;
  while(pr2six[*(bufin++)] <= 63);
  nprbytes = bufin — bufcoded — 1;
  nbytesdecoded = ((nprbytes+3)/4) * 3;

  if ( !BufferResize( pbuffdecoded, nbytesdecoded + 4 ))
      return FALSE;

     if ( pcbDecoded )
      *pcbDecoded = nbytesdecoded;

     bufout = (unsigned char *) BufferQueryPtr(pbuffdecoded);

     bufin = bufcoded;

  while (nprbytes > 0) {
    *(bufout++) =
 (unsigned char) (pr2six[*bufin] << 2 | pr2six[bufin[1]] >> 4);
  *(bufout++) =
(unsigned char) (pr2six[bufin[1]] << 4 | pr2six[bufin[2]] >> 2);
  *(bufout++) =
  (unsigned char) (pr2six[bufin[2]] << 6 | pr2six[bufin[3]]);
  bufin += 4;
    nprbytes -= 4;
  }

     if(nprbytes & 03) {
   if(pr2six[bufin[-2]] > 63)
      nbytesdecoded -= 2;
         else
     nbytesdecoded -= 1;
     }

  ((CHAR *)BufferQueryPtr(pbuffdecoded))[nbytesdecoded] = '\0';

     return TRUE;
}


BOOL
uuencode(
     BYTE * bufin,
     DWORD nbytes,
     BUFFER * pbuffEncoded )
/*++

  Routine Description:

     uuencode a string of data

  Arguments:

     bufin pointer to data to encode
     nbytes number of bytes to encode
     pbuffEncoded pointer to output BUFFER structure

  Return Value:

     Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
    unsigned char *outptr;
    unsigned int i;

    //
    // Resize the buffer to 133% of the incoming data
    //

if ( !BufferResize( pbuffEncoded, nbytes + ((nbytes + 3) / 3) + 4))
    return FALSE;

 outptr = (unsigned char *) BufferQueryPtr(pbuffEncoded);

    for (i=0; i<nbytes; i += 3) {
 *(outptr++) = six2pr[*bufin >> 2]; /* c1 */<*/
 *(outptr++) = six2pr[((*bufin << 4) & 060) | ((bufin[1] >> 4) & 017)]; /*c2*/
 *(outptr++) = six2pr[((bufin[1] << 2) & 074) | ((bufin[2] >> 6) & 03)];/*c3*/
 *(outptr++) = six2pr[bufin[2] & 077]; /* c4 */

       bufin += 3;
    }

 /* If nbytes was not a multiple of 3, then we have encoded too
     * many characters. Adjust appropriately.
     */
    if(i == nbytes+1) {
  /* There were only 2 bytes in that last group */
       outptr[-1] = '=';
    } else if(i == nbytes+2) {
  /* There was only 1 byte in that last group */
       outptr[-1] = '=';
       outptr[-2] = '=';
    }

    *outptr = '\0';

    return TRUE;
}

Ivan Rozhuk

Вопрос

Что-то я свосем запутался:
Говорится что из генерируемого ХР хеша невозможно восстановить пароль. НО! при всем при этом говорится также что два разных пароля НЕ могут иметь одинаковые хеши. Помоему это брехня… Это как параллельные прямые — если не пересекаются то параллельные, если пересекаются — увы… Исходя из этого два вывода: либо можно восстановить из хеша, либо могут быть два одинаковых хеша.
Или я в чем-то не прав?

Ответ

Почитай про один из алгоритмов хэша rfc1321, тогда много етебе станет ясно:

1. Хэш может повторятся но вероятность этого очень мала

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

Ivan Rozhuk

Вопрос

Не подскажите, каким образом из одного процесса можно получить доступ к памяти другого?

Ответ

Тут целая куча всего:

для взаимодейстивия между процессами:
через сокеты
через почтовые яйчейки (mailslot)
через RPC
через Map обьекты (CreateFileMapping)
для работы с памятью напрямую
ReadProcessMemory
SetThreadContext
WriteProcessMemory

PS: В вин200 повнимательнее с атрибутами безопасности.

Из конференции Expert_FAQ

Строго говоря, общую память в MS Windows можно получить только отображением в память двух процессов один и тот же файл (CreateFileMapping).
В Linux и большинстве разновидностей UNIX для этого есть специальный механизм — shm (shared memory).

dimss

Вопрос

Проблема: не ставится MSDN. В конце инсталляции выдает сообщение об ошибке, похоже что не может выполнить какой-то скрипт, что-то о CloseCollection. Такое было и раньше, мне как-то удалось ее поставить, но не помню как, то есть работать она в принципе.

Ответ

Перед установкой рекомендуют произвести следующие действия: удалить HHCOLREG.DAT, HH.DAT в директории Windows, удалить HHCTRL.OCX в Windows\System. Удалить HHCOLREG.DAT в Windows\Help. Затем запустить REGEDIT и убрать это:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ HTML Help Collections\Developer Collections\
Иногда помогает удаление файла …\Application Data\Microsoft\HTML Help\1033\msdnvs98.chs

Андрей Митин

Проблема может быть в том, что на диске с которого ты его ставишь, MSDN просто нет.

Вопрос

Формат файлов .wav PCM и ADPCM. желательно описание или полный url.

Ответ

Просто и ясно о формате WAVE файла.

-----------------------------

Приведенной информации вполне достаточно для работы с PCM WAVE файлами (8/16 бит, моно/стерео) WAVE файлы являются подмножеством файловRIFF формата (Resource Interchange File Format), разработанного для хранения ресурсов мультимедиа. Об этом формате надо знать совсем немного. Основной элемент RIFF файла — т.н. чанк (chunk), имеющий структуру

typedef struct
{
DWORD ckID; // Идентификатор чанка, служит для опознания чанка
DWORD ckSize; // Размер чанка (без ckID & cdSize) в байтах
BYTE ckData[ckSize];// Данные
} CK;

Основные типы чанков имеют идентификаторы «RIFF» и «LIST» и могут состоять из вложенных чанков (субчанков).

Мы рассмотрим наиболее простой случай WAVE файла, состоящего из одного лишь RIFF-чанка, содержащего WAVE-форму (WAVE-form). Честно говоря, я ни разу не видел wave файла, содержащего более одного WAVE-чанка, поэтому мы рассмотрим именно файл с одним-единственным WAVE-чанком.

WAVE-форма
WAVE-форма наиболее простой категории — PCM (см. ниже) имеет следующий вид:
<WAVE-форма> = 'WAVE' + <fmt-чанк> + <data-чанк> , где
'WAVE' — просто сигнатура WAVE-формы
<fmt-чанк> — чанк с информацией о звуковом сигнале
<data-чанк> — чанк с собственно сигналом
<fmt-чанк> = 'fmt ' + <ckSize> + <WaveFormat> + <fmt-specific> , где
'fmt ' — сигнатура fmt-чанка
<ckSize> — его размер
<WaveFormat> — структура WaveFormat(mmsystem.h), описанная ниже
<fmt-specific> — структура с дополнительной информацией о формате, имеет переменную длину и зависит от wFormatCategory (см. ниже). В случае с PCM удобно пользоваться структурой WaveFormatEx (mmsystem.h), объединяющей в себе WaveFormat и два поля из fmt-s

pecific. Документация по Win32 SDK утверждает, что WaveFormatEx будет работать для ВСЕХ не-PCM форматов, что идет вразрез с утверждением MM Programmer`s Reference о переменной длине fmt-specific. Так что вопрос с не-PCM форматами мне пока не ясен.

<data-чанк> = 'data' + <ckSize> + <собственно сигнал> , где 'data' — сигнатура data-чанка
<ckSize> — его размер
<собственно сигнал> — последовательность байт, описывающая сигнал (см. Формат данных PCM)
WaveFormat
Структура WaveFormat имеет вид:
typedef struct
{
WORD wFormatTag; // Категория формата
WORD nChannels; // Число каналов
DWORD nSamplesPerSec; // Частота дискретизации
DWORD nAvgBytesPerSec; // Байт в секунду
WORD nBlockAlign; // Выравнивание данных в data-чанке
} WaveFormat;

Рассмотрим эту структуру подробнее.

wFormatTag Категория формата (неудачный перевод: калька format category). От этого значения зависят значения остальных полей этой структуры, структура <fmt-specific> и data-чанка. Существует несколько категорий формата; самая доступная — PCM (Pulse Code
Modulation) имеет wFormatTag = 1.
nChannels 1 — моно, 2-стерео, о большем числе каналов документация умалчивает.
nSamplesPerSec Частота дискретизации (число сэмплов в секунду).
nAvgBytesPerSec Среднее число байт в секунду, используется для эффективной буферизации. Для PCM вычисляется по формуле: (nChannels*nSamplesPerSec*nBitsPerSample)/8.
nBlockAlign Выравнивание данных в data-чанке. Для PCM вычисляется по формуле: (nChannels*nBitsPerSample)/8.
<fmt-specific> — Для категории PCM эта структура имеет одно значащее поле UINT nBitsPerSample, которое поведает нам о разрядности дискретизации (см. wFormatTag & Формат данных PCM). Если, например,nBitsPerSample = 12 , то сэмпл хранится в старших 12 бита

х слова, а младшие 4 — нули. Следом идет поле WORD cbSize, используемое не-PCM форматом ( так, формат ADPCM, например, хранит здесь некий коэффициент, необходимый для кодирования/декодирования сигнала). Для PCM-формата это поле может отсутствовать.

Формат данных PCM

Здесь описана схема размещения данных в data-чанке wave файла.
В моно wave файле сэмплы расположены последовательно один за другим: sample[0],sample[1],sample[2]…
В стерео wave файле сэмплы идут попарно: left[0],right[0],left[1],right[1],left[2]…

Для более, чем двухканального сигнала (квадрозвук?!?) последовательность чередования каналов не определена (а, может уже и определена, а я не знаю).

Channel0 — байт для левого канала
Channel1 — байт для правого канала
8 bit mono:
-Sample1- -Sample2- -Sample3- -Sample4-
Channel0 Channel0 Channel0 Channel0
8 bit stereo:

--------Sample1------- --------Sample2-------

Channel0 Channel1 Channel0 Channel1
16 bit mono:

--------Sample1------- --------Sample2-------

Channel0 Channel0 Channel0 Channel0
(low byte) (high byte) (low byte) (high byte)
16 bit stereo:

-------------------Sample1---------------------

Channel0 Channel0 Channel1 Channel1
(low byte) (high byte) (low byte) (high byte)
Средние и крайние значения элемента дискретизации вычисляются так:
Разрядность Формат данных

------------------------------

1-8 bit unsigned char
8-16 bit int
например,
Формат Max Min Midpoint

---------------------------------------

8 bit PCM 255 0 128
16 bit PCM 32767 -32768 0

Для примера разберем начало простенького PCM WAVE файла по байтам. Все смещения (слева) и размеры полей (справа в квадратных скобках ) приведены в hex виде.

— Начало RIFF-чанка
00 'RIFF' [4]
04 DWORD — размер RIFF-чанка [4]
— Начало WAVE-формы
08 'WAVE' [4]
— Начало fmt-чанка
0C 'fmt ' [4]
10 DWORD — размер fmt-чанка (10h или 12h) [4]
— Структура WaveFormat (или WaveFormatEx)
14 WORD wFormatTag = 1 (это же PCM) [2]
16 WORD nChannels = 1 [2]
18 DWORD nSamplesPerSec = 11025 [4]
1C DWORD nAvgBytesPerSec = 11025 [4]
20 WORD nBlockAlign = 1 [2]
22 WORD nBitsPerSample = 8 [2]
24 WORD cbSize (=0 или отсутствует для PCM. [2]
Далее в круглых скобках приведены смещения для случая без cbSize)
— Конец fmt-чанка

— Начало data-чанка
26 (24) 'data' [4]
2A (28) DWORD размер data-чанка [4]
2E (2C) Sample0,Sample1,Sample2,… [???]
— Конец WAVE-формы
— Конец RIFF-чанка

Работать с таким файлом можно по следующей грубой схеме:

1. Проверяем сигнатуру 'RIFF' по смещению 0
2. Проверяем сигнатуру 'WAVE' по смещению 8
3. Проверяем wFormatTag=1 по смещению 14
4. Читаем nChannels,nBitsPerSample по смещениям 16 и 22
5. Если надо, читаем nSamplesPerSec по смещению 18
6. Начиная со смещения 24, начинаем искать data-чанк. Этого можно было бы и не делать, а сразу читать сигнал по смещению 2E(2C), но я встречал wave файлы, у которых после fmt-чанка вставлен некий fact-чанк длины 4 (+4 на сигнатуру +4 на ckSize), о назначении коего мне, к сожалению, ничего не известно. Таким образом, после прочтения fmt-чанка надо пройти по всем таким чанкам, пока не упремся в data-чанк.
7. Читаем сигнал по смещению 2E(2С) или по смещению сигнатуры 'data' плюс 8 и до конца файла (или, если не лень, смотрим размер data-чанка и соответственно читаем, сколько надо)

Из конференции Expert_FAQ

Вопрос

Как получить из интернета страницу, для которой нужно ввести логин и пароль?

Ответ

Итак, находим форму в тексте страницы:

<FORM ACTION="rnartar.asp" METHOD=POST>
       ^^^^^^^^^^^

Метод нас мало волнует, ибо Get и Post при обмене малыми объемами данных практически не имеют отличий как при посылке, так и при работе скриптов на сервере с полученными данными. А вот Action нам очень даже понадобится. Значит, шлем данные скрипту "rnartar.asp". Ну и надо добавить к его имени предшествущий путь, т.е. "http://www.vlz.ru/am/". Идем дальше, видим первый Input:

<INPUT TYPE=text MAXLENGTH=10 SIZE=10 NAME=User VALUE="">

Данный элемент будет передаваться в формате NAME=VALUE. В данном случаи — "User=Value" (при условии, что в данное текстовое поле юзер введет слово Value). Следующий подобный тег на данной страничке выглядит так:

<INPUT TYPE=password MAXLENGTH=10 SIZE=10 NAME=Pass VALUE="">

Он будет выглядеть так: "Pass=Value" (при том же условии). Запросы передаются друг за другом в одну строку, имя скрипта отделяется от запроса знаком вопроса, элементы друг от друга — символом "&". В "чистом" виде могут передаваться лишь латинские буквы, цифры, знаки подчеркивания, тире и некоторые другие символы. Пробелы, "?", "&", русские буквы и т.п. необходимо предварительно Escape'ить, приводя вместо символа его Hex-код и дописывая к нему символ "%" слева. Например, так: "%20". Это пробел.

Вот, собственно, и все. Полный УРЛ для запроса в данном конкретном случаи будет выглядеть так:

http://www.vlz.ru/am/rnartar.asp?User=Value&Pass=Value

Естественно, "Value" необходимо заменить реальными значениями.

Savenger

Вопрос

В программе Max+Plus II 10.0 информация, набранная в символьном редакторе шрифтом ALTERA ( латинские буквы ) на экране выглядит нормально, а на печати — греческими буквами. Использование другого шрифта не устраивает. Переустановка программы ничего не дает. Как исправить ошибку ?

Ответ

Проблема, скорее всего, в настройках принтера. Возможно стоит «Использовать шрифты принтера». Надо перевести принтер в режим графического приема информации.

Из конференции Expert_FAQ

Вопрос

Кто-нибудь знает язык ПРОЛОГ. Очень нужно. Нужно решить несколько задач на ПРОЛОГе, могу прислать в сообчу в каждом письме по задаче.

Ответ

Загляни на http://www.mig19.schel.ac.ru/prolog/, там есть примеры решения некоторых задач. Они написаны для интерпретатора Пролог-Д, но их вполне можно переделать под нужный тебе. Мне одна задача с этого сайта пригодилась, хотя и пришлось переделать под SWI-Prolog.

Из конференции Expert_FAQ

Вопрос

Вот маленько разобрался я в объектно-ориентированном программировании. Объекты, наследование и прочее — это понятно. Но вот как проектируются ООП проги? Как составить, к примеру, список нужных мне объектов, и какими они должны быть? С чего вообще начать написание ООП проги посерьезнее, чем «Hello, World!»? Не может же быть, чтобы все это делалось как кому в голову взбредет.

Ответ

Советую почитать книгу Гради Буча «Объектно ориентированное программирование и анализ». Для проектирования ООП программ существует такой язык UML — Universal Modeling language. Это чем-то напоминает старые добрые блок-схемы, но совершенно на ином уровне. Для визуальной работы с UML есть продукт «Rational Rose».

Andrey Nedbalski Самое главное — найти проблему, которую было бы интересно, нужно и не слишком трудно решить этим самым методом ООП. Без такой мотивации дальнейшее изучении и тем более применение ООП становится чрезвычайно тоскливым.
Полностью согласен с предыдущим советчиком — без серьезной теории не обойтись. Предупреждаю, что на первом этапе все будет совершенно чужое, неживое и придется много попотеть, чтобы понять смысл операторов.
Еще совет — ищи много книжек или в интернете. Все люди воспринимают мир по-своему, раз на пятый-шестой найдешь доходчивое объяснение…
Совет последний — НЕ ТОРОПИСЬ.

******

Я различаю, для себя, 2 способа ООП программирования:
Замена и упорядочивание основного алгоритма программы. Это использование объектов как умных переменных, которые могут сами читаться с диска, писаться туда, складываться, умножаться. Примером такого программирование может быть такие объекты С++ как cout, cerr, или классы string (работа со строками), complex (работа с комплексными числами), разные контейнеры и стеки. При этом сам основной алгоритм не обязательно должен быть объектно-ориентированным.

Полностью ОО программирование. Когда все все только классы и объекты. Ну тут все и начинается. Вы просто строите свой мир объектов и классов. Мой совет — как бог, всегда начинайте с сотворения суши. Потом будет все остальное. Например — оконная система всегда начинается с объекта, который будет знать, сколько окон открыто, где и какие они. Своего рода диспетчер. Одно окно через него будет общаться с другим, знать свое окружение — фактически оно будет стоять на нам как на земле. Очень часто этот объект называют Application. Это основа основ. Потом на нем можно возводить какие хотите небоскребы.

mixa

Вопрос

Хочу попробовать программировать для Palm. Не подскажете хорошие сайты по данной тематике.

Ответ

Русскоязычные:
palmos.urai.ru
palm.opennet.ru
palmos.sources.ru
www.palm.com.ua
www.ladoshki.com
www.palm.webzone.ru

Англоязычные
официальный сайт Palm OS www.palmos.com
Официальная документация по разработке приложений для Palm'а
www.palmos.com/dev/support/docs
www.palmos.com
Философия
www.palmos.com
Принципы GUI cerem.ufp.pt
Учебник
oasis.palm.com
Developer Knowledge Base
tangentsoft.net/palmfaq
www.palmopensource.com
www.palmgear.com

Из конференции Expert_FAQ

Вопрос

Нужна структура mp3 тега IDv2 TAG. Желательно в таком же виде как и для первой версии.

Т.е. 30 символов — альбом, 30 символов — исполнитель… и т.д.

Ответ

Это довольно навороченная штука. Спецификацию можно найти здесь:

http://www.id3.org Из конференции Expert_FAQ

Вопрос

Мне нужно просмотреть файлы с расширением tps. Простым текстоым редактором они не читаются так как зашифрованы. Подскажите пожалуйста как можно их просмотреть и если можно изменить?

Ответ

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

Это, скорей всего, файлы данных в формате Clarion Enterprise Edition

компании TopSpeed.

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

Из конференции Expert_FAQ

Вопрос

Что такое Pipes?

Ответ

Каналы.
Бывают именованные и не именнованные, доступны только в НТ.

С помощью каналов можно организовать взаимодействие (обмен данными) как на одном компьютере так и по сети, при том не имеет значения, какие сетвые протоколы установленны, главное чтобы был хотя бы один общий транспортный протокол.

Ivan Rozhuk

Дополню, что Pipes — это программируемые виртуальные каналы,

Вопрос

Подскажите, пожалуйста, когда говорят WINDOWS-программирование, что имеют в виду — программирование с помощью WIN32_API функции? И где это делают?

Ответ

Под термином WINDOWS-программирование можно подразумевать все, что угодно. Но в большинстве своем это означает «событийное» программирование. Именно эта концепция используется в Windows. Она кардинально отличается от того, как писались программы для DOS. Если в DOS программа представлялась единым целым и опрашивала в цикле клавиатуру, мышь, порты и пр., и в зависимости от того, нажата ли клавиша, передвинулась мышь, выполняла определенные действия, то в Windows этот процесс опроса берет на себя сама система и если произошло какое-то действие (событие), то сообщает (посылает вашей программе сообщение) об этом.

А Ваша программа фактически состоит из отдельных функций, каждая из которых обрабатывает определенные (клавиатура, мышь) сообщения и соответствующим образом реагирует на них (т.е. реагирует на событие). Очевидно, что события могут быть разными — это не только клавиатура и мышь, а например закрытие окна, изменение его размеров, завершение работы Windows, появление новых данных в буфере обмена и пр. Причем Ваша программа может реагировать только на определенные сообщения, а остальные, которые Вы не обрабатываете в своей программе, будут обработаны системой.

Знание WinAPI очень полезно, но в случае использования соответствующих систем программирования не является обязательным. Если использовать Borlan Pascal или Borland С++, то знание API просто необходимо. В случае использования т.н. RAD-систем (системы быстрой разработки приложений), таких как Delphi, С++ Builder, Visual Basic, Visual C++ и им подобных, знание WinAPI особо не требуется (но приветствуется). Все вышеперечисленные системы (а также множество других) являются ответом на вопрос «И где это делают?».

Goltsov Dmitry

1. Конечно можно двигать кнопочки в делфи и понятия не имея о том как все это работает, но тогда не забудьте поменятьь название своей профессии с программиста на разработчика.
2. Попробуйте написать простую прогу, которая считает, скажем, кол-во каких то букв в файле — если файл размером в (хотя бы) 30 МБ. Я посмотрю сколько у нее это займет времени(без нескольких потоков и проецирования файла в память)! Я не против библиотек типа ВЦЛ и МФЦ (если что большое, я пишу с МФЦ), но надо заглянут под корку!

Вопрос

Что такое скрипт? На каком языке пишеться? Где можно почитать основы?

Ответ

Скриптом сейчас называют любой интерпретированный язык программирования от языка, на котором пишутся BAT-файлы до BASIC-ов и языков, встроенных в игрушки. Характеризуются скриптовые языки тем, что в них элементарными действиями являются иногда довольно сложные действия, выполняемые самим интерпретатором скрипта. Прочитать по ним даже не знаю, что. Тут нужно смотреть конкретно, какую программу вы хотите использовать.

Из конференции Expert_FAQ

Вопрос

Что такое субклассинг?

Ответ

Оконные сообщения — универсальный способ межпроцессного взаимодействия в винде, те благодаря сообщениям разные программы могут общатся друг с другом, и совершенно не важно 16-ти, 32-х или 64-х они разрядные, и используют ли юникоды. Многие сообщения зарезервированны системой (сообщения о power status) либо используются стандартными компонентами (к примеру горизонтальный скрол посылает WM_HSCROLL окну на котором он находится). Но в МС предусмотрели и то что можно самому создавать сообщения, для этого зарезервирован целый диапазон значений начинающихся с WM_USER.

Сообщения посылаемые системой могут распространятся повсюду, а сообщения посылаемые приложением распространяются только в пределах Decktop~а (или WindowStation~а, уже точно не помню), но такие фичи есть только в НТ, в 9х всего один десктоп и нет оконных станций. С помощью этого механизма НТ защищают те сервисы которые имеют окна и запущены от других учетных записей, вообщето нормальный сервис не должен иметь окон, но бывает всякое.

Любое приложение имеющее хотя бы одно окно, имеет очередь сообщений связанных с этим окном, и обязано обрабатывать приходящие сообщения. Те кто програмирует на С++ и многие другие хорошо знакомы с этим, а от программистов истользующих ВБ это скрыто, так как ВБ сам занимается обработкой этих сообщений, доверяя программисту обрабатывать самые основные (Load, Unload, Click итд). Тем кто пытается выжать из вб больше перехватывая те сообщания которые вб не предоставляет, приходится самим внедрятся в обработчик оконных сообщений, это и называется СУБКЛАССИНГом. Те субклассинг это добавление своего обработчика оконных сообщений к уже существующему обработчику.

Субклассинг используют в основном программисты на ВБ, но и на других языках бывает без него не обойтись, к примеру мне пришлось субкласить окно винампа при написании своего плагина, в противном случае мне бы пришлось создавать еще одно окно и обработчик очереди сообщений чтоб была возможность использовать таймер.

Есть такая книжка: "Windows для профессионалов", автор Джеффри Рихтер, там рассматриваются все тонкости работы винды и програмирования под нее, правда там все на С++; там, в последних главах, рассмотренно подробно то что я кратко описал, кому интересно купите, почитайте, оно того стоит (типа =Крепкий орешек ВБ=, но для С++ и есть описание таких вещей которые я нигде не встречал).

На http://www.vbnet.ru/ есть статья про субклассинг — "Сообщения в Windows"

Ivan Rozhuk

Вопрос

Народ, подскажите что это за хеш-функция?

Ответ

Это из области криптографии. Хеш — это короткое представление данных. Зная хэш, практически невозможно получить данные, на основе которых был сделан хэш.

Используется, например, при залогинивании юзеров (взять хотя бы авторизацию в POP3 — там хеширование используется, также винда хранит у себя не сами пароли юзеров, а только их хэши), при передаче данных (всем известный CRC).

Получить хэш можно с помощью CryptoAPI. В .NET это немного проще — использовать соответствующие классы в пространстве имен System.Security.Cryptography.

Подробнее можно ознакомиться в MSDN, а также в умной книжке "Разработка защищенных приложений в среде Visual Basic 6".

Павел Сурменок



Copyright © 2000-2004 Сообщество Чайников
Контактная информация