Lazarus 2.0.10 (2020.07.11.)
Letöltés

question-circle Soros port listázás

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Soros port listázás

A példakódomban, a sorok végén megjegyzésben szerepel, hogy az általad "duplikáció"-nak nevezett sorok mit adnak a TMemo-hoz (nem ugyanazt, ezért nem duplikáció).
Ezeket a sorokat (2 darab) hibakeresési céllal tettem bele, hogy lássuk milyen adatokat kapunk a rendszertől.
... és természetesen eltávolíthatók, ha nincs rájuk szükség.

Továbbá nem szabad elfelejteni, hogy a lista nem csak a soros, hanem a párhuzamos (pl.: LPT) portokat is tartalmazza.
#2136

  • brandyman
  • brandyman profilkép
  • Haladó fórumozó
  • Haladó fórumozó
  • Hozzászólások: 40
  • Karma: -2
  • Köszönetek: 1

brandyman válaszolt a témára: Soros port listázás

Gábor,
A TMemo többszörösen töltődik fel adatokkal, de többször is van ADD utasítás a kódban.
Kiszedve a duplikációkat; csak egyszer tölti fel adatokkal.
#2135

  • brandyman
  • brandyman profilkép
  • Haladó fórumozó
  • Haladó fórumozó
  • Hozzászólások: 40
  • Karma: -2
  • Köszönetek: 1

brandyman válaszolt a témára: Soros port listázás

Egyik sem segített, a TMemo üres marad, pontosabban csak az üres sorok kerültek bele.

Update;
"Futtatás rendszergazdaként" esetén hozza az adatokat.

Köszi a tippet!
#2133

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Soros port listázás

Ha még nem próbáltad próbáld a "Futtatás / Tisztítás és építés" menüponttal újrafordítani a projektet...

Ha nem hoz eredményt akkor a "Projekt / Projekt beállításai" menüpontra kattintva a "Fordító beállításai / Beállítás és cél" oldalon a "Win32 gui alkalmazás (-WG)" elől vedd ki a jelölést és így fordítsd le újra az előbbi menüpont használatával. Az így elkészült alkalmazást a parancssorból indítsd el... talán jön oda valami hibaüzenet.
#2132

  • brandyman
  • brandyman profilkép
  • Haladó fórumozó
  • Haladó fórumozó
  • Hozzászólások: 40
  • Karma: -2
  • Köszönetek: 1

brandyman válaszolt a témára: Soros port listázás

Voltam szives rákeresni, és ott is vannak a portok, ám még a te kódoddal sem töltötte fel a TMemo-t, csak az üres sorok mentek bele.
Valami nem kerek itt...
#2131

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Soros port listázás

Ha lennél szíves rákeresni a regisztrációs adatbázisban valamelyik COM port nevére (pl.: COM1 vagy akár COM6) akkor megtudhatnád, hogy pontoson hová is van bejegyezve. Mint említettem több helyen is előfordulhat (ennek sok oka lehet, most nem részletezném).
Itt a unit forráskódja, ami nálam működik és egy TMemo-ba írja a listát:
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Registry;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
 
  public
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
var
  reg: TRegistry;
  st: TStrings;
  i: Integer;
begin
  reg := TRegistry.Create;
  reg.RootKey := HKEY_LOCAL_MACHINE;
 
  // reg.OpenKey('hardware\devicemap\serialcomm', False);
  reg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\Ports', False);
 
  st := TStringList.Create;
  reg.GetValueNames(st);
 
  for i := 0 to st.Count - 1 do
    Memo1.Lines.Add(st.Strings[i]+': '+reg.ReadString(st.Strings[i])); // nevek és értékek kettősponttal elválasztva
 
  Memo1.Lines.Add(''); // üres sor elválasztóként
  Memo1.Lines.Add(st.Text); // és most csak a nevek
 
  st.Free;
  reg.CloseKey;
  reg.Free;
end;
 
end.
#2130
Mellékletek:

  • brandyman
  • brandyman profilkép
  • Haladó fórumozó
  • Haladó fórumozó
  • Hozzászólások: 40
  • Karma: -2
  • Köszönetek: 1

brandyman válaszolt a témára: Soros port listázás

Ezt az elérési utat használva sem töltődtek be a COM portok a ComboBox-ba.
Pontosabban semmi sem töltődött bele. :(
#2129

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Soros port listázás

A kód amit írtál valószínűleg nálad sem fordult le.
Idő közben sikerült egy windows-os gép elé kerülnöm és rákerestem a regisztrációs adatbázisban a COM1-re (ez elvileg minden gépen van).
Ezen a gépen itt találtam meg a soros és párhuzamos portokat:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Ports
Ez természetesen nem jelenti azt, hogy másik ágon nem lehetnek felsorolva.
#2128

  • brandyman
  • brandyman profilkép
  • Haladó fórumozó
  • Haladó fórumozó
  • Hozzászólások: 40
  • Karma: -2
  • Köszönetek: 1

brandyman válaszolt a témára: Soros port listázás

A ComboBox szintén üres a program után.

Valószínűleg nem az adatok felolvasása a baj, hanem az, hogy a registry-ből eleve nem jön ki adat.
#2127

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 432
  • Karma: 8
  • Köszönetek: 70

Gábor válaszolt a témára: Soros port listázás

Esetleg így, ha egyesével és indexelve adod hozzá az elemeket le tudod majd fordítani:
combobox1.Items.Add(reg.ReadString(st.Strings[i]));
(más tekintetben nem ellenőriztem a kód használhatóságát)
#2126

  • brandyman
  • brandyman profilkép
  • Haladó fórumozó
  • Haladó fórumozó
  • Hozzászólások: 40
  • Karma: -2
  • Köszönetek: 1

brandyman létrehozta a témát: Soros port listázás

Sziasztok,

A gépemen lévő soros porto(ka)t szeretném fellistázni ComboBox-ba, de az alábbi kód nem hozza fel a COM6-ot, ami jelzem; USB-s eszköz, gondolom virtualis soros porttal.

var
reg : TRegistry;
st : TStrings;
i : integer;
begin
ComboBox1.Clear;
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('hardware\devicemap\serialcomm',false);
st := TStringList.Create;
reg.GetValueNames(st);
for i := 0 to st.Count -1 do
begin
combobox1.Items.Add(reg.ReadString(st.Strings));
end;
st.Free;
reg.CloseKey;
reg.free;
end;

A kód rossz, vagy ezeket az eszközöket nem fogom tudni így használni?

KöszI!
#2125
Mellékletek: