|
Входит и выходит...Работаем с COM-портом Николай "GorluM" Андреев Xakep, номер #053, стр. 053-086-4 <команда>\r \r<ответ>\r К тому же все данные передаются открытым текстом, без каких-либо сложных кодов и т.п. Первое, что я послал, было AT, модем вернул OK. Я попробовал пару строк инициализации, все прошли на ура. Потом вспомнил еще несколько интересных команд, например таких: ATDPномер - звонит пульсом по номеру (T - тоновый набор) ATI3 - выдает версию модема ATI7 - выдает название модема ATH0 - вешает трубку ATH1 - снимает трубку и подключается к линии Если захочешь узнать побольше команд, поройся в документации своего модема. Но и это еще не все. Сейчас практически у всех есть мобильники, и у многих имеется комовский провод для синхронизации мобильного телефона с компьютером. Так вот, в каждом телефоне существует GSM-модем, а это очень интересная штука. Помимо обычных функций модема, он может отправлять SMS. Вот как это сделать при помощи нашей программы: AT+CMGS="+79033133373" Модем ответит. Затем ты введешь текст сообщения с символом '\x1A' на конце, а модем отправит эту мессагу на номер +79033133373. Break Проект для Visual Studio .NET, полный исходный текст программы c подробными комментариям и уже скомпилированный exe’шник ты можешь взять на диске или скачать с сайта www.xakep.ru. Наверняка у написанной нами программы есть еще и другие применения. Так что экспериментируй, а если придумаешь что-нибудь оригинальное, то напиши мне об этом. На этом все. Удачного компилирования. Листинг оконной процедуры int __stdcall Dlg_Proc(HWND hwnd, UINT wMsg, WPARAM wParam, LPARAM lParam) { switch (wMsg){ case WM_CLOSE: EndDialog(hwnd,1); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_BUTTON1: // Нажали на кнопку отправки данных // Выделяем память под буферы writebuffer = (char*)malloc((size_t)128); memset(writebuffer,0,128); // получаем текст из поля GetDlgItemText(hwnd,IDC_EDIT1,writebuffer,128); writebuffer[strlen(writebuffer)] = '\r'; writebuffer[strlen(writebuffer)] = '\0'; // отправляем TerminateThread(hThread,0); WriteFile(hCom, writebuffer, strlen(writebuffer),&n1,0); // Отправляем текст // Заново создаем нить hThread = CreateThread(0, 0, ReadThread, (LPVOID)hwnd, 0, 0); break; case IDC_BUTTON2: // Нажали на кнопку открытия порта combuffer = (char*)malloc((size_t)16); memset(combuffer,0,16); // Получаем имя порта и открываем его GetDlgItemText(hwnd,IDC_EDIT2,combuffer,16); hCom = CreateFile(combuffer, GENERIC_READ | GENERIC_WRITE, 0, 0, 3, 0, 0); hThread = CreateThread(0, 0, ReadThread, (LPVOID)hwnd, 0, 0); // настраиваем его GetCommState(hCom, &dcb); dcb.BaudRate = CBR_57600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(hCom, &dcb); break; } break; } return false; } |