Lazarus 3.2 (2024.02.28.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Soros port listázás 2016 dec. 09 08:59 #2136

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
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.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Soros port listázás 2016 dec. 09 08:40 #2135

  • brandyman
  • brandyman profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 40
  • Köszönetek: 1
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.

Soros port listázás 2016 dec. 08 14:26 #2133

  • brandyman
  • brandyman profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 40
  • Köszönetek: 1
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!

Soros port listázás 2016 dec. 08 14:02 #2132

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
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.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Soros port listázás 2016 dec. 08 13:50 #2131

  • brandyman
  • brandyman profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 40
  • Köszönetek: 1
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...

Soros port listázás 2016 dec. 08 13:43 #2130

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
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.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64
Mellékletek:

Soros port listázás 2016 dec. 08 13:26 #2129

  • brandyman
  • brandyman profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 40
  • Köszönetek: 1
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. :(

Soros port listázás 2016 dec. 08 12:50 #2128

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
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.
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Soros port listázás 2016 dec. 08 12:28 #2127

  • brandyman
  • brandyman profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 40
  • Köszönetek: 1
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.

Soros port listázás 2016 dec. 08 11:22 #2126

  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 506
  • Köszönetek: 86
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)
Hogyan kérdezzünk okosan? / Mit kell tennünk kérdezés előtt? -- Lazarus 3.0 -- FPC 3.2-- GNU/Linux 5.15.0 x86_64

Soros port listázás 2016 dec. 08 10:00 #2125

  • brandyman
  • brandyman profilkép Témaindító
  • Haladó forumozó
  • Haladó forumozó
  • Hozzászólások: 40
  • Köszönetek: 1
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!
Mellékletek:

  • Oldal:
  • 1