Ver Mensaje Individual
  #14  
Antiguo 13-12-2006
manuweb manuweb is offline
Miembro
 
Registrado: oct 2005
Posts: 19
Reputación: 0
manuweb Va por buen camino
Este me funciona a mi.

Está conectado en COM1 y la secuencia de apertura está en la variable cadena



Código Delphi [-]
unit Cajon;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
NombrePuerto = 'COM1'; // Por decir algo
var
Form1: TForm1;
HandlePuerto: THandle; // Manejador para el puerto
Cadena: String; // Para leer del puerto
dwValor: DWORD; // Tamaño de la lectura
Sta: COMSTAT; // Estado o tamaño del buffer de lectura
bResult: Boolean; // Parámetro de resultado
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
// ~~~~~~~~~~~~~~~~~~~
// Apertura del puerto
// ~~~~~~~~~~~~~~~~~~~
//
// El puerto ha de abrirse con acceso exclusivo. Es una de las razones de que haya
// un sólo "Acceso telefónico a redes" que actúa de servidor del puerto. Generalmente
// también se abre con acceso de lectura y escritura ya que es extraño tener que leer
// o escribir sólo en él. Pero, claro, esto depende de lo que vayas a hacer con el
// mismo. El "solapamiento" se produce sólo si hay varios procesos que pueden acceder
// al puerto a la vez y se utiliza cuando la aplicación tiene, por ejemplo, un hilo
// para leer y otro para escribir. Presupongo que no es el caso y que sólo hay un hilo.
// El último parámetro ('hTemplate') no tiene efecto para los puertos de comunicaciones.
//
HandlePuerto := Windows.CreateFile(
PChar(NombrePuerto), { Nombre del puerto }
GENERIC_READ or
GENERIC_WRITE, { Modo de apertura: Lectura/Escritura }
0, { Acceso exclusivo }
nil, { Sin atributos de seguridad }
OPEN_EXISTING, { El puerto debe existir }
0, { Sin solapamiento de Lectura/Escritura }
0); { No hay "hTemplate" }
// Comprobar que la apertura ha sido correcta
if (INVALID_HANDLE_VALUE <> HandlePuerto) then
begin
Cadena := #27#112#0#60#240#13#10;
if (Windows.WriteFile(
HandlePuerto, { Handle del puerto }
PChar(Cadena)^, { Datos a escribir }
Length(Cadena), { Longitud de los datos }
dwValor, { Número de caracteres escritos }
nil) { Sin solapamiento de lecturas/escrituras }
)
then
begin
Button1.Caption:='ok' ;
// Aquí nos damos con un canto en los dientes:
// la 'Cadena' se ha escrito en el puerto. Podemos comprobarlo si
// miramos 'dwValor' ya que debe ser igual a 'Length(Cadena)'.
// Si no lo es, algo ha ido mal.
end;
end;
// ~~~~~~~~~~~~~~~~
// Cerrar el puerto
// ~~~~~~~~~~~~~~~~
Windows.CloseHandle(HandlePuerto);
 
end;
end.





Espero que te sirva.

Suerte.

Manuweb

Última edición por manuweb fecha: 20-12-2006 a las 11:52:03.
Responder Con Cita