Fórum Saber se existe um modem na maquina, e se está funcionando? #224883

08/04/2004

0

Ola Galera...

Olhei alguns Tópicos do Site mas nem todos me ajuda...

Preciso saber se o existe um modem na maquina, se está configurado, e se está conectado...

Alguém Conhece uma forma ???

Desde já agradeço!!!


Info.wtomfs

Info.wtomfs

Responder

Posts

08/04/2004

Fer_nanda

Achei alguma coisa no DTDelphi (Lloyd Soft), fala sobre detectar o modem e porta...
549 - Como achar um Modem e sua porta
// unit PegaPorta;

{
COMO FUNCIONA!
Todas as informações sobre o modem instalado estão contidas no registro do Windows. Usando TRegistry podemos, facilmente, ter acesso à essas informações. Porém, dependendo do modem, ele pode não especificar em qual porta está instalado. Então devemos primeiro
descobrir quantas portas serial existem no sistema, criar um Handle para receber a Porta e depois fazer tentativas de abertura em cada uma delas no modo Leitura/Escrita (GENERIC_READ or GENERIC_WRITE). Se tentarmos, por exemplo, abrir a COM1 (que, geralmente, está o mouse), não conseguiremos abrí-la e retornará erro (INVALID_HANDLE_VALUE). Podemos então manipular o retorno. A forma ideal é criar um loop para que todas as portas sejam checadas.

O Procedure abaixo, pega as informações contida nas chaves: HKEY_LOCAL_MACHINE\..\..\SerialComm e \..\..\modem\0000
A chave .\..modem\0000, refere-se ao primeiro modem encontrado, caso existir mais que um, este será ..\modem\0001, 0002... e assim por diante.

Veja bem, poderemos ir diretamente apenas na chave do modem para saber em que porta ele está instalado. Esta informação estará na Subsecção ´AttachedTO´, porém, nem todos os modems registram esta informação. Portando, o modo mais seguro, e eficaz, é usar tentativas
de abertura como descrito abaixo.

}

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Registry;

type
TForm1 = class(TForm)
ComboBox1: TComboBox;
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure PegaModem(porta: string);
procedure ComboBox1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.PegaModem(porta : string);
var
FHandle : THandle;
Reg : TRegistry;
Lista : TStrings;
i : integer;
varPorta, varModelo : string;
begin
Reg :=TRegistry.Create;

//Procurar na secção...
Reg.RootKey :=HKEY_LOCAL_MACHINE;

//SubSecção onde estão as Portas de comunicação disponíveis
if Reg.OpenKey(´\Hardware\DeviceMap\SerialComm´, false) then begin

//Cria a uma ´lista´ das portas encontradas (mouse, modem... etc..)
lista := TStringList.Create;

//Adiciona à ´lista´ as portas encontradas
Reg.GetValueNames(lista);
for i := 0 to lista.count -1 do begin
if trim(porta) = ´´ then
begin
varPorta := Reg.ReadString(lista[i]);// Lê nome da porta
combobox1.Items.Add(varPorta);
end
else
varPorta := porta;

{Cria o Handle para receber a(s) porta(s) e faz tentativa de abertura em todas encontradas, no modo leitura ou escrita (modem) }
FHandle := CreateFile(
PChar(´\\.\´ + varPorta),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);

// Se for uma porta válida para modem...
if FHandle <> INVALID_HANDLE_VALUE then begin
CloseHandle(FHandle); // Fecha o Handle e a porta

//Pega o nome/modelo do modem instalado na porta existente
if Reg.OpenKey(´\System\CurrentControlSet\´+
´Services\Class\Modem\0000\´, false)then begin
varModelo := Reg.ReadString(´Model´);
Label2.Caption := varModelo+´ - Instalado na porta ´+varPorta;
Combobox1.Text := varPorta;
end;
end
else
Label2.Caption := ´Não há modem instalado na porta ´+varPorta;
end;
//Fecha e libera variáveis
Reg.CloseKey;
Lista.Free;
Reg.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
porta : string;
begin
Combobox1.Clear;
PegaModem(porta);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
porta : string;
begin
//Verificar se existe mais de um modem...
porta := combobox1.text;
PegaModem(porta);
end;

end.

boa sorte


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar