<?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[GetLogicalDrive()]]></title><description><![CDATA[<p>Hallo Leute,<br />
hier mein Code</p>
<pre><code class="language-cpp">int nPos = 0;

    CString strDrive = &quot;?:&quot;;

    DWORD dwDriveList = ::GetLogicalDrives ();          ///Laufwerke

    while (dwDriveList)
    {
        if (dwDriveList &amp; 1)
        {
            strDrive.SetAt(0,0x41 + nPos);
            ChooseImage(strDrive);
        }
        dwDriveList &gt;&gt;= 1;
        nPos++;
    }
</code></pre>
<p>GetLogicalDrives erzeugt ein bitmask, in dem lauter Nullen und Einsen hintereinander stehen, und anzeigen, ob ein gültiges Laufwerk existiert. Eine 1 an der 1. Stelle zeigt an, dass A: existiert usw..<br />
Warum funktioniert dieser Code auf dem einen Rechner und auf dem anderen nicht?<br />
Ich brauche ihn, um ein CTreeCtrl mit den Laufwerken zu füllen.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/5066/getlogicaldrive</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 04:00:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/5066.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 18 Mar 2003 16:33:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 16:33:00 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
hier mein Code</p>
<pre><code class="language-cpp">int nPos = 0;

    CString strDrive = &quot;?:&quot;;

    DWORD dwDriveList = ::GetLogicalDrives ();          ///Laufwerke

    while (dwDriveList)
    {
        if (dwDriveList &amp; 1)
        {
            strDrive.SetAt(0,0x41 + nPos);
            ChooseImage(strDrive);
        }
        dwDriveList &gt;&gt;= 1;
        nPos++;
    }
</code></pre>
<p>GetLogicalDrives erzeugt ein bitmask, in dem lauter Nullen und Einsen hintereinander stehen, und anzeigen, ob ein gültiges Laufwerk existiert. Eine 1 an der 1. Stelle zeigt an, dass A: existiert usw..<br />
Warum funktioniert dieser Code auf dem einen Rechner und auf dem anderen nicht?<br />
Ich brauche ihn, um ein CTreeCtrl mit den Laufwerken zu füllen.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/24575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24575</guid><dc:creator><![CDATA[CLoop]]></dc:creator><pubDate>Tue, 18 Mar 2003 16:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 17:02:00 GMT]]></title><description><![CDATA[<p><a href="http://winapi.net" rel="nofollow">winapi.net</a> - Codeschnipsel - Anzeigen aller Laufwerke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24576</guid><dc:creator><![CDATA[Dilger]]></dc:creator><pubDate>Tue, 18 Mar 2003 17:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 17:03:00 GMT]]></title><description><![CDATA[<p>Entweder per ::GetLastError() den Fehler letzten Fehler prüfen, oder mal ::GetLogicalDriveStrings(..) probieren.</p>
<p>Shaggy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24577</guid><dc:creator><![CDATA[Shaggy]]></dc:creator><pubDate>Tue, 18 Mar 2003 17:03:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 17:24:00 GMT]]></title><description><![CDATA[<p>Hallo,<br />
danke erstmal, so weit so gut.<br />
<a href="http://winapi.net" rel="nofollow">winapi.net</a> kenne ich noch nicht, ist vielleicht ein heißer Tip.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/2980">@shaggy</a><br />
Auf meinem Rechner läuft es ja, und ich kann ja nicht auf jedem Rechner, auf dem das Programm laufen soll Visual C++ installieren. Ich könnte allerdings mal ne Version erstellen die GetLastError() anzeigt. stimmt. Dann müsste ich mir den Fehler mailen lassen. Auch OK, aber:<br />
er findet ja ein paar Laufwerke, nur leider eben nicht alle. Ob da GetLastError auch geht?<br />
Mit GetLogicalDriveStrings muss ich es auch noch mal versuchen. Hab es nur kurz gemacht und bin mit den &lt;null&gt;-Zeichen nicht klargekommen. Muss irgendeinen Fehler beim Parsen gemacht haben.<br />
ok, danke noch mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24578</guid><dc:creator><![CDATA[CLoop]]></dc:creator><pubDate>Tue, 18 Mar 2003 17:24:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 17:43:00 GMT]]></title><description><![CDATA[<p>Hallo Shaggy,<br />
habe das mit GetLogicalDriveStrings noch mal probiert:</p>
<p>char buffer[512];<br />
GetLogicalDriveStrings(512,buffer);</p>
<p>Dann zeigt er nur a:\ an.</p>
<p>Jetzt kann es eigentlich nur daran liegen, dass char[512] nicht dass richtige ist oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24579</guid><dc:creator><![CDATA[CLoop]]></dc:creator><pubDate>Tue, 18 Mar 2003 17:43:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 18:11:00 GMT]]></title><description><![CDATA[<p>Hi,<br />
nur noch mal der Vollständigkeit wegen.</p>
<pre><code class="language-cpp">static LPTSTR buffer;
    DWORD count = GetLogicalDriveStrings(0,buffer);
    HANDLE hHeap=GetProcessHeap();
    buffer = (LPTSTR)HeapAlloc( hHeap, HEAP_ZERO_MEMORY, (count + 1) * sizeof(TCHAR) );
    GetLogicalDriveStrings(count,buffer);
    for(int i=0;i&lt;count;i++)
            char e=buffer[i];
    HeapFree(hHeap,0,buffer);
</code></pre>
<p>Jetzt geht es (erstmal weiter)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24580</guid><dc:creator><![CDATA[CLoop]]></dc:creator><pubDate>Tue, 18 Mar 2003 18:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 18:16:00 GMT]]></title><description><![CDATA[<p>Warum benützt du HeapAlloc kannst ja auch ein new hernehmen, würd mich einfach mal so als interesse interesieren</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24581</guid><dc:creator><![CDATA[Nitromaus]]></dc:creator><pubDate>Tue, 18 Mar 2003 18:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 18:19:00 GMT]]></title><description><![CDATA[<p>Schau in die MSDN, dort steht, dass ::GetLogicalDriveStrings(..) die Länge der der Zeichenkette liefert. Die Laufwerkszeichenkette sind durch das Null-Zeichen getrennt. Das ist ja auch das Zeichenkettenendezeichen, insofern zeigt eine Ausgabe nur das erste Laufwerk an.</p>
<p>Auszug aus der MSDN:</p>
<blockquote>
<p>The GetLogicalDriveStrings function fills a buffer with strings that specify valid drives in the system.</p>
<p>DWORD GetLogicalDriveStrings(<br />
DWORD nBufferLength, // size of buffer<br />
LPTSTR lpBuffer // pointer to buffer for drive strings<br />
);</p>
<p>Parameters<br />
nBufferLength<br />
Specifies the maximum size, in characters, of the buffer pointed to by lpBuffer. This size does not include the terminating null character.<br />
lpBuffer<br />
Pointer to a buffer that receives a series of null-terminated strings, one for each valid drive in the system, that end with a second null character. The following example shows the buffer contents with &lt;null&gt; representing the terminating null character.<br />
c:\&lt;null&gt;d:\&lt;null&gt;&lt;null&gt;</p>
<p>Return Values<br />
If the function succeeds, the return value is the length, in characters, of the strings copied to the buffer, not including the terminating null character. Note that an ANSI-ASCII null character uses one byte, but a Unicode null character uses two bytes.</p>
<p>If the buffer is not large enough, the return value is greater than nBufferLength. It is the size of the buffer required to hold the drive strings.</p>
<p>If the function fails, the return value is zero. To get extended error information, use the GetLastError function.</p>
<p>Remarks<br />
Each string in the buffer may be used wherever a root directory is required, such as for the GetDriveType and GetDiskFreeSpace functions.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/24582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24582</guid><dc:creator><![CDATA[Shaggy]]></dc:creator><pubDate>Tue, 18 Mar 2003 18:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 18:53:00 GMT]]></title><description><![CDATA[<p>Jodelahütü,<br />
ich nochmal.</p>
<p>Hi Nitromaus,<br />
um der Wahrheit die ehre zu geben, ich hab HeapAlloc aus einem Beispiel aus der MSDN. Meine Meinung zu dem Thema:<br />
LPTSTR is ja schon ein Pointer.<br />
was du vorschlägst, wäre</p>
<pre><code class="language-cpp">LPTSTR buffer = new LPTSTR[count];
oder 
LPTSTR* buffer= new LPTSTR[count];
</code></pre>
<p>Beides klappt nicht. Ich könnte mir vorstellen, dass man für LPTSTR einfach HeapAlloc braucht.<br />
Für char* gab es doch auch Malloc. Jedenfalls, wenn du HeapAlloc nicht benutzt, bekommst du ne Exception in der NTDLL.dll, und die verwaltet ja den Heap.</p>
<p>Hi Shaggy,<br />
hab mir die MSDN schon durchgelesen. Da steht aber LPTSTR. Und dann geht das auch.</p>
<p>Ähem</p>
<pre><code class="language-cpp">///////////count ermittelt wie oben
    char* buffer1 = new char[count];
    GetLogicalDriveStrings(count,buffer1);
    for( i=0;i&lt;count-5;i+=4)
    {
            char e=buffer1[i];
    }
</code></pre>
<p>das geht auch. Aber wehe, du schreibst anstelle von count etwa strlen(buffer1).<br />
Dann bist du &quot;angemeiert&quot;, weil unser Freund dann nur bis a:\ kommt, wegen \0.<br />
Witzig ist, dass auch der Debugger nur A:\ anzeigt, obwohl mehr drin ist.<br />
OK, nette Session!!<br />
Hat Spaß gemacht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24583</guid><dc:creator><![CDATA[CLoop]]></dc:creator><pubDate>Tue, 18 Mar 2003 18:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 18 Mar 2003 20:45:00 GMT]]></title><description><![CDATA[<p>Der Debugger weiß halt nicht, wie der String formatiert ist, er interpretiert ihn als &quot;normalen&quot; String, kommt also nur bis zum ersten '\0'.</p>
<p>Salü,</p>
<p>Shaggy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/24584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/24584</guid><dc:creator><![CDATA[Shaggy]]></dc:creator><pubDate>Tue, 18 Mar 2003 20:45:00 GMT</pubDate></item><item><title><![CDATA[Reply to GetLogicalDrive() on Tue, 13 Apr 2004 11:46:41 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char drives[27][4];
DWORD nrof_present_drives=GetLogicalDriveStrings(27*4,(char *)drives)/4;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/500386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/500386</guid><dc:creator><![CDATA[sonnenschein]]></dc:creator><pubDate>Tue, 13 Apr 2004 11:46:41 GMT</pubDate></item></channel></rss>