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

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


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

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

Выпуск № 532
от 29.04.2003, 18:50

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


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

Maverick
Статус: Профессиональный
Общий рейтинг: 134.94
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 119.05
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 140.49
[Подробней >>]
 
vitya
Статус: Профессиональный
Общий рейтинг: 107.97
[Подробней >>]
Илья
Статус: Опытный
Общий рейтинг: 103.7
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.44
URL: Программирование
[Подробней >>]
 
Broken Sword
Статус: Профессиональный
Общий рейтинг: 123.29
URL: моя рассылка по Protected Mode
[Подробней >>]
akul
Статус: Опытный
Общий рейтинг: 113.39
Телефон: +6019-6416245
[Подробней >>]
K0dMaster
Статус: Доверительный
Общий рейтинг: 114.87
[Подробней >>]
 
DiGiT[old]
Статус: Профессиональный
Общий рейтинг: 111.87
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 108.47
[Подробней >>]
Eugene
Статус: Профессиональный
Общий рейтинг: 108.78
URL: мощный файловый архив
[Подробней >>]


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

Вопрос № 3039. Здравствуйте уважаемые эксперты ! Извините за беспокойство. Я хотел спросить: в этом форуме рассматр... (ответов: 1)
Вопрос № 3041. привет всем экспертам, и прежде я хотел-бы поблагодарить Моверика спасибо тебе, и еще у меня такая ... (ответов: 2)
Вопрос № 3043. Здравствуйте Эксперты! У меня такая задача - как заблокировать клавиатуру в Windows9x. Я сначала пыт... (ответов: 4)
Вопрос № 3045. Здравствуйте уважаемые эксперты.Решил попробовать сменить адрес таблицы прерываний в реальном режиме... (ответов: 2)
Вопрос № 3047. Bob, привет. Спасибо за предыдущий ответ. Я наконец-то попал в Edit, но теперь надо нажать ОК. Я зна... (ответов: 1)
Вопрос № 3048. Здравствуйте, уважаемые эксперты. Я давно хотел начать учить ассемблер, но не знал с чего начать. В ... (ответов: 3)
Вопрос № 3049. По поводу вопроса о fork-е в линухе - спасибо всем ответившим, я разобрался. Если кому интересно: на... (ответов: 1)
Вопрос № 3050. Приветствую Вас господа Эксперты! Создаю в своей программе всплывающее меню, которое появляется при ... (ответов: 4)
Вопрос № 3051. Привет всем! Скачал я книгу Зубкова в эл.виде отсюда: http://bobjohnson.nm.ru/files/zubkov.zip, но о... (ответов: 1)
Вопрос № 3052. Еще раз привет. St огромное спасибо за ответ на вопрос. К вопросу номер 3044: под большим файлом пон... (ответов: 3)
Вопрос № 3053. Привет, эксперты! Недавно надыбал исходники одного небольшого резидентного вируса. Решил просмотреть... (ответов: 1)
Вопрос № 3054. Добрый день. У меня к вам несколько вопросов... 1. Есть функция GetWindowText, она посылает окну соо... (ответов: 2)

Вопросов: 12, ответов: 25


 Вопрос № 3039

Здравствуйте уважаемые эксперты !
Извините за беспокойство.
Я хотел спросить: в этом форуме рассматривается
Assembler только для ПК или можно спрашивать про
микроконтроллеры типа Atmel AVR и Atmel MCS-5 ?
Если нет, то может подскажете где есть подобные
форумы, конференции и т.д. по этим микроконтроллерам.
Заранее спасибо.
Радик.



Вопрос отправлен: 23.04.2003, 17:53
Отправитель: Радик (rdk78@nightmail.ru)

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

Отвечает Maverick

Приветствую Вас, Радик!
Ну если тебе смогут помочь, то ответят.
Здесь иногда такое спрашивают...
Типа меня бросила девушка, что мне делать...(что то в этом роде)


Ответ отправлен: 24.04.2003, 05:25
Отправитель: Maverick


 Вопрос № 3041

