Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 568
от 15.06.2003, 12:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 3477
Отправлено ответов: 10199
Активность: 293.3 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.86
URL: Программирование
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.63
[Подробней >>]
Tigran K. Kalaidjian
Статус: Опытный
Общий рейтинг: 118.31
URL: Методы оптимизации работы ПК
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 112.29
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 114.29
[Подробней >>]
_vt
Статус: Опытный
Общий рейтинг: 121.63
[Подробней >>]
 
Maverick
Статус: Профессиональный
Общий рейтинг: 131.06
URL: Эхоконференция по вирмейкингу
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
Ramzes
Статус: Профессиональный
Общий рейтинг: 125.48
URL: Microsoft homepage
[Подробней >>]
Hayk
Статус: Доверительный
Общий рейтинг: 111.69
[Подробней >>]
 
St
Статус: Опытный
Общий рейтинг: 107.56
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 137.83
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 3422. Здраствуйте, уважаемые эксперты! Я снова к Вам по поводу поиска файлов. Извините за назойливость! Те... (ответов: 3)
Вопрос № 3423. Хайте эксперты! Я знаю основные принципы работы на ассемблере(а86 я использую) с графикой. Создаю то... (ответов: 2)
Вопрос № 3424. Привет Bob Johnson! Следующий код у меня был использован cmp nCode,HC_ACTION je @@processing_hook ... (ответов: 1)
Вопрос № 3426. Здравствуйте Эксперты! Не так давно начал изучать Ассемблер и по ходу обучения возникло несколько... (ответов: 3)
Вопрос № 3427. Здравствуйте, эксперты. У меня есть программа, для ее работы нужно выделить 40Кбайт памяти, но если ... (ответов: 5)
Вопрос № 3428. Вопрос по сетевомиу программированию(TCP/IP). Предположим что с хоста A на хост Б одним вызовом send... (ответов: 4)
Вопрос № 3429. Привет, эксперты! Решил свою прогу загрузить в TD, в связи с этим вопросы: 1. Может ли он "раск... (ответов: 5)
Вопрос № 3430. Приветствую, программисты ! С наступающим вас всех праздником независимости ( только не понятно кого... (ответов: 3)
Вопрос № 3431. Здравствуйте, уважаемые эксперты. Подскажите, пожалуйста, с помощью какой функции можно перейти на д... (ответов: 2)
Вопрос № 3433. Добрый день ув.Эксперты! Соори за возможный офтопик... Как (например WinRAR 3.X.X) записывает себя в... (ответов: 3)

Вопросов: 10, ответов: 31


 Вопрос № 3422

Здраствуйте, уважаемые эксперты!
Я снова к Вам по поводу поиска файлов.
Извините за назойливость!
Теперь у меня почти не действует регистр СХ.
Он должен влиять на критерий поиска.
Когда я в него записываю 10h, то получаю и
каталоги и файлы (хотя должен получать только каталоги).
При меньших значениях (1,2,4,8) получаю один
и тот же набор файлов (независимо от их атрибутов).
Кроме того, в выводимых названиях файлов присутствуют
лишние символы.
Помогите разобраться, плиз.
С уважением, Sammy


Приложение:


Вопрос отправлен: 10.06.2003, 13:58
Отправитель: Sammy (sfxgt666@yahoo.com)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Добрый день, Sammy!
У меня в старой книги написано так: если cx = 0, ищутся только нормальные файлы (без аттрибутов). Если cx = 8, ищется только метка тома. При указании других атрибутов или их комбинации ищутся файлы с указанными атрибутами и нормальные файлы. Поэтому, когда ты запихиваешь 10h ты ищещь все каталоги + файлы без атрибутов. Чтобы найти только каталоги надо самому каждый раз проверять, что пришло в DTA и если это не подходит под твой критерий поиска, то искать следующий файл.

* EMan1.1: ---===*** Eternal power ***===---


Ответ отправлен: 10.06.2003, 16:05
Отправитель: Bob Johnson


Отвечает Ayl

Приветствую Вас, Sammy!
Во-первых, ты заносишь 13, 10, $ по фиксированным адресам, а имя файла - значение переменное. Например, файл A.TXT в DTA будет записано как A.TXT,0,???????
Вместо аопросов может быть все, что угодно. Например, остаток предыдущего поиска. Результат - мусор на экране.
Бороться с этим можно так. Ищешь первый 0, начиная со смещения 1eh и заменяешь его на знак доллара. Выводишь строку и потом еще выводишь перевод строки. Либо сразу заменяешь этот 0 на 3 своих байта (13, 10, $), только зарезервируй для имени файла 15 символов, а не 13, как в структуре DTA, иначе можешь что-нибудь лишнее затереть, если имя файла с расштрением будет больше 10 символов.
Во-вторых, а как ты повторный поиск запускаешь? К моменту вызова функции 4f у тебя DS:DX указывает не на DTA, а на DTA+1eh (вывод строки). Странно, что твоя прога вообще что-то ищет. Добавь после комментария "find next" строку mov dx, OFFSET dta - должно заработать нормально.

Ответ отправлен: 10.06.2003, 19:34
Отправитель: Ayl


Отвечает Tigran K. Kalaidjian

Доброе время суток, Sammy!
Честно говоря, не знаю почему не срабатывает 10h в CX, но можно пойти окольным путём: проверять байт 15h DTA (атрибуты файла) на установку 4-го бита.
Лишние символы можно убрать подчистив прошлое значение в DTA. Стек тоже незачем.
Исправленный вариант программы в приложении.

Приложение:

Ответ отправлен: 11.06.2003, 11:06
Отправитель: Tigran K. Kalaidjian


 Вопрос № 3423

Хайте эксперты!
Я знаю основные принципы работы на ассемблере(а86 я использую) с графикой. Создаю только com программы под ДОС. Вывести точку, нарисовать что-нибудь могу. Но возникает вопрос, как получаются "видееглюки", каковы основные принципы работы с палитрой (почему при работе с палитрой возникает один цвет и его оттенки) и что такое морФинг, какова его реализация на ассемблере. Хотелосьбы видеть примеры, ну или хотябы скудную ссылку на подобную информацию.



Вопрос отправлен: 10.06.2003, 16:27
Отправитель: Zensor (ZFTR@Rambler.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает baldr

Добрый день, Zensor!
Палитра - это набор оттенков, заданных через сочетание трех основных: красного, зеленого и синего цветов (сейчас хотят еще и белый цвет включить четвертым). Работа с палитрой - это чтение и запись в порты видеокарты. Конкретный номер порта я не помню, но он тебе сейчас и не поможет - ищи книгу Зубкова, в ней очень хорошо описаны все основные порты видеокарты.
Морфинг - это такой эффект, когда одна картинка плавно "перетекает" в другую - очень красиво, если хорошо сделать. :) Реализацией его я не занимался никогда, но могу предположить, что это делается вычислением среднего (или промежуточного) значения цвета между исходным и требуемым цветом в каждой точке через какие-то промежутки времени.
С примерами помочь не могу, жди ответов других экспертов.

Ответ отправлен: 10.06.2003, 16:57
Отправитель: baldr


Отвечает ASMодей

Здравствуйте, Zensor!
МорФинг - это, наверное, китаец такой :) А информация по
графике есть на www.enlight.ru

Ответ отправлен: 11.06.2003, 07:47
Отправитель: ASMодей


 Вопрос № 3424

Привет Bob Johnson!
Следующий код у меня был использован
cmp nCode,HC_ACTION
je @@processing_hook
jmp @@EXIT_Window_Hook_Proc
но но это не влияло на приход 2 WM_CHAR и 6 WM_KEYDOWN в Excel'е.
Насчет hHook - у меня данные помечены как shared и процедуры установки и снятия хуков находятся в той же DLL, так что hHook я получаю нормально, но за информацию спасибо.
Есть кстати проблема которая не решена вроде даже в такой крутой програме как UltimaShell (и в Keyboard Ninja тоже) - в Excel не отлавливается первый символ когда начинаешь писать в новой ячейке без перехода в режим правки. я правда пока не проверял с чем это связано.
Еще раз спасибо вам и masquer'у что приняли такое деятельное участие в решении моей проблемы.
St



Вопрос отправлен: 10.06.2003, 17:48
Отправитель: St (st23@yandex.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Приветствую Вас, St!
Если ты ставишь хук на клавиатуру (WH_KEYBOARD), то тебе не придет никаких WM_CHAR и WM_KEYDOWN!
Я тебе отправляю в ящик свою "наработку" - кривая программа на VC++, которая пишет нажатые клавиши в файл самым примитивным образом, но она работает и в ворде и в экселе нормально (кстати, и первую клавишу тоже ловит). Пример файла отправляю тоже. Кстати, у меня Win XP, может в этом дело? (но очень вряд ли).

* EMan1.1: ---===*** Eternal power ***===---


Ответ отправлен: 10.06.2003, 22:49
Отправитель: Bob Johnson


 Вопрос № 3426

Здравствуйте Эксперты!
Не так давно начал изучать Ассемблер и по ходу обучения возникло несколько вопросов:
1) Написал программу выклбчающую NumLock, Caps Lock и Scroll Lock (в приложении). Под TD работает отлично, а если просто запустить, то не выключает :-(. Подскажите пожалуйста почему так можно ли это поправить.
2) Как мне сгенерировать случайное число. Если быть более точным, то мне нужно сгенерировать 3 случайных бита, то есть число от 0 до 7.
3) И последнее киньте пожалуйста какой-нибудь справочник по прерываниям и функциям DOS. Очень нехватает.
Заранее большое спасибо всем ответившим.


Приложение:


Вопрос отправлен: 10.06.2003, 20:31
Отправитель: Delphist (delphist@list.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Здравствуйте, Delphist!
1) Выкинь строку
mov ds, ax
3) http://www.pobox.com/~ralf- и DOS, и BIOS, и Windows, и многое другое

---===*** Testing E-Man 1.2...***===---


Ответ отправлен: 11.06.2003, 17:52
Отправитель: _vt


Отвечает baldr

Здравствуйте, Delphist!
IMHO Tigran немного неправ - int 20h работает! Правда, не рекомендуется.
Но дело не в этом - просто установка бита в памяти не дает нужного эффекта до того момента, пока не отработало прерывание клавиатуры, которое считает этот бит (байт) из памяти и запишет в порт клавы. Чтобы добиться мгновенного зажигания индикатора, необходимо самому записать значение в порт клавы. Справочника с номерами портов рядом нет, но это где-то из диапазона 60h-64h...

Ответ отправлен: 11.06.2003, 13:48
Отправитель: baldr


Отвечает Tigran K. Kalaidjian

Приветствую Вас, Delphist!
Ошибок - море! Как оно у Вас работало? Ведь завершение работы некорректное...
Исправленный вариант в приложении. Если интересен подробный разбор полётов, то пишите на kalaidjian@pochtamt.ru

Приложение:

Ответ отправлен: 10.06.2003, 22:39
Отправитель: Tigran K. Kalaidjian


 Вопрос № 3427

Здравствуйте, эксперты. У меня есть программа, для ее работы нужно выделить 40Кбайт памяти, но если зарезервировать эту память заранее(db 40960 dup (0)), то исполнимый файл программы увеличивается на этот размер. Вроде выделить память загруженной программе позволяет функция 48h(только перед этим необходимо урезать память с помощью 4ah). Эта функция вызывается с bx, который содержит объем выделяемой памяти в параграфах. На выходе функция в ax выдает нужный сегмент. Вот в чем вопрос: можно затирать данные, содержащиеся в этом сегменте, или нужно искать по всему сегменту эти самые 40Кбайт, которые располагаются попорядку.
Спасибо.



Вопрос отправлен: 10.06.2003, 21:16
Отправитель: 666

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Приветствую Вас, 666!
Эти 40 кбайт начинаются с ax:0000...

---===*** Testing E-Man 1.2...***===---


Ответ отправлен: 11.06.2003, 17:52
Отправитель: _vt


Отвечает Ayl

Доброе время суток, 666!
Можно затирать. DOS имеет список свободных областей памяти. Если она может удовлетворить твой запрос (т.е. существует непрерывный блок памяти, не меньший, чем требуется), то из этого блока выделяется ровно столько параграфов, сколько запросили. Остальная часть памяти помечается свободной.
Тебе нужно 40Кб памяти. Ок. Запрашиваешь 2560 параграфов. Если DOS может выделить такой кусок, то ты получишь сегментный адрес своего 40Кб блока. Именно 40Кб с адреса Seg:0 ты можешь использовать. Без всяких проверок.

Ответ отправлен: 10.06.2003, 21:44
Отправитель: Ayl


Отвечает baldr

Приветствую Вас, 666!
Если ты пишешь com-программу, то вызов этого прерывания бессмысленен, потому как DOS считает, что память и так вся принадлежит тебе.

Ответ отправлен: 11.06.2003, 13:55
Отправитель: baldr


Отвечает Maverick

Доброе время суток, 666!
Я так понял это под дос?
Можно же просто в этом же сегменте (если прога небольшая) сразу после своего кода взять 40 Кб, тока со стэком аккуратнее.

Ответ отправлен: 13.06.2003, 12:38
Отправитель: Maverick


Отвечает Bob Johnson

Приветствую Вас, 666!
Когда тебе вернули сегментный адрес блока памяти, ты можешь использовать его, начиная со смещения 0, т.е. если тебе вернули 2345h, то твоя память будет находиться в пределах 2345h:00000 - 2345h:39999 (смещение - десятичное число).
Более того, вся свободная память изначально уже отдана твоей программе, тебе только остается проверить, сколько ее - это можно сделать только посмотрев два из 16 байт, предшествующие началу этого блока (какие - сейчас не помню, но ты можешь найти это с помощью отладчика). Если выделенной памяти больше чем к + 40кб (где к - размер твоей программы и данных), то можешь смело использовать следующие 40 кб.

* EMan1.1: ---===*** Eternal power ***===---


Ответ отправлен: 11.06.2003, 01:15
Отправитель: Bob Johnson


 Вопрос № 3428

Вопрос по сетевомиу программированию(TCP/IP).
Предположим что с хоста A на хост Б одним вызовом send посылается 16 байт. Приходит это дело на хост Б одним пакетом. Как можно узнать, сколько байт находиться в буфере драйвера? Варианты "послать 16, а потом сами байты" мне не подходит. Нужно считать всё, что есть в буфере.
Спасибо!



Вопрос отправлен: 10.06.2003, 22:01
Отправитель: Antonio

[Следующий вопрос >>] [Список вопросов]

Отвечает ASMодей

Здравствуйте, Antonio!
Можно в конце посылки добавить несколько байт, которые будут показывать окончание передачи. А при приеме посылки в цикле накапливать получаемые данные до тех пор, пока не придут эти байты. В протоколе HTTP, например, так и сделано - там в качестве конечных байтов передается два символа перевода строки.


Ответ отправлен: 11.06.2003, 07:53
Отправитель: ASMодей


Отвечает Ramzes

Здравствуйте, Antonio!
char key[100];
recv(s, key, 100, 0);
функция возвращает кол-во полученных байт.
если размер пакета меньше 100 байт, например 50, то все нормльно, они запишутся тебе в буфер, а если больше, то в буфер копируется часть пакета, а функцич возвращает SOCKET_ERROR, а WSAGetLastError возвращает код ошибки WSAEMSGSIZE. Если ты используешь не надежный протокол (UDP например), то оставшаяся часть пакета будет потеряна, в противном случае пакет остается в буфере пока ты не считаешь его в достаточно большой буфер.

Ответ отправлен: 11.06.2003, 11:33
Отправитель: Ramzes


Отвечает Hayk

Добрый день, Antonio!
Заголовок протокола какого-нибудь уровня имеет фиксированную длину( за редкими исключениями ). Так-что ты можешь подсчитать это всё самостоятельно. IMHO драйвер не даст тебе эту инфу, тем более когда драйвер скажем канального уровня работает на аппаратном уровне и программный доступ к нему ограничен.

Ответ отправлен: 11.06.2003, 11:10
Отправитель: Hayk


Отвечает Bob Johnson

