• Программирование

Программирование

Win32 API. Каретки

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

Win32 API. Диалоговые окна

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

Win32 API. Буфер обмена

Буфер обмена (clipboard)- набор функций и сообщений, который делает возможным передачу данных в прикладные программы, разработанные при помощи Microsoft Win32 прикладного программного интерфейса (API). Поскольку все прикладные программы имеют доступ к буферу обмена, данные могут быть легко перемещаемы между приложениями или внутри прикладной программы.

Win32 API. Hooks (хуки)

Hook - это некоторая точка в Microsoft Windows механизме обработки сообщений, где приложение может подключить подпрограмму для наблюдения за потоком сообщений в системе и обработки сообщений некоторых типов до того, как они попадут в целевую оконную процедуру. Этот краткий обзор описывает Windows hook-точки и объясняет, как использовать их в базирующейся на Win32 прикладной программе.

Win32 API. Библиотека стандартных диалоговых окон

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

Процессы в Windows

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

Написание экстра-маленьких Win32 приложений на С++ от 1 КБ

Натыкаясь в Интернете на довольно интересные программы, я часто не решался их закачивать после того, как узнавал их размер. Какую ни возьми - все огромные. Да и ресурсов системных потребляют немало. В этой статье я расскажу о том, как сделать программу в среднем в 10 - 100 раз меньше размером, чем попадаются аналогичные.

Win32 API FAQ

Часто задаваемые вопросы по Win32 API.

Win32 API. Спpавочник по сообщениям Windows

Каждый из pазделов этого материала описывает, что делает сообщение, какие значения используются для каждого поля сообщения и какие возвpащаемые значения ожидаются или задаются Windows. В конце каждого описания пpиводятся дополнительные комментаpии. wParam и lParam являются обязательными паpаметpами сообщений Windows.

COM в Ассемблере

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

Пишем свой загрузочный сектор

Мы будем писать загрузочный сектор для трехдюймовой дискеты с файловой системой FAT12. После окончания начальной загрузки программа POST находит активное устройство и загружает с него короткую программу загрузки ОС - загрузочный сектор. Загрузочный сектор это первый физический сектор устройства, в данном случае дискеты и его размет равен всего ничего 512 байт. С помощью этих 512 байт кода мы должны найти основную часть загрузчика операционной системы, загрузить его в память и передать ему управление. Заголовок файловой системы FAT находится в первом секторе дискеты, благодаря чему этот заголовок, содержащий всю необходимую информацию о файловой системе, загружается вместе нашим загрузчиком.

Программирование COM портов

Порт 3F8h. Этот порт соответствует регистру передавемых данных. Для передачи в порт 3F8h необходимо записать байт передаваемых данных. После приема данных от внешнего устройства они могут быть прочитаны из этого порта. В зависимости от состояния бита управляющего слова, выводимого в управ- ляющий регистр с адресом 3F8h, назначение порта 3F8h изменяться. Если этот бит равен 0,порт используется для записи передаваемых данных.Если же этот бит равен 1, порт используется для вывода значения младшего байта делителя частоты тактового генератора. Изменяя содержимое делите- ля, можно изменять скорость передачи данных.

Переполнение буфера

В данной статье рассматривается пример использования переполнения стека под Windows 9x на платформе Intel x86. Изложение рассчитано на читателя, понимающего принципы работы персонального компьютера и более чем поверхностно знакомого с программированием.

Виртуальный драйвер для обслуживания аппаратных прерываний

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

Опыт дизассемблирования большой .com программы

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

Оптимизация программ на Assembler

Несмотря на все более широкое распространение языков программирования и интегрированных сред программирования, оптимизация программ на ассемблере остается актуальной темой дискуссий для программистов. Можно упомянуть, например, форум програамистов, проведенный сетью PC MagNet, который стал ареной многочисленых "дуэлей": то один, то другой участник предлагал всем желающим решить небольшую, но интересную задачу программирования - и рассматривал присылаемые решения, ожидая, кто жее и как решит задачу наименьшей кровью, то есть затратив минимум байтов на программу. Подобно этому проведенная сетью BIX конференция по языку ассемблера для процессора 8088 стала трибуной немалого числа основательных рассуждений по поводу неочевидных аспектов оптимизации ассемблерных программ.

Справочник программиста на персональном компьютере фирмы IBM. Приложения

Основной единицей хранения данных в компьютере является бит. В большинстве микрокомпьютеров восемь битов объединены в байт, при этом каждый бит байта может быть установлен или "включен" (= 1) или сброшен или "выключен" (= 0), допуская 256 разных вариантов. Таким образом, в одном байте можно представить 256 разных симво- лов (расширенный набор кодов ASCII) или целое число в диапазоне от 0 до 255. Хотя мы привыкли записывать эти числа в десятичной форме, они могут записываться также в двоичной или шестнадцати- ричной форме - их значения при этом не изменяются, а программы могут с одинаковой легкостью читать эти значения как в той, так и в другой форме.

Справочник программиста на персональном компьютере фирмы IBM. Ввод/вывод

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

Справочник программиста на персональном компьютере фирмы IBM. Принтер

MS DOS может работать с тремя параллельными устройствами (LPT1 - LPT3) и в этой главе показано как управлять ими. Последователь- ные принтеры управляются в точности так же, как и параллельные, за исключением способа, которым данные посылаются на принтер; эта информация приведена в разделе 1 главы 7. Каждое параллельное устройство имеет свой адаптер. Адаптер управляется тремя регист- рами ввода/вывода и адреса портов этих регистров различны для каждого адаптера.

Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители

Все диски, как гибкие, так и жесткие, организованы одинаковым образом. Поверхность диска разделена на ряд концентрических ко- лец, называемых дорожками, а дорожки делятся радиально на секто- ра. Например, стандартная дискета с диаметром 5 1/4 дюйма имеет 40 дорожек и в системе MS DOS 2.0 каждая дорожка разбита на 9 секторов (15 секторов на дискете емкостью 1.2 Мбайта и 17 на фиксированном диске). Размер сектора 512 байт, и 512 байт * 9 секторов * 40 дорожек * 2 стороны дает в итоге емкость дискеты 360K. Все типы дисков используют размер сектора 512 байт в MS DOS.

Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал

В этой главе рассмотрены монохромный адаптор, цветной графический адаптор, видеосистема PCjr и улучшенный графический адап- тер (EGA). Все 4 системы базируются на микросхеме Motorola 6845 CRTC (cathode ray tube controller); хотя EGA на самом деле ис- пользует заказную микросхему, основанную на принципах 6845. Эта микросхема выполняет массу технических задач, которые обычно не интересуют программиста. Однако, она также устанавливает режим экрана, управляет курсором и (для цветного графического адаптора) управляет цветом. Микросхема легко программируется напрямую, хотя процедуры операционной системы позволяют управлять большинством ее действий.

Справочник программиста на персональном компьютере фирмы IBM. Клавиатура

Клавиатура  содержит интелевский микропроцессор, который воспринимает каждое нажатие  на  клавишу  и  выдает скан-код в порт A микросхемы  интерфейса  с  периферией [1.1.1],  расположенной  на системной плате.  Скан-код это однобайтное число, младшие 7 битов которого представляют идентификационный номер, присвоенный каждой клавише. Таблица скан-кодов приведена в [3.3.2].

Справочник программиста на персональном компьютере фирмы IBM. Таймеры и звук

Все IBM PC используют микросхему таймера 8253 (или 8254)  длясогласования импульсов от микросхемы системных часов.  Число циклов  системных часов преобразуется в один  импульс, а  последова тельность этих импульсов  подсчитывается для определения времени, или  они  могут быть посланы на громкоговоритель  компьютера  для генерации звука определенной частоты.   Микросхема 8253 имеет три идентичных независимых канала, каждый из которых может программироваться.

Справочник программиста на персональном компьютере фирмы IBM. Системные ресурсы

Зачем нужно программировать на языке ассемблера? Сегодня обычно используют такие языки высокого уровня, как Бейсик, Фортран или Паскаль. Возможно, что и вы знакомы по крайней мере с одним из языков высокого уровня. Если вы используете IBM PC, то знаете, что она имеет интерпретатор Бейсика. Зачем же нужен еще один язык программирования, особенно такой, который сулит определенные трудности? Даже располагая сегодня языками высокого уровня, вы все равно нуждаетесь в языке ассемблера в силу его эффективности и четкости. Программы на языке ассемблера могут быть очень эффективными. В случае работы программистов одинаковой квалификации и равной одаренности программа, составленная на языке ассемблера, будет короче и более быстро выполнимой, чем точно такая же программа на языке высокого уровня. Это остается верным фактически для всех небольших и средних программ.

Assembler: Создание окна

Основные шаги при создании окна:

1. Получить дискриптор Вашей программы(обязательно)
2. Получить указатель на командную строку(не обязательно)
3. Зарегистрировать класс окна(не требуется, если Вы используете
встроенный тип окна, например MessageBox)
4. Создать окно(обязательно)
5. Показать окно(если хотите немедленно показать окно)
6. Обновить окно
7. Образовать бесконечный цикл, обрабатывающий сообщения окна
8. Если есть сообщения, то обработать специализированной функцией
ответственной за окно
9. Выйти из программы, если пользователь закрыл окно

Программирование CMOS на Assembler

В эпоху интенсивного развития высоких технологий и технологий Internet программирование для «железа» отошло на второй план. А между тем практически невозможно реализовать ничего стоящего без правильной конфигурации оборудования, в частности CMOS - энергонезависимой памяти компьютера. В данной статье мы рассмотрим устройство CMOS, его структуру и возможности программирования. Сразу оговорюсь, что программировать CMOS желательно из реального режима ОС; под ОС Windows это делается с помощью специальных драйверов VxD или SYS. В Сети существует достаточно источников документации по построению таковых, поэтому я на них останавливаться не буду. Естественно, что проводить все ниже перечисленные действия по записи значений в CMOS следует с особой осторожностью; иногда (!) можно потерять практически все значения конфигурации ПК. В таковом случае необходимо очистить CMOS; как это сделать - смотрите в документации к вашей материнской плате. Также я буду использовать язык ассемблера для иллюстрации конкретных примеров, а так же широко распространенный отладчик DEBUG.EXE, который прилагается практически с каждой версией ОС Windows/DOS.

Assembler & Win32

Программирование на ассемблере под Win32 воспринимается весьма не однозначно. Считается, что написание приложений слишком сложно для применения ассемблера. Собственно обсуждению того, насколько оправдана такая точка зрения, и посвящена данная статья. Она не ставит своей целью обучение программированию под Win32 или обучение ассемблеру, я подразумеваю, что читатели имеют определённые знания в этих областях.

Написание внешних компонент для 1С на Delphi

Насколько мне известно, многие 1С-ники хотели бы изучить написание внешних компонент, чтобы поднять свое магическое искусство 1С на качественно иную ступень. Что этому может помешать? Во-первых, известный синдром компонентофобии (который исторически берет свое начало от криво написанных внешних компонент). Во-вторых –синдром  клинически запутанного кода. OLE-программирование – это не самая простая штука, и, как говорится, «не всякая птица долетит до середины Днепра» (особенно, если эта «птица» – программист 1С). Я предлагаю вашему вниманию шаблон внешней компоненты, который, как я надеюсь, достаточно прост для понимания (я постарался его значительно упростить по сравнению с типовым примером из «Технологии создания внешних компонент») и стабилен (везде, где это возможно, я использую обработку исключительных ситуаций).