привет всем экспертам, и прежде я хотел-бы поблагодарить Моверика спасибо тебе, и еще у меня такая загвоздка я хочу прочитать ниже описанную информацию только вот не знаю по какому адресу может подскажите адресочек можно и с примером
не откажусь:))
--------------------------------------------------------------
Смещение Смещение
(деся- (шестнадца- Размер Содержание поля
тичное) тиричное)
--------------------------------------------------------------
0 00 3 байта Ближний переход к программе
начальной загрузки
----------------------------------------------------------+
3 03 8 байтов Название фирмы-изготовителя ¦
оборудования и его версия И¦
----------------------------------------------------+ Н¦
11 0B 1 слово Количество байтов Б ¦ Ф ¦
в секторе Л ¦ О Ф|
13 0D 1 байт Количество секторов О ¦ Р О¦
в кластере К ¦ М Р¦
14 0E 1 слово Число зарезервиро- B ¦ А М¦
ванных секторов П I¦ Ц А¦
16 10 1 байт Количество таблиц А O¦ И Т¦
FAT Р S¦ Я И¦
17 11 1 слово Количество элементов А ¦ Р¦
в каталоге М ¦ П О¦
19 14 1 слово Количество логичес- Е ¦ О В¦
ких секторов Т ¦ А¦
21 15 1 байт Байт описателя среды Р ¦ Н¦
22 16 1 слово Количество секторов О ¦ И¦
таблицы FAT В ¦ Ю¦
----------------------------------------------------+ ¦
24 18 1 слово Количество секторов в треке ¦
26 1A 1 слово Количество головок |
28 1С 1 слово Количество скрытых секторов ¦
----------------------------------------------------------¦
30 1E 416 байтов Программа начальной загрузки ¦
446 1BE 16 байтов Информация о разделении ¦
памяти ¦
462 1CE 50 байтов Остальная часть программы ¦
начальной загрузки ¦



Вопрос отправлен: 23.04.2003, 21:21
Отправитель: mirik (miri@mail.ru)

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

Отвечает Maverick

Добрый день, mirik!
Спасибо конечно, но я не МОверик :), а Maverick, читается Мэверик, ударение на первый слог.
А это что вообще такое? Ты окуда это взял? Если из той доки, то там должно быть написано.
Тьфу блин, не признал, это же MBR...Так бы и написал, не знаю где MBR находится.
Вот кстати, как то писал нужную тебе програмку(в прил)


Приложение:

Ответ отправлен: 24.04.2003, 05:26
Отправитель: Maverick


Отвечает Ayl

Доброе время суток, mirik!
Так это же описание boot-сектора. Во время начальной загрузки он копируется по адресу 0:7с00h. На дискете он занимает сектор 0/0/1, на HDD - первый сектор активного раздела (обычно 0/1/1).

Ответ отправлен: 24.04.2003, 14:17
Отправитель: Ayl


 Вопрос № 3043

Здравствуйте Эксперты!
У меня такая задача - как заблокировать клавиатуру в Windows9x.
Я сначала пыталась поставить глобальнуя ловушку (HOOK) на нажатие клавиатуры, но это показалось мне сложным.
Я сделала (в Делфи) окно, которое стоит поверх всех окон
и по сообщению OnKeyPressed я хотела записать в буфер клавиатуры ноль (на ассемблере) используя порты ввода-вывода, но я не знаю адреса порта клавиатуры.
Я конечно понимаю, что работать на прямую с портами ввода вывода в Windows не рекомендуется и вы быть может скажете, что Windows не позволит так работать, но я уже делала программу которая работала через ЛПТ порт и Windows даже не ругался.
У меня такие вопросы:
1. Как я могу программно заблокировать клавиатуру в Windows9x?
2. Есть ли у вас описание как работать с портами ввола-вывода клавиатуры (по каким адресам я могу получить код нажатой клавиши)?
3. Есть ли у вас описание как ставить HOOKи?
Если можно с исходниками...



Вопрос отправлен: 23.04.2003, 22:35
Отправитель: diana (dianasoft@mail.ru)

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

Отвечает masquer

Приветствую Вас, diana!
Не верь всякой фигне про порты, все равно под виндами без драйвера к портам нет доступа. А с хуками там проще некуда, я себе за 5 минут такие проги писал, когда клавиатуру протереть нужно было. Смотри в МСДН основы и в процедуре обработки хука просто не пропускай символы дальше - делов то...
Вот код в длл должен быть:

