void __fastcall TForm1::Button1Click(TObject *Sender){ HANDLE port;int i;AnsiString S = "";SetLastError(0);i = 1;while (1){ S = "COM" + IntToStr(i); port=CreateFile(S.c_str(),GENERIC_READ|GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL); if(GetLastError() == 0) { ComboBox1->Items->Add("COM" + IntToStr(i)); i++; CloseHandle(port); } else break;}ComboBox1->ItemIndex = 0;}
TRegistry* Reg = new TRegistry;TStringList *List = new TStringList;int i;AnsiString w; Reg->RootKey = HKEY_LOCAL_MACHINE;Reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);Reg->GetValueNames(List);for (i = 0; i List->Count; i++){ w= Reg->ReadString(List->Strings[i]).SetLength(3); if (w.SetLength(3) == "COM") ComboBox1->Items->Add(Reg->ReadString(List->Strings[i]));}List->Free();Reg->CloseKey();Reg->Free(); ComboBox1->ItemIndex = 0;
TForm1 *Form1;HANDLE port;TDCB lpDCB; //---------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner){}//---------------------------------------------------------------------------//cначала нажимаю кнопкуvoid __fastcall TForm1::Button1Click(TObject *Sender){ ComboBox1->Clear(); int i; AnsiString S = ""; SetLastError(0); i = 1; while (1) { S = "COM" + IntToStr(i); port=CreateFile(S.c_str(),GENERIC_READ|GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL); if(GetLastError() == 0) { ComboBox1->Items->Add("COM" + IntToStr(i)); i++; CloseHandle(port); Button3->Enabled = true; } else break; } ComboBox1->ItemIndex = 0; port = 0;}//--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action){ if (port != 0) CloseHandle(port); }//---------------------------------------------------------------------------//вижу параметры портаvoid __fastcall TForm1::Button3Click(TObject *Sender){ if (port == 0) port = CreateFile(ComboBox1->Text.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); if(! GetCommState(port, &lpDCB)) { ShowMessage("Не удалось открыть порт " + ComboBox1->Text); exit; }//комбобоксы CBBaudRate->ItemIndex = CBBaudRate->Items->IndexOf(IntToStr(lpDCB.BaudRate)); CBParity->ItemIndex = lpDCB.Parity; CBByteSize->ItemIndex = lpDCB.ByteSize - 4; CBStopBits->ItemIndex = lpDCB.StopBits;}//---------------------------------------------------------------------------//записываю в портvoid __fastcall TForm1::Button4Click(TObject *Sender){ AnsiString buf; int n; buf = "$ST+VERSION"; FlushFileBuffers(port); WriteFile(port, buf.c_str(), strlen(buf.c_str()), &DWORD(n), NULL); ShowMessage("Передано " + IntToStr(n) + " байт"); //вижу что ушло 11 байт Button5->Enabled=true;}//--------------------------------------------------------------------------- //хочу прочитать ответvoid __fastcall TForm1::Button5Click(TObject *Sender){ AnsiString buf;int n;DWORD lpEvtMask;SetCommMask(port, EV_RXCHAR);WaitCommEvent(port, &lpEvtMask,NULL); //тут зависание и нет ответа :(ReadFile(port, buf.c_str(), 128, &DWORD(n), NULL);ShowMessage("Принято " + IntToStr(n) + " байт: " + buf);}//---------------------------------------------------------------------------
//---------------------------------------------------------------------------// create list acsessible port'svoid __fastcall TMainForm::PortBtnClick(TObject *Sender){ HANDLE ComPort = INVALID_HANDLE_VALUE; int ind = PortCBox->ItemIndex; PortCBox->Items->Clear(); char buff[]="COM9"; for(int i = 1;i10;i++) { buff[3] = i+48; ComPort = CreateFile ( buff, GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL ); if(ComPort != INVALID_HANDLE_VALUE) { PortCBox->Items->Add(buff); CloseHandle(ComPort ); } } if( (ind == -1)||( ind >= PortCBox->Items->Count) ) PortCBox->ItemIndex = 0; else PortCBox->ItemIndex = ind; PortCBox->Tag = 0; if ( PortCBox->Items->Text.IsEmpty() == true ) { Application->MessageBoxA("Несоответствие конфигурации ПК", "Com-порты не обнаружены!", MB_ICONHAND|MB_OK); Application->Terminate(); }}