Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

Программирование под модем.

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

 
 //Прототип функции дополнительного потока.
 
 UINT TerminalThread(LPVOID arg);
 
 
 
 DWORD dwCount;
 
 DCB dcb;
 
 HANDLE hCommPort;
 
 DWORD Errors;
 
 COMSTAT pComStat;
 
 COMMTIMEOUTS CommTimeouts;
 
 
 
 UINT TerminalThread(LPVOID arg)
 
 {
 
 	//Открытие порта
 
 	hCommPort = CreateFile(options.Port, GENERIC_READ
 
 	| GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
 
 	FILE_FLAG_OVERLAPPED, 0);
 
 
 
 	 //Получаем настройки порта
 
 	GetCommState(hCommPort, &dcb);
 
 
 
 	//Меняем часть настроек на свои
 
 	dcb.BaudRate = 9600;	//Скорости в бодах
 
 	dcb.ByteSize = 8; 	//Байты информации
 
 	dcb.Parity = NOPARITY;	//Четность
 
 	dcb.StopBits = ONESTOPBIT; //Кол-во стоп. битов
 
 
 
 	//Устанавливаем новые настройки
 
 	SetCommState(hCommPort, &dcb);
 
 
 
 	/* Установка таймаутов.
 
 	Служит, чтобы программа не висла
 
 	в ожидании ответа от модема */
 
 	GetCommTimeouts(hCommPort,&CommTimeouts);
 
 
 
 	CommTimeouts.ReadIntervalTimeout = 50;
 
 	CommTimeouts.ReadTotalTimeoutMultiplier = 1;
 
 	CommTimeouts.ReadTotalTimeoutConstant = 50;
 
 	CommTimeouts.WriteTotalTimeoutMultiplier = 1;
 
 	CommTimeouts.WriteTotalTimeoutConstant = 50;
 
 
 
 	SetCommTimeouts(hCommPort,&CommTimeouts);
 
 
 
 	//Очистка буфера (На всякий случай)
 
 	FlushFileBuffers(hCommPort);
 
 
 
 	//Цикл опроса модема
 
 	for (;;) {
 
 		//Опрос модема
 
  		ReadFile(hCommPort, &ch, 1, &dwCount, NULL);
 
       		if(ch) //Проверка на наличие символа
 
    		{
 
 			//Вывод поступившего символа
 
    			Функция_форматированного_вывода_символа(&ch,1);
 
 		};
 
    		ch = 0;
 
 	}
 
 	return 0;
 
 }
 
 

Класс ввода/вывода HCSVIEW

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

Класс HCSView:

class HCSView : public CWnd
 
 {
 
 char ch;
 
 TEXTMETRIC Font;
 
 RECT WinPos;
 
 char Buf[10000];
 
 int MaxX,MaxY,x,y,ScrollRange,ScrollPos;
 
 int Bufi;
 
 CClientDC *dcCompPtr;
 
 CBrush membrush;
 
 CBitmap VirtWin;
 
 CWnd *WinPtr;
 
 CDC memdc;
 
 int FullLineSize;
 
 public:
 
 
 
 //Функция прокрутки.
 
 void HSScroll(UINT SBCode, UINT Pos, CScrollBar *SB);
 
 
 
 //Установить шрифт. NewFont - новый шрифт.
 
 void HSSetFont(LOGFONT NewFont);
 
 
 
 //Установить цвет текста.
 
 void HSSetTextColor(COLORREF TextColor);
 
 
 
 /*
 
 Функция вывода текста.
 
 Заносит данные в буфер
 
 И вызывает функцию HFillVirtWin.
 
 *str - указатель на строку.
 
 l - длинна строки.
 
 */
 
 void HSTextOut(char *str, int l);
 
 
 
 /*
 
 Функция перерисовки виртуального окна.
 
 Выводит данные и буфера в виртуальное окно.
 
 Имеет смысл вызывать при изменении размеров окна.
 
 При получении сообщения ON_WM_SIZE
 
 Функцию нужно вызывать без аргументов:
 
 HFillVirtWin();
 
 */
 
 void HFillVirtWin(int csr = 1,int nw = 1,int bp = 0);
 
 
 
 /*
 
 Функция копирования виртуального окна в
 
 реальное. Нужно вызывать при каждом сообщении
 
 	WM_ON_PAINT
 
 	*/
 
 void HSCopyVtR();
 
 
 
 //Конструктор класса.
 
 HCSView(CWnd *SWinPtr);
 
 };
 
 

Пример работы с классом

/*
 
 Пример части программы выводящий символы,
 
 поступающие с клавиатуры, на экран.
 
 MainWin - объект класса (CMainWin) окна
 
 в которое будет выводится текст.
 
 */
 
 
 
 HCSView View(&MainWin);
 
 
 
 //Вывод символа на экран
 
 afx_msg void CMainWin::OnChar(UINT ch, UINT count, UINT flag)
 
 {
 
 View.HSTextOut(&c,1);
 
 }
 
 
 
 //Прокрутка
 
 afx_msg void CMainWin::OnVScroll(UINT SBCode,
 
 UINT Pos, CScrollBar *SB)
 
 {
 
  View.HSScroll(SBCode,Pos,SB);
 
 }
 
 
 
 //Перерисовка окна
 
 afx_msg void CMainWin::OnPaint()
 
 {
 
 	View.HSCopyVtR();
 
 }
 
 
 
 //Форматирования текста,
 
 //при изменении размеров окна.
 
 afx_msg void CMainWin::OnSize(UINT nType, int cx, int cy)
 
 {
 
 	View.HFillVirtWin();
 
 }
 
 


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS