Amigos
Existe alguna función que devuelva el path de las tarjetas de almacenamiento (Storage Card) que tiene una PDA??
Gracias de antemano.
Saludos
¿Como saber el path de una tarjeta SD?
¿Como saber el path de una tarjeta SD?
Toni Sales
Hola,
Os dejo una función que devuelve todas las tarjetas y volúmenes de una PDA.
Saludos,
José Luis Capel
Os dejo una función que devuelve todas las tarjetas y volúmenes de una PDA.
Code: Select all
function Main()
LOCAL a
a := PPCSDCARDS()
Aeval(a, {|n | MsgInfo( n ) } )
RETURN NIL
#pragma BEGINDUMP
#include <hbapi.h>
#include <hbvm.h>
#include <windows.h>
#include <aygshell.h>
#include <hbapiitm.h>
#include "wininet.h"
HB_FUNC( PPCSDCARDS )
{
PHB_ITEM sdCards;
PHB_ITEM sdCard;
LPSTR vMsg;
int index;
// Total number of storage cards found.
int iNumOfFlashCard = 0;
// Maximum number of storage cards to find.
int iMaxCards = 10;
// Whether to continue searching after finding a card.
BOOL bContinue = TRUE;
// Root directory path of storage cards.
TCHAR szRootDirPath[MAX_PATH];
// String for storing the storage card name with the full path.
CHAR szSCName[MAX_PATH];
// Search handle for storage cards.
HANDLE hFlashCard;
// Structure for storing card information.
WIN32_FIND_DATA *lpwfdFlashCard;
// Structure for storing card information temporarily.
WIN32_FIND_DATA *lpwfdFlashCardTmp;
lpwfdFlashCardTmp = (WIN32_FIND_DATA *) LocalAlloc
(LPTR, iMaxCards * sizeof (WIN32_FIND_DATA));
// Test for failed memory allocation.
if (lpwfdFlashCardTmp == NULL)
return;
hFlashCard = FindFirstFlashCard (&lpwfdFlashCardTmp [0]);
if (hFlashCard == INVALID_HANDLE_VALUE)
{
// Free the memory.
LocalFree (lpwfdFlashCardTmp);
return;
}
while (bContinue)
{
iNumOfFlashCard += 1;
// Search for the next storage card.
bContinue = FindNextFlashCard (hFlashCard,
&lpwfdFlashCardTmp [iNumOfFlashCard]);
}
// Close the search handle.
FindClose (hFlashCard);
sdCards = hb_itemArrayNew( iNumOfFlashCard ) ;
sdCard = hb_itemNew( NULL );
if (iNumOfFlashCard > 0)
{
// Allocate memory for lpwfdFlashCard.
lpwfdFlashCard = (WIN32_FIND_DATA *) LocalAlloc
(LPTR, iNumOfFlashCard * sizeof (WIN32_FIND_DATA));
// Test for failed memory allocation.
if (lpwfdFlashCard == NULL)
{
// Free the temp card memory.
LocalFree (lpwfdFlashCardTmp);
return;
}
// Assign lpwfdFlashCardTmp to lpwfdFlashCard.
for (index=0; index < iNumOfFlashCard; ++index)
{
lpwfdFlashCard [index] = lpwfdFlashCardTmp [index];
vMsg = WideToAnsi(lpwfdFlashCard[index].cFileName);
sdCard = hb_itemPutC(NULL, vMsg ) ;
hb_itemArrayPut( sdCards, index+1, sdCard );
hb_xfree( (void *) vMsg);
}
// Free the memory.
LocalFree (lpwfdFlashCard);
}
LocalFree (lpwfdFlashCardTmp);
hb_itemReturn(sdCards);
hb_itemRelease(sdCards);
hb_itemRelease(sdCard);
}
#pragma ENDDUMP
Saludos,
José Luis Capel
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: