Eu uso conforme abaixo, veja se ajuda:
#define DRIVE_UNKNOWN 0
#define DRIVE_NO_ROOT_DIR 1
#define DRIVE_REMOVABLE 2
#define DRIVE_FIXED 3
#define DRIVE_REMOTE 4
#define DRIVE_CDROM 5
#define DRIVE_RAMDISK 6
************************
FUNCTION UNIDADECORRENTE
************************
Local vRET := .T.
IF TipoUnidade(MY_GetDriveType(DiskName()+":")) ="DRIVE_NO_ROOT_DIR"
IF MsgYesNo("É Altamente recomendavel Utilizar o Mapeando de Unidade para Utilizar o sistema em Rede, Deseja Tentar Mapear Agora ?","Aviso do Sistema")
NetCancel("Z:")
NetRedir( "Z:", Substr(Nomeexecutavel(.t.),1,(len(Nomeexecutavel(.t.))- len(Nomeexecutavel()))-1 ) )
IF CRIAR_ATALHO()=.F.
MsgStop("Não Foi Possivel Criar o Atalho do sistema na Area de Trabalho, Favor puxar o atalho da Unidade Z:\ que se encontra em MEU COMPUTADOR","Aviso do Sistema")
ELSE
MsgInfo("O Sistema Criou um Atlho novo na Area de Trabalho, Favor sair e entrar no sistema novamente","Aviso do Sistema")
ENDIF
ENDIF
ELSEIF TipoUnidade(MY_GetDriveType(DiskName()+":")) ="DRIVE_CDROM"
MsgStop("Não é possivel utilizar o sistema a partir de uma Unidade de CD-ROM, Favor instalar o sistema em uma unidade Fixa","Aviso do Sistema")
vRET := .F.
ELSEIF TipoUnidade(MY_GetDriveType(DiskName()+":")) ="DRIVE_RAMDISK"
MsgStop("É Altamente recomendavel Utilizar Discos Fixos para utilização, instalação e Atualizações do Sistema, Favor revisar","Aviso do Sistema")
vRET := .F.
ELSEIF TipoUnidade(MY_GetDriveType(DiskName()+":")) ="DRIVE_REMOVABLE"
MsgStop("É Altamente recomendavel Utilizar Discos Fixos para utilização, instalação e Atualizações do Sistema, Favor revisar","Aviso do Sistema")
vRET := .F.
ENDIF
Return(vRET)
// Função TipoUnidade:
// Obtém a descrição do tipo da unidade, à partir do valor obtido
// com a função MY_GetDriveType.
*************************************
Function TipoUnidade ( nTipo )
*************************************
Local cTipo := ""
Do Case
Case nTipo == DRIVE_UNKNOWN ; cTipo := "DRIVE_UNKNOWN"
Case nTipo == DRIVE_NO_ROOT_DIR ; cTipo := "DRIVE_NO_ROOT_DIR" // REDE NÃO MAPEADA
Case nTipo == DRIVE_REMOVABLE ; cTipo := "DRIVE_REMOVABLE" // DISCO REMOVIVEL
Case nTipo == DRIVE_FIXED ; cTipo := "DRIVE_FIXED" // FIXO
Case nTipo == DRIVE_REMOTE ; cTipo := "DRIVE_REMOTE" // REDE MAPEADA
Case nTipo == DRIVE_CDROM ; cTipo := "DRIVE_CDROM" // LEITOR DE CD-ROOM
Case nTipo == DRIVE_RAMDISK ; cTipo := "DRIVE_RAMDISK" // PEN-DRIVER
EndCase
Return cTipo
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
HB_FUNC ( GETLOGICALDRIVES )
{
hb_retnl( (DWORD) GetLogicalDrives() );
}
HB_FUNC ( MY_GETDRIVETYPE )
{
hb_retni( (UINT) GetDriveType(hb_parc(1)) );
}
#pragma ENDDUMP
********************************************************************************
***********VEREFICA O NOME DO EXECUTAVEL E O CAMINHO DO MESMO*******************
*NomeExecutavel() // verefica o nome
*NomeExecutavel(.t.) // verefica o caminho
********************************************************************************
FUNCTION NOMEEXECUTAVEL(lPath)
LOCAL nPos, cRet
If Empty(lpath)
nPos:= RAT("\", hb_argv(0))
cRet:= substr(hb_argv(0), nPos+1)
else
cRet:= hb_argv(0)
endif
Return cRet