Приложение:

Ответ отправлен: 24.04.2003, 11:06
Отправитель: masquer


Отвечает vitya

Доброе время суток, diana!
Hook для того, чтобы заблокировать клавиатуру ставится элементарно. Просто напиши пустую процедуру обработки сообщения.
Примерчик есть на www.sources.ru
там смотри.
А так ничего сложного. :)

Ответ отправлен: 24.04.2003, 17:48
Отправитель: vitya


Отвечает Илья

Доброе время суток, diana!
2)
Для работы с клавиатурой типа PC/XT используются порты с адресами 60h и 61h.
Порт 60h при чтении содержит скан-код последней нажатой клавиши.
Порт 61h управляет не только клавиатурой, но и другими устройствами компьютера, например, работой встроенного динамика. Этот порт доступен как для чтения, так и для записи. Для нас важен самый старший бит этого порта. Если в старший бит порта 61h записать значение 1, клавиатура будет заблокирована, если 0 - разблокирована.
Так как порт 61h управляет не только клавиатурой, при изменении содержимого старшего бита необходимо сохранить состояние остальных битов этого порта. Для этого можно сначала выполнить чтение содержимого порта в регистр, изменить состояние старшего бита, затем выполнить запись нового значения в порт:
.........
in al, 61h
or al, 80h
out 61h, al
.........

Компьютер типа IBM AT позволяет управлять скоростными характеристиками клавиатуры, а также зажигать или гасить светодиоды на лицевой панели клавиатуры - Scroll Lock, Num Lock, Caps Lock.
Для расширенного управления клавиатурой используется порт 60h в режиме записи. Этот порт используются для управления подчиненным процессором Intel 8042, ответственным за обмен данными с клавиатурным компьютером.
При использовании порта 60h на запись программа дополнительно получает следующие возможности:
установка времени ожидания перед переходом клавиатуры в режим автоповтора;
установка периода генерации скан-кода в режиме автоповтора;
управление светодиодами, расположенными на лицевой панели клавиатуры - Scroll Lock, Num Lock, Caps Lock.
Процессор 8042 обслуживает не только клавиатуру, но и другие системы компьютера. Через порт 64h, например, выполняется сброс (отключение) процессора 80286 для возврата из защищенного режима работы в реальный.
Для посылки команды процессору 8042 вначале необходимо убедиться в том, что его внутренняя очередь команд пуста. Это можно сделать, прочитав слово состояния 8042 из порта с адресом 64h. Бит с номером 1 должен быть равен нулю.
Приведем фрагмент программы, составленной на языке ассемблера, проверяющий состояние очереди команд процессора 8042:
..........
mov cx,0 ; счетчик для ограничения времени
; ожидания готовности 8042
wait_loop:
; читаем порт состояния процессора 8042
in al,64h
and al,00000010b ; флаг готовности
; ожидаем готовность процессора 8042
loopnz wait_loop
; к приему команды
..........


После того, как программа дождется готовности процессора 8042, она может послать ему команду, записав ее в порт с адресом 60h:
..........
mov al,cmd ; команда для 8042
out 60h ,al ; вывод команды в 8042
..........

Некоторые команды состоят более чем из одного байта. Остальные байты команды необходимо записать в порт 60h, предварительно убедившись в готовности процессора 8042 с помощью последовательности команд, приведенной выше. В большинстве случаев можно также использовать простую временную задержку:
..........
mov al, cmd_byte1
out 60h, al
mov cx, 2000h
wait_loop: loop wait_loop
mov al, cmd_byte2
out 60h, al
..........

Мы приведем формат двух команд процессора 8042, имеющих отношение к работе с клавиатурой - команду установки задержки и периода автоповтора и команду управления светодиодами, расположенными на клавиатуре.
Для установки характеристик режима автоповтора в порт 60h необходимо записать код команды 0F3h, затем байт, определяющий характеристики режима:
Биты Значение

0-4 Период автоповтора:
0 - 30.0; 0Ah - 10.0;
1 - 26.7; 0Dh - 9.2;
2 - 24.0; 10h - 7.5;
4 - 20.0; 14h - 5.0;
8 - 15.0; 1Fh - 2.0.

Период автоповтора определяет количество
посылок скан-кода, генерируемых процессором
клавиатуры в одну секунду. Можно использовать не
только те значения, которые приведены выше,
но и промежуточные, например, 9 или 15h.
5-6 Задержка включения режима автоповтора:
00 - 250 мс;
01 - 500 мс;
10 - 750 мс;
11 - 1000 мс.
7 Зарезервировано, должно быть равно 0.

Первоначально при инициализации системы период задержки для включения режима автоповтора устанавливается модулями BIOS равным 500 мс при периоде автоповтора, равном 10 повторам в секунду. Если это слишком медленно для вас, вы можете установить другие значения. Некоторые прикладные программы, например, текстовый процессор Microsoft Word, содержат средства для управления временными характеристиками клавиатуры.
Для управления светодиодами, расположенными на лицевой панели клавиатуры, используйте команду 0EDh. Вслед за этой командой в порт 60h необходимо записать байт, имеющий следующий формат:
Биты Значение

0 1 - включить светодиод Scroll Lock;
1 1 - включить светодиод Num Lock;
2 1 - включить светодиод Caps Lock;
3-7 не используются.

Приведем пример простейшей программы, управляющей светодиодами на лицевой панели компьютера. Такое управление может выполняться только при использовании порта 60h управления клавиатурой, так как BIOS не содержит соответствующей поддержки. Наша программа после запуска включит все светодиоды и будет ожидать нажатия на любую клавишу. После нажатия программа выключит светодиоды.
#include
void main(void);
void main(void) {
int i;
// Посылаем процессору клавиатуры
// команду управления светодиодами
outp(0x60,0xed);
// Перед посылкой второго байта команды
// выполняем небольшую задержку
for(i=0; i<4000; i++);
// Выводим второй байт команды,
// младшие три бита которого определяют
// состояние светодиодов на лицевой панели
// клавиатуры.
outp(0x60,7);
// Ожидаем нажатия на любую клавишу.
getch();
// Выключаем все светодиоды.
outp(0x60,0xed);
for(i=0; i<4000; i++);
outp(0x60,0);
exit(0);
}




Ответ отправлен: 23.04.2003, 23:24
Отправитель: Илья


Отвечает Bob Johnson

Добрый день, diana!
И неужели такие вопросы интересуют девушек? Или просто воспользовалась советом с моей страницы?
never mind...
1. Лучше всего это делать через драйвер. Вариантов два - хук сервиса VKD_Filter_Keyboard_Input или свой обработчик прерывания 9h (51h под windows98). Это наиболее надежный вариант.
3. хук ставится функцией SetWindowsHookEx. Основные моменты:
3.1. хук можно поставить на свой поток (локальный) или на всю систмему (глобальный). Тебе подходит второй вариант.
3.2. если хук глобальный, его код должен обязательно находиться в dll. Ты пишешь dll, которая экспортирует одну функцию - функцию хука, затем в основной программе делаешь LoadLibrary - получаешь хэндл на библиотеку, далее делаешь GetProcAddress с этим хэндлом и именем твоей функции и так получаешь ее адрес. Ну и затем передаешь эти параметры SetWindowsHookEx. И все.
3.3. см. MSDN.


Ответ отправлен: 24.04.2003, 23:02
Отправитель: Bob Johnson


 Вопрос № 3045

Здравствуйте уважаемые эксперты.Решил попробовать сменить адрес таблицы прерываний в реальном режиме на другой адрес.
Я загрузил в реальном режиме регистр itdr.но ничего не получилось.пробовал сделать тоже самое в защищёном режиме,
но тоже не получилось.
Таблицу прерываний я предварительно копирую в нужное место.
Тестил по чистым MS DOS.
Может кто вышлет небольшой исходничек по этому поводу.Заранее благодарен.



Вопрос отправлен: 24.04.2003, 13:15
Отправитель: Landfox (anonims@gorodok.net)

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

Отвечает Broken Sword

Приветствую Вас, Landfox!
может лучше ты вышлешь свой

Ответ отправлен: 24.04.2003, 21:11
Отправитель: Broken Sword


Отвечает akul

Здравствуйте, Landfox!
Таблица векторов прерываний в реальном режиме неперемещаема.

