Программирование на C++ глазами хакера

         

Прежде чем выполнить закрытие, надо


if (MessageBox("Close port?", "Warning", MB_YESNO) == IDYES) { TerminateThread(hThread, 0); CloseHandle(hCom); hCom = INVALID_HANDLE_VALUE; } }

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

Если порт открыт, то выводится запрос на подтверждение закрытия порта. Если пользователь подтвердит, то прерывается поток, закрывается указатель порта и переменной hCom присваивается значение INVALID_HANDLE_VALUE.

И последнее, что предстоит добавить в программу, — возможность отправки сообщений. Для этого по нажатию кнопки Send command должен выполняться код из листинга 5.6.

Листинг 5.6. Функция отправки данных в порт
void CCOMportDlg::OnBnClickedSendcommandButton() { if (hCom == INVALID_HANDLE_VALUE) { AfxMessageBox("Open port before send command"); return; }

char sSend[10224]; eSendCommand.GetWindowText(sSend, 1024);

if (strlen(sSend)>0) { lLogList.AddString(sSend);

sSend[strlen(sSend)] = '\r'; sSend[strlen(sSend)] = '\0';

TerminateThread(hThread,0); DWORD iSize; WriteFile(hCom, sSend, strlen(sSend), &iSize,0); hThread = CreateThread(0, 0, ReadThread, (LPVOID)this, 0, 0); } }

Сначала проверяется, открыт ли порт. Если он уже закрыт или никогда не открывался, то нет смысла писать в него данные. После этого надо получить данные для отправки, и если они больше нуля, то добавить в конец отправляемой строки символ завершения строки (нулевой символ). Мне приходилось работать с разным оборудованием, и большинство типов требует в конце команды отправлять символы конца строки и перевода каретки. Иногда бывает достаточно только символа конца строки.

Теперь прерываем поток чтения данных и записываем в порт данные стандартной функцией работы с файлами WriteFile. После записи можно снова запускать поток чтения.

Если у вас есть модем, то можете запустить программу и открыть порт, на котором настроен модем. Отправьте команду ATDTxxxxx, где хххх — это номер телефона. Модем должен будет начать набор указанного номера телефона.

Примечание
Исходный код примера, описанного в этом разделе, вы можете найти на компакт - диске в каталоге \Demo\Chapter5\COMport.
 

Содержание  Назад  Вперед







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