golf2008,
Cita:
Empezado por golf2008
...como se puede hacer para detectar si un puerto serie está abierto...
|
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
hCom : LongWord;
ComSerial : Byte = 1;
implementation
{$R *.dfm}
function OpenPort(COMSerial : Byte) : Boolean;
var
UserMsg : String;
COMPort : String;
begin
if (COMSerial = 0) then
begin
UserMsg := 'Puerto Serial Invalido';
MessageDlg(UserMsg,mtError,[mbOK],0);
Result := False;
Exit;
end;
COMPort := '\\.\COM' + IntToStr(COMSerial);
hCom := CreateFile(PChar(COMPort), GENERIC_READ OR GENERIC_WRITE, 0, Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hCom = INVALID_HANDLE_VALUE then
begin
UserMsg := 'El Puerto de Comunicacion Serial No Esta Habilitado en Windows';
MessageDlg(UserMsg,mtError,[mbOK],0);
hCom := 0;
Result := False;
Exit;
end;
UserMsg := Format('El Puerto de Comunicacion Serial COM%d Fue Abierto',[ComSerial]);
MessageDlg(UserMsg,mtInformation,[mbOK],0);
Result := True;
end;
function ClosePort(COMSerial : Byte) : Boolean;
var
UserMsg : String;
begin
If hCom > 0 then
begin
if not CancelIo(hCom) then
begin
UserMsg := 'CancelIo : ' + SysErrorMessage(GetLastError);
MessageDlg(UserMsg,mtError,[mbOK],0);
Result := False;
Exit;
end;
if not CloseHandle(hCom) then
begin
UserMsg := 'CloseHandle : ' + SysErrorMessage(GetLastError);
MessageDlg(UserMsg,mtError,[mbOK],0);
Result := False;
Exit;
end;
UserMsg := Format('El Puerto de Comunicacion Serial COM%d Fue Cerrado',[ComSerial]);
MessageDlg(UserMsg,mtInformation,[mbOK],0);
Result := True;
hCom := 0;
end
else
begin
UserMsg := Format('El Puerto de Comunicacion Serial COM%d no esta Abierto',[ComSerial]);
MessageDlg(UserMsg,mtError,[mbOK],0);
Result := True;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenPort(ComSerial);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClosePort(ComSerial);
end;
end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32,
permite abrir y cerrar un puerto serial que este físicamente habilitado en Windows.
Espero sea útil
Nelson.