Ответ отправлен: 26.04.2003, 13:17
Отправитель: akul


 Вопрос № 3047

Bob, привет.
Спасибо за предыдущий ответ. Я
наконец-то попал в Edit, но теперь надо нажать ОК. Я знаю что это
наверное KeyDown, но там так замороченно. Объясни пожалуйста на
примере какие значения надо передать в параметрах.
SendMessageA,hwnd,wm_keydown,????,????
P.S. Был на твоей страничке, оформление класс!
А письмо с BobJohn@NewMail.ru вернулось. Поэтому в рассылку.



Вопрос отправлен: 24.04.2003, 20:34
Отправитель: Макс (maxe@mail.kz)

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

Отвечает Bob Johnson

Доброе время суток, Макс!
Чтобы нажать ОК я бы использовал два сообщения, которые бы послал самой кнопке "ОК": WM_LBUTTONDOWN и затем WM_LBUTTONUP. Так получится, что как бы ты нажал на кнопку мышкой и отпустил. Параметры - можно 0.
С WM_KEYDOWN я тоже когда-то пробовал, там я wParam устанавливал на виртуальный код клавиши (в MSDN есть таблица виртуальных кодов, называется "Virtual-Key Codes", код Enter в ней 13, т.е. как и всегда - ну обычно многие виртиуальные коды совпадают с ASCII), а послдений (lParam) - я устанавливал в 0, т.к. там много всяких заморочек. И это работало:
SendMessageA, hwnd, WM_KEYDOWN, 13, 0
SendMessageA, hwnd, WM_KEYUP, 13, 0
> P.S. Был на твоей страничке, оформление класс!
:) обычно все только ругаются, что в опере не показывается и т.д.
> А письмо с BobJohn@NewMail.ru вернулось. Поэтому в рассылку.
Вот это странно. Я этим адресом постоянно пользуюсь...


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


 Вопрос № 3048

Здравствуйте, уважаемые эксперты.
Я давно хотел начать учить ассемблер, но не знал с чего начать. В универе у нас начался семестровый курс ассемблера, в общем я его уже как две недели сдал, и нахожусь в ступоре: что дальше??? Собственно я представляю, что дальше все остальное. :)
Но без какой-нибудь системы изучать его самостоятельно не получается. Я хотел бы у вас попросить, что бы вы помогли списком вопросов, которые помогут мне в дальнейшем.
В универе мы прошли:
1. Полный цикл создания программы.
2. Структура и элементы программы.
3. Директивы определения переменных.
4. Функции DOS ввода/ вывода
5. Организация циклов.
6. Работа со стеком.
7. Подпрограммы.
и с этим я разобрался.
Там в каждой главе есть несколько задач в пример и несколько заданий на решение.
Не могли бы вы мне помочь?
С уважением, Алексей.



Вопрос отправлен: 24.04.2003, 21:25
Отправитель: Алексей (ASoftService@mail.ru)

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

Отвечает Ayl

Приветствую Вас, Алексей!
Ну а теперь, собственно, и начинается программирование :-) Проще говоря, то, что ты описал - это, например, изучение алфавита языка и грамматики, ну а дальше - применение полученных знаний в реальном общении.
Что делать - ну, например, напиши какой-нибудь резидент для ДОС. Типа сохранение экрана в файл. Кстати, любимое дело. Заодно и ДОС изучишь неплохо. Попробуй найти книжки из следующего списка (см.Приложение) - почитай, может на что и потянет. Ну а дальше - защищенный режим :-)

Приложение:

Ответ отправлен: 25.04.2003, 11:26
Отправитель: Ayl


Отвечает K0dMaster

Доброе время суток, Алексей!
Почитай Зубкова или Пирагова ты найдешь массу полезных вещей которые можно сделать на ассемблере. Это и тср программы и защишенный режим и программирование портов вода вывода и тд/

Ответ отправлен: 26.04.2003, 09:29
Отправитель: K0dMaster


Отвечает Bob Johnson

Приветствую Вас, Алексей!
Зайди на мою страницу и скачай там себе книгу Зубкова - "Программирование..." еще там же есть рассылка О. Калашникова. Это должно помочь. Да, еще там же есть книга Питера Абеля (Асм для IBM PC). bobjohnson.nm.ru


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


 Вопрос № 3049

По поводу вопроса о fork-е в линухе - спасибо всем ответившим, я разобрался. Если кому интересно:
на самом деле там все
просто:
fork
test eax,eax
jnz _parent
_child:
...
_parent:
я просто думал, что при такой постанове выполниться код ТОЛЬКО после _child или ТОЛЬКО после _parent, т.к. значение в EAX после fork-а возвращается один раз и больше не меняется. Оказывается :) порожденный и родитель САМИ
переключаются, при этом child исполняет код после метки _child до _parent (теоретически и дальше, но нужно его либо зациклить jmp _child либо выйти (exit), смотря что нам надо), а parent - после метки _parent.
самый важный момент, на который нигде не обращают внимания: команда test EAX,EAX после вызова fork выполниться КАК РОДИТЕЛЕМ так и ПОРОЖДЕННЫМ процессом (!!!) с той лишь разницей, что в EAX в КОНТЕКСТЕ родителя будет находится PID порожденного, а у порожденного - 0 (у них после fork-а у каждого свой набор регистров (!!!!!!!) а не только сегментов, который сохраняется при переключении)
вот в этом и состоит принцип
Если есть доки интересные (асм+линукс only - кидайте плз)



Вопрос отправлен: 25.04.2003, 12:59
Отправитель: Broken Sword (brokensword@mail.ru)

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

Отвечает DiGiT[old]

Доброе время суток, Broken Sword!
Че то непонятно. Ты не забыл что это будут два разных процесса :). fork(для линузы лучше юзать clone()) клоинирует процесс, то есть копирует содержимое текущего процесса и запускает его. при том что родителю возвращается не 0 в EAX(для PC) а для потомка 0. При этом интересно что случается со всеми дескрипторами. Подробно об этом написано в UNIX:IPC Stevens'a Richard. Советую прочитать и тогда ты поймешь что нафига асм под линузы, когда есть си.
А насчет test EAX, EAX это ты пошутил наверное. А если я не буду делать test EAX, EAX вообще тогда он и не будет выполняться он выполняется постольку поскольку процесс клонирован. Интересная справка для линузы там pthread воркает почти как fork(). :(). Хотя это это проблема IA-32, в которой не сделали для сохранения контекста потока.

Ответ отправлен: 29.04.2003, 04:51
Отправитель: DiGiT[old]


 Вопрос № 3050

Приветствую Вас господа Эксперты!
Создаю в своей программе всплывающее меню, которое появляется при нажатии правой кнопки мыши. Создаю с помощью TrackPopupMenu. Если меню уже есть на экране, то как мне его убить?
Уважаемые эксперты, я очень бы хотел получить ответ на вопрос 3044, где я спрашивал о том, почему программа
IczEdit не может открыть большие файлы и пути ее улучшения. Ну хоть в общих чертах, Вы ведь это знаете, а мне очнь хочется написать свое, конкурентноспособное, но без Вашей помощи трудно!



Вопрос отправлен: 25.04.2003, 15:51
Отправитель: GHopper

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

Отвечает Bob Johnson

Приветствую Вас, GHopper!
Если на экране уже есть какое-либо стандартное меню, то windows его сам уберет при вызове другого. Проблем не должно быть.
По поводу rich edit - я вот тут запустил wordpad из состава виндов и попробовал открыть 20 мб файл - так открылся он быстро (1 - 2 сек), но потом вообще тормознуто в нем работал. Стандарнтый блокнот открывал столько же, но работал в нем быстрее. Но файл я создал именно текстовый - т.е. просто копировал строки. Если открывать нетекстовый файл, то wordpad очень тормозит (20 сек открытие), а блокнот совсем виснет.
А вот aditor открывает бысто (и работает тоже быстро) любой файл... Так что лучше - пиши свой компонент и затачивай его на работу с большими файлами. Видимо rich edit (как и многое от M$) идет по своему пути развития, в частности с большими файлами: "можно, но мы все сделали так, чтобы тебе этого не хотелось!" (всучи покупателю тормоз - так безопаснее).


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


Отвечает St

Привет, GHopper!
1) См. Приложение
2) Напомните пожалуйста большой файл это сколько МБ?
St

Приложение:

Ответ отправлен: 25.04.2003, 16:31
Отправитель: St


Отвечает Eugene

Здравствуйте, GHopper!
Используй CreateFileMapping. Почитай также о других функциях, связанных с ней.

Ответ отправлен: 25.04.2003, 18:02
Отправитель: Eugene


Отвечает masquer

Здравствуйте, GHopper!
Может WM_EXITMENULOOP поможет. А с Iczelion-ом берешь отладчик, тратишь от 5 минут до бесконечности (зависит от многих параметров индивидуума :))) и получаешь ответ (на почти любой вопрос, кстати)...
Х.з., может он версию RichEdit не ту использует, может код где-то просто неверный (у него такое бывает)...

Ответ отправлен: 25.04.2003, 18:15
Отправитель: masquer


 Вопрос № 3051

Привет всем!
Скачал я книгу Зубкова в эл.виде отсюда:
http://bobjohnson.nm.ru/files/zubkov.zip, но она далеко не полная. Пошел на сайт Andrew Vext http://www.netlib.wallst.ru, но там не нашел более полной версии. Она есть вообще? Может кто успел надыбыть, поделитесь, пожалуйста. Размер chm-файла книги, что скачал я 554 387 байт. Будьте любезны!



Вопрос отправлен: 25.04.2003, 15:50
Отправитель: [-=TT=-] (KunaevNA@PosolskyDom.ru)

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

Отвечает Bob Johnson

Здравствуйте, [-=TT=-]!
Сначала у меня на странице действительно была неполная версия книги Зубкова (ну это около месяца назад), но потом я скачал себе полную у Andrew Vext. А чего там не хватает?


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


 Вопрос № 3052

Еще раз привет.
St огромное спасибо за ответ на вопрос.
К вопросу номер 3044: под большим файлом понимается файл размером больше 15Мб. А вообще когда моя программ использовала простой Edit, я с ее помощью открывал файл размером 61Мб (под XP у Editа можно убрать лимит текста в 0, что, к сожалению, невозможно под Win98; загружал напрямую в буфер Editа), а после замены Editа RichEditом, программа виснит уже на 8Мб. Технология загрузки полностью взята из туториолов господина Iczilionа. С помощью Farа вообще просматривал файлы по 600Мб. Хотелось-бы, чтоб и мой редактор был таким всемогущим...



Вопрос отправлен: 25.04.2003, 18:08
Отправитель: GHopper

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

Отвечает Eugene

Приветствую Вас, GHopper!
С помощью CreateFileMapping ты сможешь открывать файлы до 4GB. Если нету хелпа на компе по Windows API, то зайди на msdn.microsoft.com и там в search укажи эту функцию.

Ответ отправлен: 25.04.2003, 19:13
Отправитель: Eugene


Отвечает St

Привет, GHopper!
Мой собственный блокнот (когда-то написанных под Win16 и частично (увы только частично) переделанный под Win32 и RichEdit) в Win2000 может открыть файл размером 23 МБ (больше уже тормозит даже Word в котором этот файл создан) но правда после этого позволяет только смотреть текст но не править (не знаю почему, не пытался понять). Впрочем Wordpad тоже глючит с этим файлом, например не может вставить приблизительно 1 МБ кусок из буфера - выдает ошибку. Так что думаю это может зависеть от чего угодно: например от системы и от компа (например от памяти - у меня здесь 128).
Насчет Fara и тд - у меня есть свой просмотрщик под ДОС который может смотреть файлы до 2 ГБ, при этом занимает в памяти под текст только 64 кБ - он просто подкачивает следующие или предыдущие куски с диска по 32 кБ, так что Far это не показатель, ведь досовские редакторы тоже могли работать с файлами больше 600 кБ. Думаю что RichEdit вследствие своей большей сложности чем Edit (он же хранит данные в RTF (я так думаю :-), имеет внутренние ограничения связанные например со служебной информацией (что-нибудь вроде массива начал строк и тд (я так делал в букридере так приходилось выделять память под такой массив почти 1/10 от размера текста)). Так что я думаю что если вы хотите сделать сверхмощьный редактор то его придется делать его с нуля (это сложно, но думаю не чрезмерно). За то время что я программирую на асме под винды, я понял что если нужно написать что-то нестандартное то не стоит полагаться целиком на функции API, тк во многих случаях они работают медленнее чем хочется.
St

Ответ отправлен: 25.04.2003, 19:33
Отправитель: St


Отвечает DiGiT[old]

Здравствуйте, GHopper!
Вранье. Спокойно в richedit поместил 17Метров и ничего живет. А вообще про file mapping что нить слышал. Юзай его и нечего грузить весь файл в мозги.

Ответ отправлен: 29.04.2003, 04:40
Отправитель: DiGiT[old]


 Вопрос № 3053

Привет, эксперты! Недавно надыбал исходники одного небольшого резидентного вируса. Решил просмотреть его работу в отладчике и тут меня привлек один момент. Когда я получаю адрес 21-го прерывания: mov di,084h; mov bx,es:[di], дамп памяти TD показывает значение 8В04, а в ВХ загружается 0В4А. А когда я устанавливаю свой вектор прерывания mov di,084h; mov word ptr es:[di],to_new_21h значение, судя по ТD, не меняется. При перехвате других прерываний такой печеньки не наблюдалось. Судя по работе этой проги, 21-е прерывание она все таки перехватывает. Но почему же тогда TDEBUGER не показывает перехват. Может он просто врет. Или это проделки винды. Извиняюсь за возможно глупый вопрос, но не судите строго, я в ассемблере сравнительно недавно. Надеюсь на вашу помощь.



Вопрос отправлен: 25.04.2003, 18:11
Отправитель: Ray

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

Отвечает Maverick

Здравствуйте, Ray!
Че то странно, что никто не ответил.
Знаешь, скорее всего это глюки TD.
У меня были похожие траблы, когда я расшифровывал тело проги, так вот, иногда он(TD) не обновлял код ни в окне кода, ни в окне дампа, хотя все работало... Короче погляди в другом отладчике.
Все должно заработать, если не запашет, пришли код.
TD почему то думает, что содержимое памяти иногда можно не обновлять, всмысле не показывать, а на самом деле все фурычит.

Ответ отправлен: 28.04.2003, 05:05
Отправитель: Maverick


 Вопрос № 3054

Добрый день.
У меня к вам несколько вопросов...
1. Есть функция GetWindowText, она посылает окну сообщение WM_GETTEXT. Как нужно обработать это сообщение, чтобы возвращался не текст заголовка окна, а то что я хочу? Как я понял нужно сделать что-то подобное - mov lParam, offset My_Text, но что-то не получается.
2. Можно ли определить структуру в секции .data или .data? и сразу же заполнить её или можно только - так LOCAL xxx:name_struct?
3. Можно ли определить массив в секции data?, например на 100 символов, или опять же только так LOCAL name[100]:BYTE?
Всё это под Masm32.



Вопрос отправлен: 25.04.2003, 18:40
Отправитель: Domovoi (domovoi_artem@mail.ru)

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

Отвечает Bob Johnson

Приветствую Вас, Domovoi!
1. когда тебе приходит WM_GETTEXT, то lParam указывает на буфер, который ты должен будешь заполнить, сам lParam менять незачем, а wParam указывает размер этого буфера.
2. Структуру - вполне, например
str <поле1, поле2, ..., полеn>
или
str {имяполя=значение, имяполя=значение, ...>


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


Отвечает masquer

Доброе время суток, Domovoi!
1. В качестве одного из параметров должен быть хендл контрола, из которого текст забирается, получи от "того что я хочу" хендл и забирай.
2. Можно. А при чем тут LOCAL - он со стеком работает вообще-то.
3. ----//----

Ответ отправлен: 25.04.2003, 19:04
Отправитель: masquer



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

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (35)
C / C++ (28)
Perl (6)
Delphi (12)
Pascal (22)
Basic / VBA (6)
Java / JavaScript (8)
PHP (4)
MySQL / MSSQL (3)
Пользователю
Windows 95/98/Me (28)
Windows NT/2000/XP (22)
"Железо" (23)
Поиск информации (10)
Администратору
Windows NT/2000/XP (11)
Linux / Unix (10)
Юристу
Гражданское право (6)
Семейное право (4)
Трудовое право (5)
КоАП (4)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


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

В избранное