ЛАБОРАТОРНАЯ РАБОТА №7. СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ WIN32 DLL-МОДУЛЕЙ В ПРИЛОЖЕНИЯХ

Целью данной работы является изучение методики создания DLL-модулей (dynamic-link libraries) и приемов программирования с использованием DLL, а также закрепление навыков программирования в интегрированной среде Borland C++ Builder для операционных систем Windows 98, 2000 XP и NT.

 

Задание

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

Функция преобразования текста в формат ANSI должна вызываться из DLL-модуля, который проецируется на адресное пространство приложения неявной компоновкой (статический метод).

Функция поиска ключевых слов и преобразования в RTF-формат с подсветкой найденных ключевых слов должна вызываться из другого DLL-модуля, который проецируется на адресное пространство приложения явной загрузкой DLL (динамический метод).

 

Порядок выполнения лабораторной работы №7:

Лабораторная работа должна выполняться в следующей последовательности:

1. Выполнить запуск основного приложения Borland C++ Builder. Открыть новый проект для разработки DLL, используя команду File|New…. В окне Newвыбрать приложение с иконкой DLL. Сохранить новый проект в папке D:/VMSS/U41(U42)/<user_s>, используя команду File|Save Project As. Имена папки, проекта <user_s> и файла присваиваются самостоятельно.

2. Открыть новый модуль, используя команду File|New Unit.Сохранить новый модуль в папке D:/VMSS/U41(U42)/<unit_s>, используя команду File|Save As…. Имя файла модуля <unit_s> присваивается самостоятельно.

3. В файле <unit_s> ввести функцию преобразования текста в формат ANSI. Пример функции приведен ниже.

 

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "MainLab2s.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

//---------------------------------------------------------------------------

extern "C" __declspec(dllexport) void ConvertTxt(char *buf)

// преобразование в ANSI

{

// преобразование буфера

OemToChar(buf,buf);

}

 

4. В заголовочном файле <unit_s>.h ввести описание экспортируемой функции. Пример приведен ниже.

//---------------------------------------------------------------------------

#ifndef MainLab2sH

#define MainLab2sH

//---------------------------------------------------------------------------

extern "C" __declspec(dllexport) void ConvertTxt(char *buf);

#endif

5. В опциях проекта Project|Options… в окне Advanced Compiler опцию Calling Convention установить в состояние Standart Call.

6. Выполнить компиляцию проекта. В результате компиляции будут сгенерированы два файла - <user_s>.dll (DLL-модуль) и <user_s>.lib (файл, который содержит список функций данной DLL).

7. Вызвать свой проект из задания первой лабораторной работы.

8. В процедуре реакции на событие нажатия кнопки "Преобразовать в ANSI" вместо функции API преобразования буфера в ANSI-формат установить вызов функции из DLL-модуля. Пример процедуры приведен ниже.

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

// преобразование в ANSI

{

char *txt;

txt = new char [RichEdit1->Lines->Text.Length()];

// чтение в буфер

strcpy(txt,RichEdit1->Lines->Text.c_str());

// преобразование буфера

// вызов DLL статически

ConvertTxt(txt);

// запись в MEMO

RichEdit1->Lines->Text=(AnsiString)txt;

delete txt;

}

//---------------------------------------------------------------------------

9. В заголовочном файле <unit>.hpp ввести описание импортируемой функции. Пример приведен ниже.

//---------------------------------------------------------------------------

// функции DLL

extern "C" __declspec(dllimport) void ConvertTxt(char *buf);

10. Включить в проект приложения LIB-файл DLL-модуля. Для этого с помощью команды Project|Add to Project…вызвать окно Add to Project.В качестве типа файла задать Library file (*.lib).Выбрать файл <user_s>.lib и нажать кнопку "Открыть".

11. Выполнить компиляцию. Устранить ошибки и проверить правильность выполнения функции.

12. Для отладки DLL-модуля необходимо выполнить следующие действия:

· вызвать проект DLL-модуля;

· установить параметры в окне Run Parameters. В поле Host applicationиспользуя кнопку Browseустановить имя ЕХЕ-файла, из которого вызывается функция DLL. В поле Run Parametersпрописать имя вызываемой функции DLL (ConvertTxt);

· установить точку останова в функции ConvertTxt();

· выполнить запуск Run.В начале запускается ЕХЕ-файл, при нажатии на кнопку "Преобразовать в ANSI" управление передается функции DLL и отладчик останавливается в указанной точке останова;

· для отладки DLL-модуля используются те же правила и методы, что и при отладке обычного ЕХЕ-модуля.

13. Открыть новый проект для разработки DLL, используя команду File|New…. В окне Newвыбрать приложение с иконкой DLL. Сохранить новый проект в папке D:/VMSS/U41(U42)/<user_d>, используя команду File|Project As. Имена папки, проекта <user_d> и файла присваиваются самостоятельно.

14. Открыть новый модуль, используя команду File|New Unit.Сохранить новый модуль в папке D:/VMSS/U41(U42)/<unit_d>, используя команду File|Save As…. Имя файла модуля <unit_d> присваивается самостоятельно.

15. В файле <unit_d> ввести функцию поиска ключевого слова и преобразования текста в RTF-формат. Ключевое слово и сам текст передаются через файл 123.rtf. За основу рекомендуется взять отлаженную функцию из первой лабораторной работы. Пример функции приведен ниже.

//---------------------------------------------------------------------------

extern "C" __declspec(dllexport) int SearchConRTF(void)

// поиск слов и преобразование в RTF

{

char *ptr, *buf, str[64], FileName[16]="123.rtf";

int count=0, handle;

handle = open(FileName, O_BINARY|O_RDWR );

if(handle == -1)

return -1;

buf = new char [2*filelength(handle)];

memset(buf, 0, 2*filelength(handle));

read(handle, str, 64);

read(handle, buf, filelength(handle)-64);

close(handle);

ptr=strstr(buf,str);

// цикл поиска

while(ptr != NULL)

{

count++; // увеличить счетчик

RtfIns((int)(ptr-buf),buf,TXTCOLOR); // начало подсветки

RtfIns((int)(ptr-buf)+strlen(str)+sizeof(TXTCOLOR)-1,buf,TXTNOCOLOR); // конец подсветки

ptr=ptr+strlen(str)+sizeof(TXTCOLOR)+sizeof(TXTNOCOLOR); // смещение указателя

ptr=strstr(ptr,str);

}

// замена ВК и ПС

ptr=strstr(buf,TXTCR);

while(ptr != NULL)

{// замена ВК и ПС на конец абзаца

RtfDel((int)(ptr-buf),buf,sizeof(TXTCR));

RtfIns((int)(ptr-buf),buf,TXTPAR);

ptr=strstr(buf,TXTCR);

}

RtfIns(0,buf,TXTSTART); // вставка заголовка RTF

RtfIns(sizeof(TXTSTART)-1,buf,TXTNOCOLOR); // установка исходного цвета

strcat(buf,TXTEND); // добавить концовку RTF

strcat(buf,"\0\0\0"); // добавить концовку

handle = open(FileName, O_CREAT|O_TRUNC|O_BINARY|O_RDWR );

if(handle == -1)

return -1;

write(handle, buf, strlen(buf));

close(handle);

delete buf;

return count;

}

 

16. Выполнить перенос функций RtfIns(),RtfDel() из проекта ЕХЕ-файла в проект DLL-модуля. Выполнить перенос констант RTF-формата из проекта ЕХЕ-файла в проект DLL-модуля.

17. В заголовочном файле <unit_d>.h ввести описание экспортируемой функции. Пример приведен ниже.

//---------------------------------------------------------------------------

#ifndef MainLab2dH

#define MainLab2dH

#include <string.h>

#include <stdio.h>

#include <fcntl.h>

#include <io.h>

// константы RTF формата

#define TXTCOLOR "\\plain\\fs20\\cf1 " // начало подсветки

#define TXTNOCOLOR "\\plain\\fs20 " // конец подсветки

#define TXTSTART "{\\rtf1\\ansi\\deff0\\deftab720{\\fonttbl{\\f0\\fmodern Courier}}\r\n{\\colortbl\\red0\\green0\\blue0;\\red255\\green0\\blue0;}\r\n"

// начало

#define TXTEND "}\\par" // конец

#define TXTPAR "\\par " // конец абзаца

#define TXTCR "\r\n" // перевод строки

//---------------------------------------------------------------------------

extern "C" __declspec(dllexport) int SearchConRTF(void);

void __fastcall RtfDel(int n, char *txtbuf, int size);

void __fastcall RtfIns(int n, char *txtbuf, char *str);

#endif

18. В опциях проекта Project|Options… в окне Advanced Compiler опцию Calling Convention установить в состояние Standart Call.

19. Выполнить компиляцию проекта. В результате компиляции будут сгенерированы два файла - <user_d>.dll (DLL-модуль) и <user_d>.lib (файл, который содержит список функций данной DLL).

20. Вызвать проект ЕХЕ-файла. Из проекта удалить функции RtfIns(),RtfDel() и константы RTF-формата.

21. В процедуре реакции на событие нажатия кнопки "Поиск" установить динамический вызов функции из DLL-модуля. Пример процедуры приведен ниже.

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

// поиск ключевого слова и преобразование в RTF

{

char *buf;

char str[64];

int count=0;

char FileName[16]="123.rtf";

int handle;

typedef int (__fastcall *DLLPROC)(void);

HANDLE hLib;

buf = new char [2*RichEdit1->Lines->Text.Length()];

memset(buf, 0, 2*RichEdit1->Lines->Text.Length()- 1);

// чтение в буфер

strcpy(buf,RichEdit1->Lines->Text.c_str());

strcpy(str,Edit1->Text.c_str()); // ключевое слово

// выполним перезапись через файл

handle = open(FileName, O_CREAT|O_TRUNC|O_BINARY|O_RDWR );

if(handle != -1)

{

write(handle, str, 64);

write(handle, buf, strlen(buf));

}

close(handle);

hLib=GetModuleHandle(DLL_LAB2); // проверка загрузки

if(hLib==NULL)

hLib=LoadLibrary(DLL_LAB2);// вызываем DLL

DLLPROC DinProc=(DLLPROC)GetProcAddress(hLib,"SearchConRTF");

if (DinProc != NULL)

count=DinProc();// вызов функции DLL

(void)FreeLibrary(hLib);

Edit2->Text=IntToStr(count); // вывод результата поиска

RichEdit1->Lines->LoadFromFile(FileName);

// удалить буфер

delete buf;

}

//---------------------------------------------------------------------------

22. В заголовочном файле <unit>.hpp ввести имя DLL-модуля. Пример приведен ниже.

#define DLL_LAB2 "Lab2d.dll" //

23. Выполнить компиляцию. Устранить ошибки и проверить правильность выполнения функции.

24. Для отладки DLL-модуля выполнить действия по п.12.

 

Контрольные задания и вопросы:

 

1. Привести алгоритмы загрузки DLL-модулей в адресное пространство приложения.

2. Каким образом осуществляется передача переменных между ЕХЕ-модулей и DLL-модулем?

3. Разработать обмен переменными между «динамическим» DLL-модулей и ЕХЕ-модулем через вызов функции.

4. Разработать обмен переменными между «динамическим» DLL-модулей и ЕХЕ-модулем через буфер обмена Clipboard [3].

5. Предусмотреть активизацию кнопки «Преобразовать в Ansi» только в том случае, если русский текст не читаем.

6. Предусмотреть блокировки кнопок управления программой от неправильных действий оператора (защита от «дурака»).

Требования к отчету:

Отчет должен содержать:

титульный лист;

задание;

алгоритмы проецирования DLL-модуля на адресное пространство приложения;

листинги основных процедур;

структуру приложения с учетом DLL-модулей;

ответы на контрольные задания и вопросы.

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

 


8 ЛАБОРАТОРНАЯ РАБОТА №8. ИСПОЛЬЗОВАНИЕ КОМПОНЕНТ ACTIVEX/OCX ДЛЯ ВЫВОДА ГРАФИЧЕСКОЙ ИНФОРМАЦИИ

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

 

Задание

Разработать приложение, обеспечивающее просмотр частотно-модулированного сигнала оцифрованного 8-разрядным АЦП. На экран необходимо вывести осциллограмму сигнала длительностью 512 точек и спектр отображаемого сигнала.

 

Компонента ChartFX

Для построения на форме разнообразных графиков и диаграмм используется компонента ChartFX вкладки ActiveX.

Дважды щелкнув мышью по компоненте или выбрав опцию Properties из ее контекстного меню, вы откроете диалоговое окно установок вида и множества других характеристик диаграммы. Свойства, методы и события компоненты ChartFX обеспечивают выполнение следующих основных операций над диаграммами и графиками:

· создание простых диаграмм;

· передача исходных данных в новую диаграмму;

· редактирование данных в существующей диаграмме;

· изменение легенд, заголовок и других визуальных атрибутов диаграммы (видов, цветов, орнаментов заливки, шрифтов, координатных сеток и т.д.);

· создание инструментов и других визуальных элементов управления диаграммой.

Подробное руководство по использованию компоненты ChartFX можно вызвать из справочной службы при нажатии клавиши Ctrl+F1 (файл справки – с:\…\Borland\Cbuilder5\OCX\CHARTFX\cfx2ocx.hlp).

 

Порядок выполнения лабораторной работы №8

Лабораторная работа должна выполняться в следующем порядке:

7. Выполнить запуск основного приложения Borland C++ Builder. Открыть новый проект для разработки, используя команду File|New Application. Сохранить новый проект в папке D:/VMSS/U41(U42)/<user>, используя команду File| Save Project As. Имена папки <user>, проекта и файла присваиваются самостоятельно.

8. С использованием Палитры компонентов и Инспектора объектов создать первоначальный образ окна разрабатываемого приложения. Примерный вид окна приложения приведен на Рисунке 8.1. Дизайн окна определяется самостоятельно. В процессе работы окно может дополняться другими компонентами.

 

Рисунок 8.1 - Вид окна приложения

9. Разработать процедуру инициализации компонентов ChartFX. Инициализация выполняется на стадии создания формы приложения. Пример инициализации приведен ниже:

 

// вывод осцилограмм

Chartfx1->PointType=0;

Chartfx2->PointType=0;

Chartfx1->OpenDataEx(COD_VALUES,1,512);

Chartfx1->ThisSerie = 0;

for(i=0;i<512;i++)

Chartfx1->Value[i]=0.00;

Chartfx1->CloseData(COD_VALUES);

Chartfx1->Adm[CSA_MAX]=1;

Chartfx1->Adm[CSA_MIN]=-1;

Chartfx2->OpenDataEx(COD_VALUES,1,256);

Chartfx2->ThisSerie = 0;

for(i=0;i<256;i++)

Chartfx2->Value[i]=10;

Chartfx2->CloseData(COD_VALUES);

Chartfx2->Adm[CSA_MAX]=12;

 

10. В проект ввести глобальные переменные:

char data[64000]; // данные файла

unsigned long byteRead;// количество точек сигнала (длина файла)

int Sm;// текущее смещение от начала

float data_adc[512]; // данные АЦП

float data_sp[256]; // данные спектра

float data_sp2; // max значение спектра

11. Разработать процедуру открытия файла сигнала. Данная процедура должна вызываться по нажатию кнопки «Открыть…». Для реализации процедуры необходимо использовать стандартный диалоговый компонент «OpenDialog». Установить свойства Filter и FilterIndex для выбора файла сигнала в списке файлов. По желанию можно установить первоначальный директорий для выбора файла. Метод Execute активизирует окно диалога во время выполнения программы. После нажатия кнопки «ОК» содержимое файла записывается во внутренний буфер data . Фрагмент процедуры приведен ниже:

// вызов открытия файла

if(OpenDialog1->Execute()==true)

{ // запись сигнала в буфер

// создание файла для Win32

HANDLE in=CreateFile( OpenDialog1->FileName.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL );

if(in == INVALID_HANDLE_VALUE) return ;

memset(data, 0, 64000 - 1);

// чтение

if( !ReadFile( in, (void*)&data, 64000l, &byteRead,NULL ))

{ // при неудаче закроем:

CloseHandle(in); return;

}

CloseHandle(in);

}

12. Отладить процедуру открытия файла.

13. В проект внести процедуру БПФ для расчета спектра. Листинг процедуры приведен ниже.

//*********************************************

// БПФ

//*********************************************

void __fastcall TForm1::fourea(float *data_r,float *data_i,int n,int is)

{

int i,i1,j,j1,istep;

int m,mmax;

float r,r1,theta,w_r,w_i,temp_r,temp_i;

r=M_PI*is;

j=1;

for(i=1;i<=n;i++)

{

i1=i-1;

if(i<j)

{

j1=j-1;

temp_r=*(data_r+j1);

temp_i=*(data_i+j1);

*(data_r+j1)=*(data_r+i1);

*(data_i+j1)=*(data_i+i1);

*(data_r+i1)=temp_r;

*(data_i+i1)=temp_i;

}

m=n>>1;

while(j>m)

{

j-=m;

m=(m+1)>>1;

}

j+=m;

}

mmax=1;

while(mmax<n)

{

istep=mmax<<1;

r1=r/(float)mmax;

for(m=1;m<=mmax;m++)

{

theta=r1*(m-1);

w_r=(float)cos((double)theta);

w_i=(float)sin((double)theta);

for(i=m-1;i<n;i+=istep)

{

j=i+mmax;

temp_r=w_r* *(data_r+j) - w_i* *(data_i+j);

temp_i=w_r* *(data_i+j) + *(data_r+j)*w_i;

*(data_r+j)=*(data_r+i) - temp_r;

*(data_i+j)=*(data_i+i) - temp_i;

*(data_r+i) += temp_r;

*(data_i+i) += temp_i;

}

}

mmax=istep;

}

if(is>0)

for(i=0;i<n;i++)

{

*(data_r+i) /= (float)n;;

*(data_i+i) /= (float)n;;

}

}

//--------------------------------------------------------------

 

 

14. Разработать процедуру расчета спектра, вывода сигнала и спектра на форму. Данные для расчета и отображения выбираются из массива данных data с учетом текущего смещения SM . Пример процедуры приведен ниже.

 

//--------------------------------------------------------------

void __fastcall TForm1::OutData(int start)

// процедура вывода start – смещение от начала буфера

{

int i,j;

float d_r[512],d_i[512];

// взять данные

//перезапись данных в массив для отображения осциллограммы

for(i=start,j=0;j<512;i++,j++)

{

data_adc[j]=(float)data[i]*(float)(2.5/256);

d_r[j]=data_adc[j]; // действительная часть=входному сигналу

d_i[j]=0.0; // мнимая часть = 0

}

// БПФ

fourea(d_r,d_i,512,-1);

// вычисление спектра

data_sp2=0.;

data_sp[0]=0;

for(i=1;i<256;i++)

{ // накопление результата

data_sp[i]=d_r[i]*d_r[i]+d_i[i]*d_i[i];

if(data_sp2<data_sp[i])

data_sp2=data_sp[i]; //поиск max для нормированного вывода

}

// вывод осцилограмм

Chartfx1->OpenDataEx(COD_VALUES,1,512);

Chartfx1->ThisSerie = 0;

for(i=0;i<512;i++)

Chartfx1->Value[i]=data_adc[i];

Chartfx1->CloseData(COD_VALUES);

// спектр

Chartfx2->OpenDataEx(COD_VALUES,1,256);

Chartfx2->ThisSerie = 0;

for(i=0;i<256;i++)

Chartfx2->Value[i]=(int)data_sp[i];

Chartfx2->CloseData(COD_VALUES);

// ограничим размер вывода спектра

Chartfx2->Adm[CSA_MAX]=(int)data_sp2+10;

Chartfx2->LeftGap=0;

}

15. Отладить процедуры при нулевом смещении. После открытия файла выполнить вызов данной процедуры с нулевым смещением.

16. Разработать процедуру смещения вправо. Данная процедура должна вызываться при нажатии кнопки “>>”.

17. Разработать процедуру смещения влево. Данная процедура должна вызываться при нажатии кнопки “<<”.

18. При изменении смещения, значение смещения должно выводится на форме.

19. Разработать механизм блокировок кнопок смещения при выходе значения смещения из зоны сигнала.

20. Отладить и проверить правильность работы всего приложения. На Рисунке 8.2 приведен пример окна после выполнения процедуры поиска.

 

Рисунок 8.2 - Вид окна приложения после выполнения процедуры поиска

 

Контрольные задания:

1. Изменить цвета осциллограммы сигнала и его спектра.

2. Отобразить координатную сетку осциллограммы.

3. Отобразить центр спектра (точка 128).

4. Вывести оцифровку частоты спектра при условии, что одна единица по оси Х равна 20 Гц.

5. Вывести заголовки и легенды диаграмм.

6. Разработать процедуру увеличения масштаба осциллограммы.

7. Разработать процедуру вызова стандартных инструментов компоненты ChartFX.

8. Разработать процедуру “анимации” отображения сигнала (непрерывный вывод от начала до конца сигнала с задержкой).

9. Предусмотреть блокировки кнопок управления программой от неправильных действий оператора.

10. Заменить компонент ChartFX на компонент Graph вкладки ActiveX. Исследовать свойства и возможности данного компонента при построении диаграмм.

Требования к отчету:

Отчет должен содержать:

титульный лист;

задание;

листинги основных процедур;

структуру приложения;

решения контрольных заданий.

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


ПРИЛОЖЕНИЕ

 

Описание функций WIN32 API

 

DWORD GetLogicalDrives(void)

Не имеет входных параметров и возвращает 32-битовое число, каждый бит которого, установленный в единицу, свидетельствует о наличии в системе соответствующего диска (0-ой бит -диск А, 1-ый бит -диск B и т.д.).

 

DWORD GetLogicalDriveStrings(dwBuffer, lpBuffer)
DWORD dwBuffer; // размер буфера для текстовой строки
LPTSTR lpBuffer; // указатель на буфер

позволяет получить массив символьных строк, представляющих собой имена дисков. Каждая строка заканчивается символом <null> также как и весь массив строк. Например: "a:\\<null>", "c:\\<null>", "d:\\<null>"<null>.
Функция возвращает размер буфера, необходимый для хранения строк с именами дисков.

 

UINT GetDriveType(lpDiskName)
LPCTSTR lpDiskName; // указатель на имя диска

предназначена для определения типа диска. Возвращается одно из следующих значений типа unsigned int:

0 Диск не может быть определен.
1 Корневая директория не существует.
DRIVE_REMOVABLE Гибкий диск.
DRIVE_FIXED Жесткий диск.
DRIVE_REMOTE Удаленный (сетевой) диск.
DRIVE_CDROM Компакт диск (CD-ROM).
DRIVE_RAMDISK Виртуальный диск.

 

 

BOOL GetVolumeInformation(lpDiskName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize)
LPCTSTR lpDiskName;// указатель на имя диска
LPTSTR lpVolumeNameBuffer;// указатель на метку диска
DWORD nVolumeNameSize;// размер буфера для метки диска
LPDWORD lpVolumeSerialNumber;// указатель на серийный номер диска
LPDWORD lpMaximumComponentLength;//указатель на максимальную длину имени файла (вместе с путем)
LPDWORD lpFileSystemFlags;// указатель на флаги системы
LPTSTR lpFileSystemNameBuffer;// указатель на название системы
DWORD nFileSystemNameSize;//размер буфера для названия системы

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

 

BOOL GetDiskFreeSpaceExA(lpDirectoryName, lpFreeBytesAvailableToCaller, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes);

LPCTSTR lpDirectoryName, // указатель на имя диска

PULARGE_INTEGER lpFreeBytesAvailableToCaller,// указатель на количество свободных байт на диске, доступных для записи

PULARGE_INTEGER lpTotalNumberOfBytes,// указатель на количество байт на диске

PULARGE_INTEGER lpTotalNumberOfFreeBytes // указатель на количество свободных байт на диске.

предназначена для получения информации об объеме диска и количестве хранимой информации. Необходимо задать имя диска и при успешном исполнении функция выдает значение true.

 

DWORD GetCurrentDirectory(dwCurDir, lpCurDir)
DWORD dwCurDir;// размер буфера
LPTSTR lpCurDir;// указатель на буфер для текущей директории

показывает текущую директорию, то есть ту директорию, в которой осуществляется обращение к файлу с "сокращенным именем" (без полного пути). Функция возвращает размер буфера необходимый для хранения текущей директории.

 

DWORD GetFullPathName(lpFile, dwPath, lpPath, ppFilePart)
LPCTSTR lpFile;// указатель на имя файла
DWORD dwPath;// длина буфера для полного пути к файлу
LPTSTR lpPath;// указатель на полный путь к файлу (вместе с именем)
LPTSTR *ppFilePart;// указатель на указатель на имя файла в полном пути

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

 

 

DWORD GetFileAttributes(lpFileName)
LPCTSTR lpFileName;// указатель на имя файла

позволяет вывести информацию об атрибутах файла в виде 32-битового значения.

 

DWORD GetFileSize(hFile, lpdwFileSizeHigh)
HANDLE hFile;// идентификатор управления
LPDWORD lpdwFileSizeHigh;// указатель на старшую часть (32бита) размера файла

позволяет получить размер файла. Использованию данной функции должно предшествовать получение идентификатора управления файла HANDLE, например, при помощи функции CreateFile (после завершения работы необходимо выполнить функцию CloseHandle). Функция возвращает младшую часть размера файла (32 бита из 64), старшую часть при необходимости можно получить, задав в качестве одного из параметров, указатель на без знаковое целое (32 бита). Если предполагаемый размер файла не превышает значение 0xFFFFFFFF, то вместо указателя на старшую часть размера файла можно передавать NULL.

 

HANDLE FindFirstFile(lpSearchFile, lpffd)
LPCTSTR lpSearchFile; // указатель на маску поиска
LPWIN32_FIND_DATA lpffd; // указатель на атрибуты и свойства найденного файла
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes; // атрибуты файла
FILETIME ftCreationTime; // время создания файла
FILETIME ftLastAccessTime; // время последнего обращения к файлу
FILETIME ftLastWriteTime; // время последней записи файла
DWORD nFileSizeHigh; // старшая часть размера файла
DWORD nFileSizeLow; // младшая часть размера файла
DWORD dwReserved0; // зарезервированно
DWORD dwReserved1; // - // -
TCHAR cFileName[MAX_PATH]; // имя файла
TCHAR cAlternateFileName[14]; // имя в формате 8.3
} WIN32_FIND_DATA;

производит поиск первого файла соответствующего маске поиска. Функция возвращает идентификатор управления поиска. Входным параметром для функции является только маска поиска файла.

 

BOOL FindNextFile(hFindFile, lpffd)
HANDLE hFindFile; // идентификатор поиска файла
LPWIN32_FIND_DATA lpffd; // указатель на атрибуты и свойства найденного файла

продолжает поиск файлов начатый вызовом функцией FindFirstFile. Возвращает признак успешного выполнения функции (true/false). Входным параметром является идентификатор управления поиска.

 

UINT GetWindowsDirectory(lpBuffer, uSize)

LPTSTR lpBuffer,// указатель на буфер для имени основного каталога Windows

UINT uSize //размер буфера

позволяет получить полный путь к основному каталогу Windows.

 

UINT GetSystemDirectory(lpBuffer, uSize)

LPTSTR lpBuffer,// указатель на буфер для имени системного каталога

UINT uSize // размер буфера

позволяет получить полный путь к системному каталогу.

 

DWORD GetTempPath(nBufferLength, lpBuffer)

DWORD nBufferLength,// размер буфера

LPTSTR lpBuffer // указатель на буфер для каталога хранения временных фалов

позволяет получить полный путь к каталогу, используемому для хранения временных файлов.

 

BOOL GetFileTime(hFile, lpCreationTime, lpLastAccessTime, lpLastWriteTime)

HANDLE hFile,// идентификатор файла

LPFILETIME lpCreationTime,// указатель на структуру типа FILETIME, которая получает дату и время создания файла

LPFILETIME lpLastAccessTime,// указатель на структуру типа FILETIME, которая получает дату и время последнего доступа к файлу

LPFILETIME lpLastWriteTime // указатель на структуру типа FILETIME, которая получает дату и время последней записи в файл.

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

 

LONG CompareFileTime(lpFileTime1, lpFileTime2)

CONST FILETIME *lpFileTime1,// указатель на структуру типа FILETIME, которая определяет первое 64-битное файловое время

CONST FILETIME *lpFileTime2 // указатель на структуру типа FILETIME, которая определяет второе 64-битное файловое время

сравнивает два 64-битных файловых времени.

 

BOOL SetVolumeLabel(lpRootPathName, lpVolumeName)

LPCTSTR lpRootPathName,// – указатель на завершающуюся нулем строку, определяющую корневую директорию тома файловой системы

LPCTSTR lpVolumeName,// указатель на строку, определяющую метку тома

устанавливает метку тома файловой системы.

 

BOOL SetFileTime(hFile, lpCreationTime ,lpLastAccessTime, lpLastWriteTime)

HANDLE hFile,// идентификатор файла

CONST FILETIME *lpCreationTime,// указатель на структуру типа FILETIME, которая содержит дату и время создания файла

CONST FILETIME *lpLastAccessTime,// указатель на структуру типа FILETIME, которая содержит дату и время последнего доступа к файлу

CONST FILETIME *lpLastWriteTime// указатель на структуру типа FILETIME, которая содержит дату и время последней записи в файл

устанавливает дату и время файла, когда он был создан, когда к нему последний раз обращались, и когда он последний раз был изменен.

 

BOOL SetLocalTime(lpSystemTime);

CONST SYSTEMTIME *lpSystemTime // указатель на структуру типа SYSTEMTIME, которая содержит текущую локальную дату и время

устанавливает текущую локальную дату и время.

 

BOOL CreateDirectory(lpPath, lpsa)
LPCTSTR lpPath; // указатель на имя директории
LPSECURITY_ATTRIBUTES lpsa; // указатель на атрибуты безопасности

создает директорию с заданным именем. Функция возвращает true при правильном ее выполнении.

 

BOOL RemoveDirectory(lpDir)
LPCTSTR lpDir; // указатель на имя директории

удаляет директорию с заданным именем, не содержащую файлов.

 

BOOL SetCurrentDirectory(lpCurDir)
LPCTSTR lpCurDir; // указатель на новую директорию

устанавливает текущую дерикторию.

 

BOOL SetFileAttributes(lpFileName, dwFileAttributes)
LPCTSTR lpFileName; // указатель на имя файла
DWORD dwFileAttributes; // 32-битовое значение атрибутов файла

устанавливает атрибуты заданного файла.Файлу могут быть происвоены следующие атрибуты:
FILE_ATTRIBUTE_ARCHIVE архивный файл
FILE_ATTRIBUTE_DIRECTORY директория
FILE_ATTRIBUTE_HIDDEN скрытый файл
FILE_ATTRIBUTE_NORMAL файл без атрибутов (не используется совместно с другими)
FILE_ATTRIBUTE_READONLY файл только для чтения
FILE_ATTRIBUTE_SYSTEM системный файл
FILE_ATTRIBUTE_TEMPORARY временный файл.

 

HANDLE CreateFile(lpName, fdwAccess, fdwShareMode, lpsa, fdwCreate, fdwAttrsAndFlags, hTemplateFile)
LPCTSTR lpName; // указатель на имя файла или устройства
DWORD fdwAccess; // способ доступа
DWORD fdwShareMode; // режим совместного доступа
LPSECURITY_ATTRIBUTES lpsa; // указатель на атрибуты защиты
DWORD fdwCreate; // способ открытия файла
DWORD fdwAttrsAndFlags; // атрибуты файла
HANDLE hTemplateFile; // идентификатор шаблона файла

является многоцелевой функцией. Открывает файл либо устройство для обмена данными.

lpName указывает на имя файла (полное или сокращенное) либо на имя устройства:
последовательный порт "COM1", "COM2" и т.д.
параллельный порт "LPT1", "LPT2" и т.д.
порт текущего принтера "PRN"
клиент именованного канала "\\servername\pipe\pipename".
Битовая маска fdwAccess может принимать следующие значения:
0 чтение или запись производиться не будут (для изменения параметров файла);
GENERIC_READ устройство доступно для чтения;
GENERIC_WRITE устройство доступно для записи.
Битовая маска dwShareMode может принимать следующие значения:
0 монопольный доступ к устройству;
FILE_SHARE_READ устройство может открываться для чтения;
FILE_SHARE_WRITE устройство может открываться для записи.
Параметр fdwCreate может принимать следующие значения:
CREATE_NEW создание нового файла, если нет еще файла с данным именем;
CREATE_ALWAYS создание нового файла в любом случае;
OPEN_EXISTING открыть файл, если он существует;
OPEN_ALWAYS открыть файл в любом случае;
TRUNCATE_EXISTING открыть существующий файл и установить для него нулевую длину.
Битовая маска fdwAttrsAndFlags может принимать следующие значения:
FILE_ATIBUTE_ARCHIVE архивный файл (допускает удаление и резервное копирование) задается автоматически при создании файла;
FILE_ATRIBUTE_HIDDEN скрытый файл (не включается в обычный список каталога);
FILE_ATRIBUTE_NORMAL нормальный файл (все остальные атрибуты отсутствуют);
FILE_ATRIBUTE_READONLY только для чтения;
FILE_ATRIBUTE_SYSTEM системный (используется операционной системой);
FILE_ATRIBUTE_COMPRESSED сжатые файлы или каталоги;
FILE_ATRIBUTE_OFFLINE файл отсутствует, но данные перенесены в хранилище;
FILE_ATRIBUTE_TEMPORARY временный файл (файловая система стремиться поместить его в память, что ускорить доступ).

 

BOOL ReadFile(hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped)
HANDLE hFile; // идентификатор управления открытого файла
LPVOID lpBuffer; // указатель на буфер неопределенного типа для приема данных
DWORD nNumberOfBytesToRead; // указатель на количество байт, которое необходимо считать
LPDWORD lpNumberOfBytesRead; // указатель на считанное количество байт
LPOVERLAPPED lpOverlapped; // указатель на структуру Overlapped

позволяет читать данные из файла или устройства открытого функцией CreateFile. Функция возвращает true при правильном ее выполнении.

 

BOOL WriteFile(hFile, lpBuffer, nNumberOfBytesToWrite, lpNumberOfBytesWritten, lpOverlapped)
HANDLE hFile; // идентификатор управления открытого файла
LPCVOID lpBuffer; // указатель на буфер неопределенного типа для записи данных
DWORD nNumberOfBytesToWrite; // количество байт для записи
LPDWORD lpNumberOfBytesWritten; // указатель на записанное количество байт
LPOVERLAPPED lpOverlapped; // указатель на структуру Overlapped

ведет запись в файл или устройство открытый функцией CreateFile. Функция возвращает true при правильном ее выполнении.

 

BOOL CopyFile(lpExistingFile, lpNewFile, fFailIfExists)
LPCTSTR lpExistingFile; // указатель на существующий файл
LPCTSTR lpNewFile; // указатель на имя файла для копирования
BOOL fFailIfExists; // true - отмена функции, если файл для копирования уже существует (false - перезаписать)

копирует данные из существующего файла в новый файл с указанным именем. Функция возвращает true при правильном ее выполнении.

 

