Защищенный режим процессоров Intel


Пример программы для работы с CLIPBOARD


Приведённая ниже программа демонстрирует запись в CLIPBOARD из DOS-программы, а также вход в критическую секцию и выход из неё.

Вначале программа убеждается в том, что она запущена под управлением WINDOWS, работающем в расширенном режиме. Только в этом случае доступны функции для работы с CLIPBOARD.

Далее программа демонстрирует блокировку механизма переключения задач при входе в критическую секцию. После этого проверяется доступность CLIPBOARD.

Если CLIPBOARD доступен, программа проверяет, есть ли в нём текстовые данные. Если текстовые данные есть, они читаются из CLIPBOARD и выводятся на экран. Затем CLIPBOARD очищается и в него записывается тестовая строка, состоящая из латинских букв и символов кириллицы (для проверки выполнения перекодировки из OEM в ANSI).

После записи строки программа устанавливает размер CLIPBOARD и закрывает его. Далее вы можете запустить приложение WINDOWS "Clipboard" и посмотреть результат!

Листинг 24. Работа с WINDOWS CLIPBOARD и критической секцией Файл windos.c ----------------------------------------------------------- #include <dos.h> #include <stdio.h> #include <malloc.h> char buf[2048], far *fptr = buf; char msg[] = "String for storing(для записи) to WINDOWS clipboard\n\n\n"; void main(void) { union REGS inregs, outregs; struct SREGS segregs; unsigned long clipbrd_size, i; printf("\n\nРабота с WINDOWS CLIPBOARD и критической секцией\n" "© Frolov A. 1992\n\n"); // Проверяем, работает ли программа под управлением // WINDOWS в расширенном режиме. inregs.x.ax = 0x1600; int86( 0x2f, &inregs, &outregs); if (outregs.h.al == 0) { printf("\nТребуется расширенный режим WINDOWS!\n"); exit(-1); } // Выводим на экран версию WINDOWS printf("Версия WINDOWS - %d.%d\n", outregs.h.al, outregs.h.ah); // Определяем и выводим на экран идентификатор // виртуальной машины, на которой работает // данная программа. inregs.x.ax = 0x1683; int86( 0x2f, &inregs, &outregs); printf("Виртуальная машина - VM%d\n", outregs.x.bx); // Входим в критическую секцию.


Начало  Назад  Вперед