Hi,
kürzlich war hier im Forum mal ein Thread, mit einer Diskussion wie man installierte Speicherkarten ermitteln kann.
Falls es jemanden interessiert, bin eben auf einige Funktionen gestossen, die genau das leisten. Diese Api-Funktionen heissen
FindFirstFlashCard() und
FindNextFlashCard(), sollen ab CE 3.0 funktionieren und befinden sich in der DLL "
note_prj.dll" im Windows-Verzeichnis. Die Funktionen werden analog FindFirstFile()/FindNextFile() in Verbindung mit einer WIN32_FIND_DATA-Struktur verwendet. FindFirstFlashCard gibt einen "Such-Handle" zurück, der dann als Eingabe für FindNextFlashCard verwendet wird. Der Handle muss mit
FindClose() freigegeben werden. Nachfolgend ein einfaches Beispiel für den Einsatz von FindFirstFlashCard(). Leider ist es mir nicht gelungen, die Funktionen unter Verwendung der WIN32_FIND-DATA-Struktur zum Laufen zu bringen. Daher ist der Code auch nicht besonders "schön", aber er funktioniert...
[DllImport("note_prj.dll", SetLastError = true)]
static private extern IntPtr FindFirstFlashCard(IntPtr lpFindData);
[DllImport("coredll.dll", SetLastError = true)]
static private extern IntPtr FindClose(IntPtr hFind);
//static private extern IntPtr FindFirstFlashCard(
// ref _WIN32_FIND_DATA lpFindData);
//
static public unsafe string FindFirstFlashCard()
{
// Das Feld "cFilename" von WIN32_FIND_DATA beginnt bei Offset 40...
const int NAME_OFFSET = 40;
byte[] rgbFind = null;
char[] rgcName = null;
IntPtr hCard = IntPtr.Zero;
string strCard = null;
// Byte-Buffer in der Groesse sizeof(WIN32_FIND_DATA) allokieren...
rgbFind = new byte[((260 * sizeof(char) + 40))];
fixed(byte* pBuffer = &rgbFind[0])
{
IntPtr pBufferPtr = (IntPtr)pBuffer;
hCard = FindFirstFlashCard(pBufferPtr);
if (IntPtr.Zero == hCard)
return null;
}
FindClose(hCard);
rgcName = new char[260];
Buffer.BlockCopy(rgbFind, NAME_OFFSET, rgcName, 0, rgcName.Length);
strCard = new string(rgcName);
return strCard.Trim('\0');
}
Gruss
Reiner