{ **** UBPFD *********** by delphibase.endimus.com **** >> Определяет наличие СОМ портов
Данная процедура позволяет определить наличие доступных СОМ-портов. Список добавлятся в ComboBox. После этого можно выбирать нужный порт.
Зависимости: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls
Автор: Михаил, mikhail.sazonov@niitp.ru, Москва Copyright: Сазонов Михаил Дата: 2 октября 2003 г. ***************************************************** }
unit SetComPort;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, dfsStatusBar, ExtCtrls, StdCtrls, ImgList, Buttons, ToolWin;
type TForm1 = class(TForm) StrNP: TRichEdit; dfsStatusBar1: TdfsStatusBar; ImageList1: TImageList; CoolBar1: TCoolBar; Panel1: TPanel; LoadNP: TBitBtn; Auto: TCheckBox; SetRegim: TRadioGroup; GroupBox1: TGroupBox; ComPort: TComboBox; BaudRate: TComboBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Parity: TComboBox; ByteSize: TComboBox; StopBits: TComboBox; CloseItem: TBitBtn; procedure InquiryPort(Sender: TObject); {опрос существующих портов} procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure CloseItemClick(Sender: TObject); procedure ComPortChange(Sender: TObject); procedure BaudRateChange(Sender: TObject); procedure ParityChange(Sender: TObject); procedure ByteSizeChange(Sender: TObject); procedure StopBitsChange(Sender: TObject); procedure SetRegimClick(Sender: TObject); private { Private declarations } public { Public declarations } FHandl: THandle; {дескриптор порта} DCB: TDCB; {ссылка на структуру настройки порта} PortName: string; {имя порта, для дальнейшей работы} end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.InquiryPort(Sender: TObject); var i: integer; begin {опрос существующих портов} for i := 0 to 31 do {цикл опроса} begin {пробуем получить дескриптор порта} FHandl := CreateFile(PChar('COM' + IntToStr(i + 1)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0); if FHandl <> INVALID_HANDLE_VALUE then {если порт есть то добавить в список} ComPort.Items.Add('COM' + IntToStr(i + 1)); CloseHandle(FHandl); {закрыть дескриптор} end; end;
|