Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-07-29

Re: com-port

Вот прога для работы с com-портом:
com.cpp:
#include <windows.h>
#include "resource.h"

// глобальные переменные
// hCom - дескриптор нашего порта
// hThread - дескриптор нити
HANDLE hCom = INVALID_HANDLE_VALUE, hThread;
// счетчик отосланных\принитых байт
DWORD n1;
// буфферы для имени порта и данных посланных порт
char *combuffer,*writebuffer;

// структура с конфигурацией порта
DCB dcb;


// функция, созданная, чтобы все выводить в Edit box
void __stdcall WriteLog(HWND hw, char* str){
for(int i = 0; i < strlen(str); i++) SendDlgItemMessage((HWND)hw,IDC_EDIT3,WM_CHAR,str[i],0);

}

// Нить, в которой мы читаем данные из порта
// Мы передаем ей в параметре хэндл нашего окна
// это нужно для того, чтобы мы смогли
DWORD __stdcall ReadThread(LPVOID hwnd){
char newb;
while(true){
// Читаю байт
ReadFile(hCom,&newb,1,&n1,0);
// Посылаю байт в поле IDC_EDIT3 на форме
SendDlgItemMessage((HWND)hwnd,IDC_EDIT3,WM_CHAR,newb,0);
}
}

// В этой функции мы будем обрабатывать сообщения прешедшие нашему окну
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:
// Нажали на баттон для отправки данных

// Выделяем под буфферы 64 и 128 байт
writebuffer = (char*)malloc((size_t)128);
// Заполняем их нулями
memset(writebuffer,0,128);

// Получаю текст в буффер
GetDlgItemText(hwnd,IDC_EDIT1,writebuffer,128);

// Если он есть(на кнопку не просто так нажали) и порт открыт
if ((strlen(writebuffer)>0)&&(hCom != INVALID_HANDLE_VALUE)){
// То стираем текст в поле на форме
SetDlgItemText(hwnd,IDC_EDIT1,NULL);

writebuffer[strlen(writebuffer)] = '\r';
writebuffer[strlen(writebuffer)] = '\0';
// Красиво печатаем отправляемый нами текст в listbox
WriteLog(hwnd,writebuffer);

// Убиваем нить чтения данных
TerminateThread(hThread,0);
// Отправляем тект
WriteFile(hCom,writebuffer,strlen(writebuffer),&n1,0);
// Заново создаем нить
hThread = CreateThread(0, 0, ReadThread, (LPVOID)hwnd, 0, 0);
}
break;
case IDC_BUTTON2:
// Нажали на баттон для открытия порта

// Если порт ещё не открыт
if (hCom == INVALID_HANDLE_VALUE){
// Выделяю память под буффер и обнуляю её
combuffer = (char*)malloc((size_t)16);
memset(combuffer,0,16);
// Получаю имя порта
GetDlgItemText(hwnd,IDC_EDIT2,combuffer,16);

// Открываю порт
hCom = CreateFile(combuffer, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);

// Если порт создался нормально, то создаю нить чтения данных
if (hCom == INVALID_HANDLE_VALUE)
WriteLog(hwnd," *** Error!!!\r");
else {
WriteLog(hwnd," *** Port successfully opened.\r");
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;

// записываю настройки
if (SetCommState(hCom, &dcb))
WriteLog(hwnd," *** Port successfully reconfigured.\r");
else
WriteLog(hwnd," *** Error!!!\r");
}
} else {
// Если порт уже открыт, то предложим его закрыть
if (MessageBox(hwnd,"Порт уже открыт. Закрыть его?","Порт уже открыт",MB_YESNO)
== IDYES){
TerminateThread(hThread,0);
CloseHandle(hCom);
hCom = INVALID_HANDLE_VALUE;
WriteLog(hwnd," *** Port successfully closed.\r");
}
}
break;
}
break;
}
return false;
}

int __stdcall WinMain(HINSTANCE hinst, HINSTANCE, PTSTR, int) {
// Тут мы вызываем функцию, которая создает окно из ресурса.
DialogBox(hinst,MAKEINTRESOURCE(IDD_DIALOG1),NULL,Dlg_Proc);
return 0;
}



com.rc:

// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////

//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////

#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////

// Russian resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
#ifdef _WIN32
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
#pragma code_page(1251)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////

//
// Dialog
//

IDD_DIALOG1 DIALOGEX 0, 0, 171, 215
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "COM-портовая фигня"
FONT 8, "Courier New", 400, 0, 0xCC
BEGIN
EDITTEXT IDC_EDIT1,7,194,98,14,ES_AUTOHSCROLL
PUSHBUTTON "Послать",IDC_BUTTON1,106,194,58,14
PUSHBUTTON "Открыть порт",IDC_BUTTON2,76,7,88,12
EDITTEXT IDC_EDIT2,7,7,68,13,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT3,7,20,157,174,ES_MULTILINE | ES_AUTOHSCROLL |
ES_WANTRETURN | WS_VSCROLL
END


/////////////////////////////////////////////////////////////////////////////

//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_DIALOG1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 164
TOPMARGIN, 7
BOTTOMMARGIN, 208
END
END
#endif // APSTUDIO_INVOKED

#endif // Russian resources
/////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////

// English (U.S.) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////

//
// TEXTINCLUDE
//

1 TEXTINCLUDE
BEGIN
"resource.h\0"
END

2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END

3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END

#endif // APSTUDIO_INVOKED

#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////




#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////

//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////

#endif // not APSTUDIO_INVOKED

Номер выпуска : 4812
Возраст листа : 677 (дней)
Количество подписчиков : 524
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/409785
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-07-29 22:17:50 (#409785)

com-port

Здравствуйте, Все.

Если не сложно, кусочек кода - пример обработки события считывания с
сом порта.
Заранее спасибо!!!

   Антон Горячун 2005-07-29 15:06:12 (#409523)