BOOL MoveFile(lpExisting, lpNew)
LPCTSTR lpExisting; // указатель на имя существующего файла
LPCTSTR lpNew; // указатель на новое имя файла

переносит/переименовывает файл с заданным именем. Функция возвращает true при правильном ее выполнении.

 

BOOL DeleteFile(lpFileName)
LPCTSTR lpFileName; // указатель на имя файла

удаляет файл с заданным именем. Функция возвращает true при правильном ее выполнении.

 

BOOL CloseHandle(hObject)
HANDLE hObject; // идентификатор управления файла

закрывает идентификатор управления открытый функцией CreateFile.

 

BOOL FindClose(hFindFile)
HANDLE hFindFile; // идентификатор поиска файла

закрывает идентификатор управления поиска открытый функцией FindFirstFile.

 

int GetKeyboardType(fnKeybInfo)
int fnKeybInfo; // тип запрашиваемой информации

возвращает информацию о текущей клавиатуре. С помощь данной функции можно запросить: тип, подтип клавиатуры и количество функциональных клавиш. На входе функции необходимо указать тип запрашиваемой информации:
0 - тип клавиатуры;
1 - подтип клавиатуры;
2 - количество функциональных клавиш.

 

BOOL GetKeyboardState(pbKeyState)
PBYTE pbKeyState; // указатель на массив принимающий состояние клавиатуры

позволяет получить массив значений отражающих текущее состояние клавиатуры. Массив размером 256 байт соответствует состоянию каждой из 256 клавиш виртуальной таблицы. Если старший бит установлен, то клавиша нажата. Если младший бит виртуальных клавиш "NumLock", "CapsLock" или "ScrollLock" установлен, то данные клавиши задействованы, о чем свидетельствует соответствующая индикация. Функция возвращает true при корректном ее завершении.

 

SHORT GetKeyState(nVirtKey)
int nVirtKey; // код виртуальной клавиши

сходно с действием GetKeyboardState, но только для одной клавиши. Если старший бит младшего байта установлен, то клавиша нажата. Если младший бит виртуальных клавиш "NumLock", "CapsLock" или "ScrollLock" установлен, то данные клавиши задействованы.

 

SHORT GetAsyncKeyState(nVirtKey)
int nVirtKey; // код виртуальной клавиши

позволяет узнать текущее состояние клавиши и состояние клавиши при предыдущем вызове функции. Если старший бит установлен, то клавиша нажата. Если младший бит не установлен, то клавиша была между двумя последующими вызовами функции.

 

BOOL GetCursorPos(lpPoint)
LPPOINT lpPoint; // указатель на структуру POINT

позволяет определить координаты курсора мыши на экране в пикселях. Функция возвращает true при корректном ее завершении.

 

int GetSystemMetrics(nIndex)
int nIndex; // тип запрашиваемой информации

многоцелевая функция позволяющая получить информацию о системной метрике. Системная метрика - высота и ширина различных элементов экрана Windows. Данная функция также позволяет получить версию Windows, количество кнопок мыши, реверсированы ли кнопки мыши и т.п.

 

UINT GetCaretBlinkTime(VOID)

возвращает время мерцания каретки (время, требуемое для инвертирования пикселей каретки) в миллисекундах.

 

BOOL SystemParametersInfo(wAction, wParam, lpvParam, fUpdateProfile)
UINT wAction; // тип действия
UINT wParam; // дополнительный параметр беззнаковое целое
PVOID lpvParam; // дополнительный параметр указатель на неопределенный тип
UINT fUpdateProfile; // флаг обновления системы

запрашивает или устанавливает системные параметры.

Тип запрашиваемой информации или устанавливаемых параметров может принимать одно из следующих основных значений:
SPI_GETBEEP запрашивает значение типа BOOL предупредительного звукового сигнала.
wParam=0; lpvParam = указатель на BOOL;
SPI_SETBEEP устанавливает значение типа BOOL предупредительного звукового сигнала.
wParam=BOOL; lpvParam=NULL;
SPI_GETBORDER запрашивает значение определяющее ширину бордюра окна.
wParam=0; lpvParam = указатель на int;
SPI_SETBORDER устанавливает значение определяющее ширину бордюра окна.
wParam=int; lpvParam=NULL;
SPI_GETFASTTASKSWITCH запрашивает положение переключателя быстрой задачи вкл./выкл.
wParam=0; lpvParam = указатель на BOOL;
SPI_SETFASTTASKSWITCH устанавливает положение переключателя быстрой задачи вкл./выкл.
wParam=BOOL; lpvParam=NULL;
SPI_GETGRIDGRANULARITY запрашивает текущее значение размера ячейки сетки рабочего стола.
wParam=0; lpvParam = указатель на int;
SPI_SETGRIDGRANULARITY устанавливает текущее значение размера ячейки сетки рабочего стола.
wParam=int; lpvParam=NULL;
SPI_GETKEYBOARDDELAY запрашивает задержку повторения клавиатуры.
wParam=0; lpvParam = указатель на int;
SPI_SETKEYBOARDDELAY устанавливает задержку повторения клавиатуры.
wParam=int; lpvParam=NULL;
SPI_GETKEYBOARDSPEED запрашивает скорость повторения клавиатуры.
wParam=0; lpvParam = указатель на WORD;
SPI_SETKEYBOARDSPEED устанавливает скорость повторения клавиатуры.
wParam=WORD; lpvParam=NULL;
SPI_GETMOUSE запрашивает скорость перемещения мыши.
wParam=0; lpvParam = указатель на массив int, где lpiMouse[0] - порог1, lpiMouse[1] - порог2, lpiMouse[2] - скорость;
SPI_SETMOUSE устанавливает скорость перемещения мыши.
wParam=0; lpvParam = указатель на массив int, где lpiMouse[0] - порог1, lpiMouse[1] - порог2, lpiMouse[2] - скорость;
SPI_GETSCREENSAVEACTIVE запрашивает значение типа BOOL о включенном или выключеном хранителе экрана. wParam=0; lpvParam = указатель на BOOL;
SPI_SETSCREENSAVEACTIVE устанавливает значение типа BOOL включенного или выключеного хранителя экрана. wParam=BOOL; lpvParam=NULL;
SPI_GETSCREENSAVETIMEOUT запрашивает время в секундах через которое срабатывает хранитель экрана. wParam=0; lpvParam = указатель на int;
SPI_SETSCREENSAVETIMEOUT устанавливает время в секундах через которое срабатывает хранитель wParam=int; lpvParam=NULL;
SPI_LANGDRIVER идентификатор языкового драйвера.
wParam=0; lpvParam = указатель на строку char ограниченной нулевым элементом;
SPI_SETDESKWALLPAPER устанавливает имя файла обоев рабочего стола.
wParam=0; lpvParam = указатель на строку char ограниченной нулевым элементом;
SPI_SETDOUBLECLICKTIME устанавливает время двойного нажатия клавиши мыши в милисекундах.
wParam=int; lpvParam=NULL;
SPI_SETDOUBLECLKHEIGHT установка высоты прямоугольника в котором срабатывает двойное нажатие. wParam=int; lpvParam=NULL;
SPI_SETDOUBLECLKWIDTH установка ширины прямоугольника в котором срабатывает двойное нажатие.
wParam=int; lpvParam=NULL;
SPI_SETMOUSEBUTTONSWAP установка реверса кнопок мыши.
wParam=BOOL; lpvParam=NULL;

 

BOOL SetKeyboardState(lpbKeyState)
LPBYTE lpbKeyState; // указатель на массив, устанавливающий состояние клавиатуры

устанавливает текущее состояние клавиатуры. Массив размером 256 байт соответствует состоянию каждой из 256 клавиш виртуальной таблицы. Если старший бит установлен, то клавиша нажата. Если младший бит виртуальных клавиш "NumLock", "CapsLock" или "ScrollLock" установлен, то данные клавиши задействованы, о чем свидетельствует соответствующая индикация. Функция возвращает true при корректном ее завершении.

 

int ShowCursor(bShow)
BOOL bShow; // показать или скрыть курсор

показывает и скрывает курсор. Функция возвращает знаковое значение - счетчик. Если счетчик больше или равен нулю, то курсор виден, иначе курсор скрыт. Таким образом, если n-раз вызвать функцию с параметром false скрывающую курсор, чтобы показать курсор нужно также n-раз вызвать функцию с параметром true.

 

BOOL SwapMouseButton(fSwap)
BOOL fSwap; // флаг реверсирования

реверсирует кнопки мыши, назначение левой и правой кнопок мыши меняются. Функция возвращает значение типа BOOL отражающее реверсирование кнопок до вызова функции.

 

 

BOOL ClipCursor(lprc)
CONST RECT *lprc; // указатель на структуру прямоугольника, ограничивающего перемещение курсора
typedef struct tagRECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT;

ограничивает перемещение курсора заданными границами. Функция возвращает true при корректном ее завершении.

 

BOOL SetCursorPos(X, Y)
int X; // значение новой позиции по горизонтали
int Y; // значение новой позиции по вертикали

устанавливает координаты курсора мыши на экране в пикселях. Функция возвращает true при корректном ее завершении.

 

BOOL SetCaretBlinkTime(uMSeconds)

UINT uMSeconds// время мерцания каретки, в миллисекундах

устанавливает время мерцания каретки в миллисекундах.

 

DWORD GetSysColor(nIndex)
int nIndex; // индекс элемента

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

 

int GetDeviceCaps(hdc, nIndex)
HDC hdc; // идентификатор контекста устройства (device context)
int nIndex; // индекс запроса

позволяет получить специфическую информацию о заданном устройстве. Контекст устройства получают функциями GetDC или GetWindowDC.

 

BOOL EnumDisplaySettings(lpszDeviceName,iModeNum,lpDevMode)
LPCTSTR lpszDeviceName; // указатель на строку-спецификатор устройства
DWORD iModeNum; // номер графического режима доступного в системе
LPDEVMODE lpDevMode; // указатель на структуру DEVMODE принимающую данные

позволяет получить информацию об одном из возможных графических режимов, номер которого задан. Функция возвращает true при корректном ее завершении. Для получения всех возможных графических режимов разрешений необходимо несколько раз вызвать данную функцию, увеличивая номер запрашиваемого режима, до тех пор, пока функция не вернет false.

 

COLORREF GetPixel(hdc,nXPos,nYPos)
HDC hdc; // идентификатор контекста устройства
int nXPos; // горизонтальная координата точки
int nYPos; // вертикальная координата точки

возвращает цвет точки с заданными координатами в указанном контексте устройства. Контекст устройства получают функциями GetDC или GetWindowDC.

 

BOOL SetSysColors(cElements,lpaElements,lpaRgbValues)
int cElements; // количество изменяемых элементов
CONST INT *lpaElements; // указатель на массив элементов, список которых идентичен GetSysColor
CONST COLORREF *lpaRgbValues; // указатель на массив цветов

устанавливает цвета интерфейса системы.

 

LONG ChangeDisplaySettings(lpDevMode,dwflags)
LPDEVMODE lpDevMode;// указатель на структуру DEVMODE устанавливающую данные
DWORD dwflags;// флаг, показывающий, как графический режим должен быть изменен

меняет текущий графический режим.

 

BOOL BitBlt(hdcDest,nXDest,nYDest,nWidth,nHeight,hdcSrc,nXSrc,nYSrc,dwRop)
HDC hdcDest;// идентификатор контекста устройства-источника (device context)
int nXDest;// координата x левого верхнего угла копируемой поверхности в приемнике
int nYDest;// координата y левого верхнего угла копируемой поверхности в приемнике
int nWidth;// ширина копируемой поверхности
int nHeight;// высота копируемой поверхности
HDC hdcSrc;// идентификатор контекста устройства-приемника (device context)
int nXSrc;// координата x левого верхнего угла копируемой поверхности в источнике
int nYSrc;// координата y левого верхнего угла копируемой поверхности в источнике
DWORD dwRop;// код операции копирования

копирует прямоугольную битовую поверхность из контекста устройства источника в контекст устройства приемника. Контекст устройства получают функциями GetDC или GetWindowDC. Функция возвращает true при корректном ее завершении. Если происходит копирование между разными устройствами (дисплей-принтер), то функция всегда возвращает false.

Код операции может принимать следующие значения:
BLACKNESS заполнение принимающего прямоугольника, используя цвет, ассоциирующийся с кодом 0 (обычно черный цвет для физической палитры).
DSTINVERT инвертировать принимающий прямоугольник.
MERGECOPY осуществлять копирование по логическому "И" цветов источника и образца.
MERGEPAINT осуществлять копирование по логическому "ИЛИ" инвертированных источника и не инвертированных цветов приемника.
NOTSRCCOPY осуществлять копирование с инвертированием битов источника.
NOTSRCERASE осуществлять копирование по логическому "ИЛИ НЕ" битов источника и приемника.
PATCOPY копирование образца на источник.
PATINVERT совмещение цветов образца и цветов приемника по модулю два.
PATPAINT совмещение цветов образца и инвертированных цветов источника по логическому "ИЛИ", а результат по логическому "ИЛИ" с цветами приемника.
SRCAND совмещение цветов источника и приемника по логическому "И".
SRCCOPY простое копирование.
SRCERASE совмещение цветов источника и инвертированных цветов приемника по логическому "И".
SRCINVERT совмещение цветов источника и цветов приемника по модулю два.
SRCPAINT совмещение цветов источника и цветов приемника по логическому "ИЛИ".
WHITENESS заполнение принимающего прямоугольника, используя цвет, ассоциирующийся с кодом 1 (обычно белый цвет для физической палитры).

 

WORD WINAPI CascadeWindows(hwndParent, wHow, lpRect, cKids, lpKids)

HWND hwndParent,// дескриптор родительского окна

UINT wHow, // типы окон, которые не подвергаются каскадированию

CONST RECT *lpRect,// прямоугольник, в котором каскадируются окна

UINT cKids,// количество каскадируемых окон

const HWND FAR *lpKids// массив дескрипторов окон

располагает каскадом (каскадирует) указанные окна или дочерние окна указанного родительского окна.

 

WORD WINAPI TileWindows(hwndParent, wHow, lpRect, cKids, lpKids)

HWND hwndParent, // дескриптор родительского окна

UINT wHow,// типы окон, не подлежащих упорядочиванию

CONST RECT *lpRect,// прямоугольник, внутри которого окна будут упорядочены

UINT cKids,// количество упорядочиваемых окон

const HWND FAR *lpKids// массив дескрипторов окон

упорядочивает указанные окна или дочерние окна указанного родительского окна.

 

 

BOOL SetWindowPos(hWnd, hWndInsertAfter,X,Y,cx,cy, uFlags)

HWND hWnd,// дескриптор окна

HWND hWndInsertAfter,// дескриптор порядка размещения окна

int X,// позиция по горизонтали

int Y,// позиция по вертикали

int cx,// ширина

int cy,// высота

UINT uFlags // флаг расположения окна

позволяет задать расположение, размер указанного окна программы.

 

BOOL BringWindowToTop(hWnd)

HWND hWnd // дескриптор окна

помещает указанное окно в вершину Z-последовательности. Если окно является окном верхнего уровня – оно активизируется. Если окно представляет собой дочернее окно – активизируется родительское окно верхнего уровня.

 

COLORREF SetPixel(hdc,X,Y, crColor)

HDC hdc, // дескриптор контекста устройства

int X, // x-координата пикселя

int Y, // y-координата пикселя

COLORREF crColor // цвет пикселя

устанавливает цвет пикселя с указанными координатами в заданный цвет.

 

HWND SetActiveWindow(hWnd)

HWND hWnd // дескриптор окна

позволяет сделать окна активным.

 

HWND GetActiveWindow(VOID)

возвращает идентификатор активного окна. Как правило это окно приложения вызывающего функцию.

 

HWND GetDesktopWindow(VOID)

возвращает идентификатор рабочего стола Windows.

 

HDC GetDC(hWnd)
HWND hWnd; // идентификатор окна

возвращает идентификатор контекста рабочей области заданного окна. Оконный идентификатор получен функциями GetActiveWindow или GetDesktopWindow. После использования контекста необходимо его закрыть функцией ReleaseDC.

 

HDC GetWindowDC(hWnd)
HWND // идентификатор окна

возвращает идентификатор контекста заданного окна. Оконный идентификатор получен функциями GetActiveWindow или GetDesktopWindow. После использования контекста необходимо его закрыть функцией ReleaseDC.

 

 

int ReleaseDC(hWnd,hDC)
HWND hWnd; // идентификатор окна
HDC hDC; // идентификатор контекста

закрывает контекст заданного окна.

 

DWORD GetProfileString(lpAppName,lpKeyName,lpDefault,lpReturnedString,nSize)
LPCTSTR lpAppName; // указатель на название секции
LPCTSTR lpKeyName; // указатель на название ключа
LPCTSTR lpDefault; // указатель на строку возвращаемую по умолчанию
LPTSTR lpReturnedString; // указатель на буфер принимающий запрашиваемую строку
DWORD nSize // размер принимающего буфера

дает возможность определить значение заданного ключа в заданной секции файла WIN.INI.
В данном файле поддерживается следующий синтаксис.
[секция] ключ=строка
Если указанная секция или ключ не найдены, то в буфер записывается строка принятая по умолчанию. При корректном завершении функция возвращает число символов скопированных в буфер (длина строки).
Значения соответствующие текущему принтеру располагаются в WIN.INI следующим образом.
[windows] device=<имя>,<драйвер>,<порт>

 

DWORD DeviceCapabilities(pDevice,pPort,fwCapability,pOutput,pDevMode)
LPCTSTR pDevice; // указатель на строку имени принтера
LPCTSTR pPort; // указатель на порт принтера
WORD fwCapability; // код запроса
LPTSTR pOutput; // выходной массив данных
CONST DEVMODE *pDevMode; // указатель на структуру DEVMODE

возвращает параметры запрошенные у драйвера принтера.

 

BOOL PrintDlg(lppd)
LPPRINTDLG lppd; // указатель на структуру PRINTDLG

отображает диалог печати или диалог установки печати. Функция возвращает true при корректном ее завершении.

 

int StartDoc(hdc,lpdi)
HDC hdc; // идентификатор контекста устройства
CONST DOCINFO *lpdi; // указатель на структуру DOCINFO

сообщает принтеру о начале работы. При корректном завершении возвращает идентификатор задания принтера.

 

int EndDoc(hdc)
HDC hdc; // идентификатор контекста устройства

сообщает принтеру о завершении работы. Функция возвращает нуль при ошибке.

 

int StartPage(hDC)
HDC hDC; // идентификатор контекста устройства

подготавливает принтер к приему данных (начало страницы). Функция возвращает нуль при ошибке.

 

int EndPage(hdc)
HDC hdc; // идентификатор контекста устройства

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

 

BOOL CharToOemBuff(lpszSrc,lpszDst,cchDstLength)
LPCTSTR lpszSrc; // указатель на строку для трансляции
LPSTR lpszDst; // указатель на выходную строку
DWORD cchDstLength; // длина транслируемой строки в символах

транслирует строку символов в стандарт OEM (original equipment manufacturer). Функция всегда возвращает true.

 

BOOL GetCommTimeouts(hFile,lpCommTimeouts)
HANDLE hFile; // идентификатор устройства обмена
LPCOMMTIMEOUTS lpCommTimeouts; // указатель на структуру COMMTIMEOUTS

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

 

BOOL GetCommProperties(hFile,lpCommProp)
HANDLE hFile; // идентификатор устройства обмена
LPCOMMPROP lpCommProp; // указатель на структуру COMMPROP

позволяет получить свойства коммуникационного устройства, идентификатор которого получен функцией CreateFile.

 

BOOL GetCommState(hFile,lpDCB)
HANDLE hFile; // идентификатор устройства обмена
LPDCB lpDCB; // указатель на структуру DCB

позволяет получить свойства текущего сеанса приема/передачи данных для устройства, идентификатор которого получен функцией CreateFile.

 

DCB структура отображающая свойства текущего сеанса.
typedef struct _DCB {
DWORD DCBlength; // размер структуры DCB [sizeof(DCB)]
DWORD BaudRate; // текущая скорость передачи в bps
DWORD fBinary: 1; // бинарный режим (true/false)
DWORD fParity: 1; // возможность проверки паритета (true/false)
DWORD fOutxCtsFlow:1; // сигнал CTS управляет передачей (true/false)
DWORD fOutxDsrFlow:1; // сигнал DSR управляет передачей (true/false)
DWORD fDtrControl:2; // способ управления сигналом DTR
DWORD fDsrSensitivity:1; // чувствительность к сигналу DSR (true/false)
DWORD fTXContinueOnXoff:1; // продолжение передачи при сигнале XOFF (true/false)
DWORD fOutX: 1; // возможность остановки передачи сигналом ХOFF (true/false)
DWORD fInX: 1; // возможность остановки приема сигналом ХOFF (true/false)
DWORD fErrorChar: 1; // возможность замещения символов при ошибке (true/false)
DWORD fNull: 1; // возможность отбрасывания нулей (true/false)
DWORD fRtsControl:2; // способ управления сигналом RTS
DWORD fAbortOnError:1; // остановка обмена при ошибке (true/false)
DWORD fDummy2:17; // зарезервировано, не используется
WORD wReserved; // зарезервировано, не используется
WORD XonLim; /* максимальное количество байт во входном буфере для выставления сигнала XON */
WORD