Приветствую Вас, Antonio!
Это не считается правильными примером работы с сокетами. Правильно делать так - организовать передаваемые данные в некую логическую структуру (т.е. например действительно вначале передать 16), после чего ее передать. На приемной стороне необходимо сделать процедуру получения, которая не вернется, пока не получит эту логическую структуру или не произойдет таймаут. Для этого используются non-blocking sockets.
Ну а в принципе, если уж тебе нужно узнать, сколько данных есть в буфере WSA, то сделай так:
SOCKET s = ...
DWORD count;
int res = ioctlsocket (s, FIONREAD, &count);
res = 0, если все удачно и count равен числу байт в буфере, которые могут быть получены за один вызов recv (это может быть меньше, чем общее число байт в буфере).
Но возможна такая ситуация: ты вызываешь функцию, она тебе возвращает число байт, а пока ты выполняешь что-то там между ioctl и recv, число байт в буфере увеличивается. Так что лучше действительно вначале посылай 16, а потом сами байты.

* EMan1.1: ---===*** Eternal power ***===---


Ответ отправлен: 11.06.2003, 01:15
Отправитель: Bob Johnson


 Вопрос № 3429

Привет, эксперты!
Решил свою прогу загрузить в TD, в связи с этим вопросы:
1. Может ли он "раскулачивать" com-файлы? у меня загнать их в него не получилось.
2.Насколько я понял, чтобы этот дебугер загрузил прогу, ее нужно компилировать с определенными параметрами, делаю это так: tasm qq.asm zila tlink qq.obj v, tlink пишет, что не знает такого ключа (v), может я что-то неправильно пишу?
Заранее спасибо всем ответившим.



Вопрос отправлен: 11.06.2003, 00:20
Отправитель: Graff

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, Graff!
Во первых, просто "загнать" в Td можно как com, так и exe, просто обычно при загрузке com появляется надпись "Cannot load symbol table". Это ни о чем не говорит, он будет его отлаживать, просто без отладочной таблицы(не будет знать имена процедур, переменных). Если надо именно с отладочной информацией, тогда:
tasm prog.asm /zi
tlink /v prog.obj
При этом для com-приложений появится предупреждение "No stack" и сгенерируется exe-файл. Для них надо также вызвать tdstrip.exe - он выделит отладочную информацию в отдельный файл, и преобразует получившийся файл в нормальный com-файл:
tdstrip /s /c prog.exe

---===*** Testing E-Man 1.2...***===---


Ответ отправлен: 11.06.2003, 17:52
Отправитель: _vt


Отвечает Maverick

Доброе время суток, Graff!
Запросто.
tasm.exe myprog.asm /m3
tlink.exe myprog.obj /t/c
td.exe myprog.com


Ответ отправлен: 13.06.2003, 12:38
Отправитель: Maverick


Отвечает St

Привет, Graff!
Com-файлы к сожалению не могут содержать отладочную информацию :(, поэтому их приходится отлаживать в TD прямо в кодах или сделать временно exe-файл (благо различия (в не слишком сложных программах) не очень большие), отладить и вернуть обратно в com-файл.
St

Ответ отправлен: 11.06.2003, 12:22
Отправитель: St


Отвечает Bob Johnson

Здравствуйте, Graff!
1. В TD можно грузить все досовские проги, если памяти хватит. ПРи этом совсем не обязательно, чтобы в них присутствовала отладочная информация - если ее не будет, то он будет показывать команды ассемблера, как они есть. Проще всего грузить так: td _имя_программы_.
2. Компилировать надо с ключами:
tasm /zi
tlink /v
Если у тебя tlink не знает такого ключа, попробуй обновить его версию. У меня 7.1.30.1.

* EMan1.2: ---===*** The Eternal Power ***===---


Ответ отправлен: 11.06.2003, 13:10
Отправитель: Bob Johnson


Отвечает Ayl

Добрый день, Graff!
1. Может, может, только не в исходном коде, а "как есть".
Исходный код можно получить только из EXE файла, который компилировался с опцией "добавить отладочную информацию".
Загрузить COM-Файл в TD проще простого. Или в командной строке пишешь
td prog.com
или в самом TD с помощью меню File->Open
2. Ему по-фигу, просто он либо будет тебе отображать исходный текст, либо не будет (только дамп памяти и восстановленные команды). Параметры что для TASM'а, что для TLINK'а задаются с помощью слеша (/) и через пробелы. Например, вот так:
tasm prog.asm /zi /la
tlink prog.obj /v


Ответ отправлен: 11.06.2003, 01:44
Отправитель: Ayl


 Вопрос № 3430

Приветствую, программисты !
С наступающим вас всех праздником независимости ( только не понятно кого от кого ).
Могу ли я выслать кому-нибудь мое первое творение, чтобы узнать, чего в нем плохо ? Без удовольствия, но с пониманием приму критику. Проверялась на вин98, вроде проблем нет. Есть только одно недоразумение - иногда функция CopyFyle возвращает код ошибки 50d ( отказано в праве доступа ? ). В основном это относится к текстовым файлам, какие бы они атрибуты не имели и работаю ли я с ними в данный момент, или нет.
Илья. mis421@list.ru



Вопрос отправлен: 11.06.2003, 07:27
Отправитель: ilya (mis421@list.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, ilya!
Можешь, отправляй...

---===*** Testing E-Man 1.2...***===---


Ответ отправлен: 11.06.2003, 17:52
Отправитель: _vt


Отвечает Ramzes

Доброе время суток, ilya!
А где же творение ? :((

Ответ отправлен: 11.06.2003, 11:12
Отправитель: Ramzes


Отвечает St

Привет, ilya!
Чтобы знать хочу ли я, неплохо бы сначала сказать что делает эта программа :)
St

Ответ отправлен: 11.06.2003, 12:25
Отправитель: St


 Вопрос № 3431

Здравствуйте, уважаемые эксперты. Подскажите, пожалуйста, с помощью какой функции можно перейти на другой диск(для ДОСа).



Вопрос отправлен: 11.06.2003, 08:39
Отправитель: a1 (a111_666@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, a1!
Функция 0Eh прерывания 21h
Вход: ah=0e, dl=номер диска(0-А, 1-В и т.д.)
Выход: al-число логических дисков в системе.

---===*** Testing E-Man 1.2...***===---


Ответ отправлен: 11.06.2003, 17:52
Отправитель: _vt


Отвечает Ayl

Здравствуйте, a1!
Функции 0eh - установить диск по умолчанию и 19h - получить текущее значение диска по умолчанию. В DL для функции 0eh задается НОМЕР диска (0=A, 1=B и т.д.).


Ответ отправлен: 11.06.2003, 10:02
Отправитель: Ayl


 Вопрос № 3433

Добрый день ув.Эксперты!
Соори за возможный офтопик...
Как (например WinRAR 3.X.X) записывает себя
в поп-ап меню которое вылетает по нажатию
правой кнопки мыши...(если указатель мыши стоит
на файле)...
Там где:
Открыть
------------
Копировать
Вырезать
Вставить
И т.д.

Спасибо!
pAcU



Вопрос отправлен: 11.06.2003, 12:28
Отправитель: pAcU (pacu@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает _vt

Добрый день, pAcU!
В реестре прописывается CLSID программы по пути:
HKCR{ProgID}shellexContextMenuHandlers
По пути
HKEY_CLASSES_ROOTCLSID{CLSID}InProcServer32 прописывается обработчик (для WinRAR - rarext.dll), который через специальный интерфейс обрабатывает нужные сообщения (там еще некоторые другие интересные вещи есть...)

---===*** Testing E-Man 1.2...***===---


Ответ отправлен: 11.06.2003, 17:52
Отправитель: _vt


Отвечает Hayk

Добрый день, pAcU!
В Windows Registry для каждого типа файлов есть секция для указания всех возможных вариантов действий. Именно этот лист и показывает explorer в PopUp Menu.

Ответ отправлен: 11.06.2003, 12:42
Отправитель: Hayk


Отвечает masquer

Доброе время суток, pAcU!
В реестре в каталоге HKEY_CLASSES_ROOT, подробности лучше в МСДН смотреть.

Ответ отправлен: 11.06.2003, 12:51
Отправитель: masquer



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (37)
C / C++ (29)
Perl (7)
Builder / Delphi (20)
Pascal (32)
Basic / VBA (11)
Java / JavaScript (12)
PHP (8)
MySQL / MSSQL (7)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (31)
"Железо" (24)
Поиск информации (16)
Администратору
Windows NT/2000/XP (15)
Linux / Unix (8)
Юристу
Гражданское право (6)
Семейное право (2)
Трудовое право (3)
КоАП (3)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное