Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
shpora_po_sp.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
308.78 Кб
Скачать

21. Работа с окном консоли

Дескриптор ОКНа КОНСОЛИ МОЖНО ПОЛУЧИТЬ, ВЫЗВав фуНКЦИЮ GetConsoleWindow, которая имеет следующий прототип:

HWND GetConsoleWindow (VOID) ;

В случае успеха эта функция возвращает дескриптор окна консоли, а в случае неудачи — null. Неудача означает, что консоли у приложения нет. Отметим, что функция GetConsoleWindow работает только на платформе операционных систем Windows 2000/XP.

ДЛЯ Чтения заголовка ОКНа КОНСОЛИ ИСПОЛЬЗуеТСЯ фуНКЦИЯ GetConsoleTitle, которая имеет следующий прототип:

DWORD GetConsoleTitle(

LPTSTR lpConsoleTitle, // адрес буфера для заголовка

182

Часть III. Программирование консольных приложений

DWORD nSize // размер буфера для заголовка в символах

);

В случае успеха эта функция возвращает длину строки с заголовком в символах, а в случае неудачи — 0.

Для установки заголовка окна консоли используется функция setconsoieTitie, которая имеет следующий прототип:

BOOL SetConsoleTitle(

LPCTSTR lpConsoleTitle // указатель на строку с заголовком

);

В случае успеха эта функция возвращает ненулевое значение, а в случае неудачи — false.

22. Работа со списками управления доступом на высоком уровне

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

Для идентификации учетных записей, которым соответствуют элементы из списка управления доступом, используется структура типа trustee. Тип этой структуры определен следующим образом:

typedef struct _TRUSTEE {

struct _TRUSTEE *pMultipleTrustee; //не поддерживается

MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; // замещение

TRUSTEE_FORM TrusteeForm; // тип имени учетной записи

TRUSTEE_TYPE TrusteeType; // тип учетной записи

LPSTR ptstrName; // указатель на имя или SID учетной записи

} TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;

Поле pMuitipieTrustee должно указывать на структуру trustee, описывающую учетную запись сервера, которая может замещать (impersonates) данную структуру trustee. В настоящее время эта возможность не поддерживается и поэтому в поле pMuitipieTrustee должно быть установлено значение null.

23. Работа с буфером экрана

Буфер экрана может быть создан посредством вызова функции CreateConsoleScreenBuffer, Которая имеет следующий ПРОТОТИП:

HANDLE CreateConsoleScreenBuffer(

DWORD dwDesiredAccess, // режимы доступа

DWORD dwShareMode, // режимы разделения доступа

CONST SECURITY_ATTRIBUTES *lpSecurityAttributes, // атрибуты зашиты

DWORD dwFlags, // тип буфера экрана

LPVOID IpScreenBufferData // зарезервировано

);

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

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

□ generic_read — процессу разрешается чтение данных из буфера экрана;

□ generic_write — процессу разрешается запись в буфер экрана.

Параметр dwShareMode определяет, может ли буфер экрана использоваться несколькими процессами одновременно. Если этот параметр равен 0, то создаваемый буфер экрана не может использоваться несколькими процессами одновременно. Кроме того, этот параметр может принимать любую

комбинацию следующих значений:

□ file_share_read — буфер экрана допускает совместное чтение;

□ file_share_write — буфер экрана допускает совместную запись.

Параметр IpSecurityAttributes задает атрибуты защиты. Пока он будет устанавливаться нами в null, что задает атрибуты защиты по умолчанию. Параметр dwFiags задает тип буфера экрана и может принимать только одно значение console_textmode_buffer.

Параметр lpscreenBuf ferData зарезервирован для дальнейшего использования и поэтому должен быть установлен в null. После создания буфер экрана содержит пробелы, а курсор установлен в позицию с координатами @, 0). Чтобы сделать буфер экрана активным, т. е. выводить его содержимое на экран, нужно вызвать функцию setconsoieActiveScreenBuf f er, которая имеет следующий прототип:

BOOL SetconsoieActiveScreenBuffer(HANDLE hConsoleOutput);

В случае успешного завершения эта функция возвращает ненулевое значение, а в случае неудачи — значение false. Единственным параметром этой функции является дескриптор буфера экрана.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]