<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Hardwareinfos auslesen]]></title><description><![CDATA[<p>Hallo,<br />
für die Konfiguration einer Schnittstelle bräuchte ich die Information welche und wieviele COM-Ports zur Verfügung stehen.<br />
Wo kann ich diese Info auslesen?<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/120294/hardwareinfos-auslesen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Jul 2026 20:12:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/120294.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Sep 2005 18:22:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Hardwareinfos auslesen on Sun, 11 Sep 2005 18:22:30 GMT]]></title><description><![CDATA[<p>Hallo,<br />
für die Konfiguration einer Schnittstelle bräuchte ich die Information welche und wieviele COM-Ports zur Verfügung stehen.<br />
Wo kann ich diese Info auslesen?<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/869771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/869771</guid><dc:creator><![CDATA[focus18]]></dc:creator><pubDate>Sun, 11 Sep 2005 18:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Sun, 11 Sep 2005 21:03:51 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>in der Registry stehen solche Infos</p>
<p>MfG<br />
Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/869863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/869863</guid><dc:creator><![CDATA[KlausB]]></dc:creator><pubDate>Sun, 11 Sep 2005 21:03:51 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 05:17:24 GMT]]></title><description><![CDATA[<p>Auszug aus meiner Siemens Mobile Engine:</p>
<pre><code class="language-cpp">void __fastcall TCommSettings::GetCommPorts(TStrings *strCommPorts)
{
    // Alle verfügbaren COM Ports aus der Registry auslesen
    // und als TStrings zurückgeben
    TStringList *MyStringList = new TStringList;
    TRegistry *MyReg = new TRegistry;
    MyReg-&gt;RootKey = HKEY_LOCAL_MACHINE;
    MyReg-&gt;OpenKey(&quot;\\HARDWARE\\DEVICEMAP\\SERIALCOMM&quot;, false);
    MyReg-&gt;GetValueNames(MyStringList);
    for (int i=0; i&lt;MyStringList-&gt;Count; i++) {
        MyStringList-&gt;Strings[i] = MyReg-&gt;ReadString(MyStringList-&gt;Strings[i])
             + &quot;: &quot;
             + MyStringList-&gt;Strings[i].SubString(9,MyStringList-&gt;Strings[i].Length())
             + &quot;&quot;;
    }
    MyStringList-&gt;Sort();

    for (int i=0; i&lt;MyStringList-&gt;Count; i++) {
        strCommPorts-&gt;Add(MyStringList-&gt;Strings[i]);
    }
    if (strCommPorts-&gt;Count == 0) {
        // Autodetection failed
        for (int i = 1; i&lt;129; i++) {
            strCommPorts-&gt;Add(&quot;COM&quot;+IntToStr(i));
        }
    }

    MyReg-&gt;CloseKey();
    delete MyReg;
    delete MyStringList;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/869934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/869934</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Mon, 12 Sep 2005 05:17:24 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 06:21:49 GMT]]></title><description><![CDATA[<p>ich hoffe deine engine wird keiner verwenden, so ineffektiv wie die ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/869947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/869947</guid><dc:creator><![CDATA[tss]]></dc:creator><pubDate>Mon, 12 Sep 2005 06:21:49 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 08:02:28 GMT]]></title><description><![CDATA[<p>Das hier ist nur eine Routine um die COM Ports aufzulisten und in eine Combo Box<br />
zu schreiben. Das wird ganz genau ein mal pro Programmstart gemacht und benötigt<br />
keinerlei für den den User erkennbare Zeit zum ausführen.</p>
<p>Du kannst aber gerne was besseres programmieren. Oder konstruktive Vorschläge<br />
machen.</p>
<p>Eingesetzt wird die Engine in:<br />
BFCTester, Direct Softkey Editor, Display Inverter, Highspeed PortMonitor,<br />
NonameCable Activator, Open65, ObexFlexmem Browser, Repair65, Repair75,<br />
S45i Activator, Siemens ARM Debugger, Siemens C166 Debugger,<br />
Siemens Contrast Tool, Siemens EEPROM Toolz, Siemens Picture Change</p>
<p>und einigen mehr Programmen. Ich sehe kein Problem bei der Routine, da<br />
es hier nun wirklich nicht auf Geschwindigkeit ankommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870001</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Mon, 12 Sep 2005 08:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 08:21:34 GMT]]></title><description><![CDATA[<p>kein wunder wenn der deutsche wirtschaftsstandort baden geht... wenn unternehmen sich mit sowas zufrieden geben.</p>
<p>Acidmrp schrieb:</p>
<blockquote>
<p>Das hier ist nur eine Routine um die COM Ports aufzulisten und in eine Combo Box zu schreiben. Das wird ganz genau ein mal pro Programmstart gemacht und benötigt keinerlei für den den User erkennbare Zeit zum ausführen.</p>
</blockquote>
<p>wenn du dein gesamtes programm zu aufbaust, dann prost mahlzeit!</p>
<p>ist *<em>TStrings <em>strCommPorts</em></em> überhaupt gültig?<br />
wo ist die überprüfung ob <strong>MyStringList</strong> und <strong>MyReg</strong> ueberhaupt existieren?</p>
<p>[cpp]<br />
// insgesamt 4 mal greifst du auf <strong>MyStringList-&gt;Strings[i]</strong> zu!<br />
for (int i=0; i&lt;MyStringList-&gt;Count; i++)<br />
{<br />
MyStringList-&gt;Strings[i] = MyReg-&gt;ReadString(MyStringList-&gt;Strings[i])<br />
+ &quot;: &quot;<br />
+ MyStringList-&gt;Strings[i].SubString(9, MyStringList-&gt;Strings[i].Length())<br />
+ &quot;&quot;; // was ist das?<br />
}<br />
[/cpp]</p>
<p><strong>OpenKey()</strong> gibt etwas zurück das ausgewertet werden sollte!</p>
<pre><code class="language-cpp">// schonmal was von AddStrings gehört?
for (int i=0; i&lt;MyStringList-&gt;Count; i++) {
  strCommPorts-&gt;Add(MyStringList-&gt;Strings[i]);
}
</code></pre>
<pre><code class="language-cpp">// naja, welche maschine hat denn 128 Com-Ports???
for (int i = 1; i&lt;129; i++) {
  strCommPorts-&gt;Add(&quot;COM&quot;+IntToStr(i));
</code></pre>
<p>schau dir mal <strong>CreateFile</strong> an! damit kannste dann versuchen die ports zu öffnen und nur die anzeigen, die auch wirklich da sind!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870013</guid><dc:creator><![CDATA[tss]]></dc:creator><pubDate>Mon, 12 Sep 2005 08:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 08:44:00 GMT]]></title><description><![CDATA[<blockquote>
<p>wenn du dein gesamtes programm zu aufbaust, dann prost mahlzeit!</p>
</blockquote>
<p>hast du mein ganzes Programm gesehen? Wie schon gesagt das ist nur eine kleine,<br />
unwichtige Routine. Von den etlichen 1000 Benutzern hatte noch _keiner_ ein<br />
Problem damit.</p>
<blockquote>
<p>ist TStrings *strCommPorts überhaupt gültig?</p>
</blockquote>
<p>warum sollte das ungültig sein? Es funktioniert wunderbar. Wie gesagt, es geht hier<br />
um die Elemente einer ComboBox.</p>
<blockquote>
<p>OpenKey() gibt etwas zurück das ausgewertet werden sollte!</p>
</blockquote>
<p>das sollte ich machen, in diesem Punkt hast du recht.</p>
<blockquote>
<p>schonmal was von AddStrings gehört?</p>
</blockquote>
<p>AddStrings ist mir neu. Danke.</p>
<blockquote>
<p>schau dir mal CreateFile an! damit kannste dann versuchen die ports zu öffnen und nur die anzeigen, die auch wirklich da sind</p>
</blockquote>
<p>eine wirklich tolle Idee. Alle Ports die schon von einem anderen Programm<br />
verwendet werden werden einfach nicht angezeigt. Zudem will ich gerne<br />
Beschreibungen für die COM Ports haben. Das ist eine ganz nette Sache.<br />
Und nochwas, wo hör ich auf die Ports durchzutesten? Klar, echte COM Ports<br />
wird es sicher nicht mehr wie 4 geben, aber ein Handy ist i.d.R. an einem<br />
USB Datenkabel angeschlossen, welches auch mal am virtuellen COM Port<br />
67 hängen könnte.</p>
<p>Der Source sollte ja auch nur als Hilfestellung dienen komplett kann er ihn<br />
eh nicht übernehmen, da die Entsprechende Schnittstelle fehlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870027</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Mon, 12 Sep 2005 08:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 08:55:33 GMT]]></title><description><![CDATA[<p>Acidmrp schrieb:</p>
<blockquote>
<p>Wie schon gesagt das ist nur eine kleine,<br />
unwichtige Routine.</p>
</blockquote>
<p>es gibt keine unwichtigen routinen!</p>
<p>Acidmrp schrieb:</p>
<blockquote>
<p>warum sollte das ungültig sein?</p>
</blockquote>
<p>wegen ist nicht und bodennebel! da kann es viele gründe geben. und zu einer sauberen programmierung gehört das einfach dazu! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
<p>hier so könnte ich mir die routine vorstellen:</p>
<pre><code class="language-cpp">void __fastcall TCommSettings::GetCommPorts(TStrings *strCommPorts)
{
  if (!strCommPorts)
    return;

  // Alle verfügbaren COM Ports aus der Registry auslesen 
  // und als TStrings zurückgeben 
  TStringList *MyStringList;
  TRegistry   *MyReg;

  // noch genügend Speicher da?
  if (!(MyStringList = new TStringList))
    return;

  // dito
  if (!(MyReg = new TRegistry))   
  { 
    delete MyStringList;
    return;
  }

  MyReg-&gt;RootKey = HKEY_LOCAL_MACHINE;

  // klappt Registry öffnen?
  if (MyReg-&gt;OpenKey(&quot;\\HARDWARE\\DEVICEMAP\\SERIALCOMM&quot;, false))
  {
    MyReg-&gt;GetValueNames(MyStringList);
    int CommCnt = MyStringList-&gt;Count;

    if (!CommCnt)
    {
      // Autodetection failed
      for (int i = 1; i &lt;= 128; ++i)
        strCommPorts-&gt;Add(&quot;COM&quot; + IntToStr(i));
    }
    else
    {
      AnsiString CommStr;

      for (int i = 0; i &lt; CommCnt; ++i)
      {
        CommStr = MyStringList-&gt;Strings[i];
        strCommPorts-&gt;Add(MyReg-&gt;ReadString(CommStr) + &quot;: &quot; + CommStr.SubString(9, CommStr.Length()));
      }

      // höchstwahrscheinlich unnötig, da die ehh sortiert sein dürften
      strCommPorts-&gt;Sort();
    }

    MyReg-&gt;CloseKey();
  }

  delete MyReg;
  delete MyStringList;
}
</code></pre>
<p>abgesehen davon, würde ich die funktionialität in ner eigenen klasse kapseln und nicht in nem vcl-formular (__fastcall gelumpse). MyStringList könnte man sicher ganz weglassen wenn man es ein bissel umschreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870033</guid><dc:creator><![CDATA[tss]]></dc:creator><pubDate>Mon, 12 Sep 2005 08:55:33 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 09:10:17 GMT]]></title><description><![CDATA[<p>ist es in deinem Sinn, dass wenn die Registry nicht geöffnet werden kann, es<br />
keine Alternative zur Auswahö der COM Ports gibt? In meiner Variante, wird die<br />
ComboBox, die es geben _muss_ dann eben mit den Ports 1 bis 128 gefüllt.</p>
<p>Na ja, wenn ich jede nebensächliche Routine bis ins Detail optimieren würde,<br />
wär ich vermutlich noch immer mit dem ersten dieser _Freeware_ Programmen<br />
beschäftigt. Mir ist hauptsächlich wichtig, dass die Routinen zum senden /<br />
empfangen, die zu 99% der Programmlaufzeit ausmachen, bis ins Detail optimiert<br />
sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870047</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Mon, 12 Sep 2005 09:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 09:15:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Das hier</p>
<pre><code class="language-cpp">if (!(MyStringList = new TStringList))
    return;
</code></pre>
<p>ist Quatsch, da new im Fehlerfall keinen Nullpointer zurückliefert sondern eine bad_alloc Exception wirft. Du mußt hier also try/catch verwenden.<br />
Dann sollte man die Erzeugung der StringList in den Abschnitt nach OpenKey verlegen. Wenn das Öffnen des Keys nicht klappt, braucht man sie ja nicht.</p>
<p>Ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870052</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 12 Sep 2005 09:15:50 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 09:19:47 GMT]]></title><description><![CDATA[<p>ist richtig, hab bei mir den new_handler überschrieben, so dass er 0 liefert wenn kein speicher frei ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870060</guid><dc:creator><![CDATA[tss]]></dc:creator><pubDate>Mon, 12 Sep 2005 09:19:47 GMT</pubDate></item><item><title><![CDATA[Reply to Hardwareinfos auslesen on Mon, 12 Sep 2005 17:39:59 GMT]]></title><description><![CDATA[<p>Hallo,<br />
danke für all die Infos.<br />
Werde mal sehen was ich mir draus basteln kann.<br />
Es sollen eigentlich nur die hardwaremäßig wirklich vorhandenen seriellen Schnittstellen angezeigt bzw. im Konfig-Menü geenabled werden.</p>
<p>Nochmal Dank an Alle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/870452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/870452</guid><dc:creator><![CDATA[focus18]]></dc:creator><pubDate>Mon, 12 Sep 2005 17:39:59 GMT</pubDate></item></channel></rss>