In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Información sobre una unidad de disco
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Información sobre una unidad de disco
Buenas compañeros, alguno sabe como obtener información acerca de una
unidad de disco como el espacio libre en la unidad, bytes de capacidad
(estas 2 cosas me suena de haberlas visto en un mensaje del foro pero no
lo encuentro), tipo de medio HD CD DVD USB, si se puede escribir, si es
Unidad de Red, etc...
Hasta ahora usaba esta función pero ahora las DLL32 no van.
Muchas gracias.
/*********************************************************** *****
DriveInfo(cUnidad)
Returns información acerca de la unidad pasada... P.E. 'C:'
Dentro de un array que contiene:
1. Nombre de la unidad, por ejemplo "C:"
2. Espacio Libre en la unidad
3. Total de bytes de capacidad
4. Tipo de Medio (Ver lista)
5. .T./.F. Si se puede escribir...
6. Si es Unidad de Red
Forma de Uso:
DRIVEINFO('C') / DRIVEINFO(3) (Donde "A:"=1)
Returns por ejemplo:
{'C:',45888998,343243244434,"Disco Rigido",.T.,.F.}
*/
Function DriveInfo(cDrive)
Local c:={SPACE(8),SPACE(8),SPACE(8)},I, nHandle:=0
Local ADEV:={'',0,0,0,.F.,.F.},NANT,cTEMP:=Space(104)
Local aTipo:={"No definido","No existe","Medio Removible","Disco
Rigido","Unidad de Red","CD-ROM","RAM Drive"}
DEFAULT cDrive:=CURDRIVE()
nNAT:=_DRIVEINF2(1)
IF VALTYPE(cDrive)='C'
cDrive=Upper(LEFT(Alltrim(cDrive),1))
ELSEIF VALTYPE(cDrive)='N'
cDrive=CHR(64+cDrive)
ELSE
cDrive=DiskName()
ENDIF
ADEV[1]:=cDrive+':'
cDrive+=':'
///ME FIJO SI EXISTE PRIMERO...segun tipo de medio...
ADEV[4]:=_DRIVEINF3(cDrive)
IF ADEV[4]>1
_DRIVEINF1(cDrive,C[1],C[2],C[3])
ADEV[2]:=IF(RIGHT(C[3],1)=CHR(255),0,BIN2N(C[3]))
ADEV[3]:=IF(RIGHT(C[2],1)=CHR(255),0,BIN2N(C[2]))
cArch:=cDrive+'X'+STR(SECONDS()*100,7)+'.í¾í½ú'
nHandle:=FCREATE(cArch,0)
nERROR:=FERROR()
IF nError=3 .OR. (NERROR=5 .AND. ADEV[2]>2000*1024*1024*1024)
adev[2]=0
adev[3]=0
ENDIF
ADEV[4]:=aTipo[ADEV[4]+1]
ADEV[5]:=(nERROR=0) .AND. FWRITE(nHandle,REPL('X',1024))>0
ADEV[6]:=If(_DRIVEINF3(cDrive)=4,.F.,.T.)
FCLOSE(nHandle)
FERASE(cArch)
ELSE
ADEV[2]:=0
ADEV[3]:=0
ADEV[4]:=aTipo[2]
ADEV[5]:=.F.
ADEV[6]:=.F.
ENDIF
_DRIVEINF2(nANT)
Return ADEV
DLL32 STATIC FUNCTION _DRIVEINF1( cDirectoryName AS LPSTR,
cFreeBytesToCaller AS LPSTR, cTotalBytes AS LPSTR, cTotalFreeBytes AS
LPSTR ) AS BOOL PASCAL ;
From "GetDiskFreeSpaceExA" Lib "kernel32.dll"
DLL32 STATIC Function _DRIVEINF2( nMode As LONG ) As LONG PASCAL ;
From "SetErrorMode" Lib "kernel32.dll"
DLL32 STATIC Function _DRIVEINF3( cDrive AS STRING ) AS LONG PASCAL ;
From "GetDriveTypeA" Lib "kernel32.dll"
unidad de disco como el espacio libre en la unidad, bytes de capacidad
(estas 2 cosas me suena de haberlas visto en un mensaje del foro pero no
lo encuentro), tipo de medio HD CD DVD USB, si se puede escribir, si es
Unidad de Red, etc...
Hasta ahora usaba esta función pero ahora las DLL32 no van.
Muchas gracias.
/*********************************************************** *****
DriveInfo(cUnidad)
Returns información acerca de la unidad pasada... P.E. 'C:'
Dentro de un array que contiene:
1. Nombre de la unidad, por ejemplo "C:"
2. Espacio Libre en la unidad
3. Total de bytes de capacidad
4. Tipo de Medio (Ver lista)
5. .T./.F. Si se puede escribir...
6. Si es Unidad de Red
Forma de Uso:
DRIVEINFO('C') / DRIVEINFO(3) (Donde "A:"=1)
Returns por ejemplo:
{'C:',45888998,343243244434,"Disco Rigido",.T.,.F.}
*/
Function DriveInfo(cDrive)
Local c:={SPACE(8),SPACE(8),SPACE(8)},I, nHandle:=0
Local ADEV:={'',0,0,0,.F.,.F.},NANT,cTEMP:=Space(104)
Local aTipo:={"No definido","No existe","Medio Removible","Disco
Rigido","Unidad de Red","CD-ROM","RAM Drive"}
DEFAULT cDrive:=CURDRIVE()
nNAT:=_DRIVEINF2(1)
IF VALTYPE(cDrive)='C'
cDrive=Upper(LEFT(Alltrim(cDrive),1))
ELSEIF VALTYPE(cDrive)='N'
cDrive=CHR(64+cDrive)
ELSE
cDrive=DiskName()
ENDIF
ADEV[1]:=cDrive+':'
cDrive+=':'
///ME FIJO SI EXISTE PRIMERO...segun tipo de medio...
ADEV[4]:=_DRIVEINF3(cDrive)
IF ADEV[4]>1
_DRIVEINF1(cDrive,C[1],C[2],C[3])
ADEV[2]:=IF(RIGHT(C[3],1)=CHR(255),0,BIN2N(C[3]))
ADEV[3]:=IF(RIGHT(C[2],1)=CHR(255),0,BIN2N(C[2]))
cArch:=cDrive+'X'+STR(SECONDS()*100,7)+'.í¾í½ú'
nHandle:=FCREATE(cArch,0)
nERROR:=FERROR()
IF nError=3 .OR. (NERROR=5 .AND. ADEV[2]>2000*1024*1024*1024)
adev[2]=0
adev[3]=0
ENDIF
ADEV[4]:=aTipo[ADEV[4]+1]
ADEV[5]:=(nERROR=0) .AND. FWRITE(nHandle,REPL('X',1024))>0
ADEV[6]:=If(_DRIVEINF3(cDrive)=4,.F.,.T.)
FCLOSE(nHandle)
FERASE(cArch)
ELSE
ADEV[2]:=0
ADEV[3]:=0
ADEV[4]:=aTipo[2]
ADEV[5]:=.F.
ADEV[6]:=.F.
ENDIF
_DRIVEINF2(nANT)
Return ADEV
DLL32 STATIC FUNCTION _DRIVEINF1( cDirectoryName AS LPSTR,
cFreeBytesToCaller AS LPSTR, cTotalBytes AS LPSTR, cTotalFreeBytes AS
LPSTR ) AS BOOL PASCAL ;
From "GetDiskFreeSpaceExA" Lib "kernel32.dll"
DLL32 STATIC Function _DRIVEINF2( nMode As LONG ) As LONG PASCAL ;
From "SetErrorMode" Lib "kernel32.dll"
DLL32 STATIC Function _DRIVEINF3( cDrive AS STRING ) AS LONG PASCAL ;
From "GetDriveTypeA" Lib "kernel32.dll"
Información sobre una unidad de disco
Saludos:
Creo que algo te puedo ayudar aunque en todo no, pero en lo del espacio
y capacidad del medio si.
Primero en un PRG pones esto:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( GETDISKFREESPACE )
{
DWORD lpSectorsPerCluster; // address of sectors per cluster
DWORD lpBytesPerSector; // address of bytes per sector
DWORD lpNumberOfFreeClusters; // address of number of free clusters
DWORD lpTotalNumberOfClusters; // address of total number of clusters
hb_retl( GetDiskFreeSpace( hb_parc( 1 ),
&lpSectorsPerCluster,
&lpBytesPerSector,
&lpNumberOfFreeClusters,
&lpTotalNumberOfClusters ) );
hb_stornl( lpSectorsPerCluster, 2 );
hb_stornl( lpBytesPerSector, 3 );
hb_stornl( lpNumberOfFreeClusters, 4 );
hb_stornl( lpTotalNumberOfClusters, 5 );
}
#pragma ENDDUMP
Estas funciones las acoplas a tu gusto, la conversión en KB, MB la
tienes que hacer tú para su presentación según desees, también con los
datos que aporta puedes calcular más cosas.
FUNCTION EspacioLibreEn(cDisco)
// Calcula los Bytes libres en el disco según la variable cDisco
LOCAL nSectoresPorCluster, nBytesPorSector, nClustersLibres,
nClustersTotal
IF GetDiskFreeSpace( cDisco, @nSectoresPorCluster,
@nBytesPorSector, @nClustersLibres, @nClustersTotal )
RETURN nSectoresPorCluster * nBytesPorSector * nClustersLibres
ENDIF
RETURN 0
FUNCTION CapacidadTotalEn(cDisco)
// Calcula la capacidad total del disco según cDisco
LOCAL nSectoresPorCluster, nBytesPorSector, nClustersLibres,
nClustersTotal
IF GetDiskFreeSpace( cDisco, @nSectoresPorCluster,
@nBytesPorSector, @nClustersLibres, @nClustersTotal )
RETURN nSectoresPorCluster * nBytesPorSector * nClustersTotal
ENDIF
RETURN 0
Espero te sirva.
José Ramón Castro.
Bingen Ugaldebere escribió:
> Buenas compañeros, alguno sabe como obtener información acerca de una
> unidad de disco como el espacio libre en la unidad, bytes de capacidad
> (estas 2 cosas me suena de haberlas visto en un mensaje del foro pero no
> lo encuentro), tipo de medio HD CD DVD USB, si se puede escribir, si es
> Unidad de Red, etc...
>
> Hasta ahora usaba esta función pero ahora las DLL32 no van.
>
> Muchas gracias.
>
>
> /*********************************************************** *****
> DriveInfo(cUnidad)
> Returns información acerca de la unidad pasada... P.E. 'C:'
> Dentro de un array que contiene:
> 1. Nombre de la unidad, por ejemplo "C:"
> 2. Espacio Libre en la unidad
> 3. Total de bytes de capacidad
> 4. Tipo de Medio (Ver lista)
> 5. .T./.F. Si se puede escribir...
> 6. Si es Unidad de Red
>
> Forma de Uso:
> DRIVEINFO('C') / DRIVEINFO(3) (Donde "A:"=1)
> Returns por ejemplo:
> {'C:',45888998,343243244434,"Disco Rigido",.T.,.F.}
> */
>
> Function DriveInfo(cDrive)
> Local c:={SPACE(8),SPACE(8),SPACE(8)},I, nHandle:=0
> Local ADEV:={'',0,0,0,.F.,.F.},NANT,cTEMP:=Space(104)
> Local aTipo:={"No definido","No existe","Medio Removible","Disco
> Rigido","Unidad de Red","CD-ROM","RAM Drive"}
>
> DEFAULT cDrive:=CURDRIVE()
>
> nNAT:=_DRIVEINF2(1)
> IF VALTYPE(cDrive)='C'
> cDrive=Upper(LEFT(Alltrim(cDrive),1))
> ELSEIF VALTYPE(cDrive)='N'
> cDrive=CHR(64+cDrive)
> ELSE
> cDrive=DiskName()
> ENDIF
> ADEV[1]:=cDrive+':'
> cDrive+=':'
>
> ///ME FIJO SI EXISTE PRIMERO...segun tipo de medio...
> ADEV[4]:=_DRIVEINF3(cDrive)
> IF ADEV[4]>1
> _DRIVEINF1(cDrive,C[1],C[2],C[3])
> ADEV[2]:=IF(RIGHT(C[3],1)=CHR(255),0,BIN2N(C[3]))
> ADEV[3]:=IF(RIGHT(C[2],1)=CHR(255),0,BIN2N(C[2]))
> cArch:=cDrive+'X'+STR(SECONDS()*100,7)+'.í¾í½ú'
> nHandle:=FCREATE(cArch,0)
> nERROR:=FERROR()
> IF nError=3 .OR. (NERROR=5 .AND. ADEV[2]>2000*1024*1024*1024)
> adev[2]=0
> adev[3]=0
> ENDIF
> ADEV[4]:=aTipo[ADEV[4]+1]
> ADEV[5]:=(nERROR=0) .AND. FWRITE(nHandle,REPL('X',1024))>0
> ADEV[6]:=If(_DRIVEINF3(cDrive)=4,.F.,.T.)
> FCLOSE(nHandle)
> FERASE(cArch)
> ELSE
> ADEV[2]:=0
> ADEV[3]:=0
> ADEV[4]:=aTipo[2]
> ADEV[5]:=.F.
> ADEV[6]:=.F.
> ENDIF
> _DRIVEINF2(nANT)
>
> Return ADEV
>
>
> DLL32 STATIC FUNCTION _DRIVEINF1( cDirectoryName AS LPSTR,
> cFreeBytesToCaller AS LPSTR, cTotalBytes AS LPSTR, cTotalFreeBytes AS
> LPSTR ) AS BOOL PASCAL ;
> From "GetDiskFreeSpaceExA" Lib "kernel32.dll"
> DLL32 STATIC Function _DRIVEINF2( nMode As LONG ) As LONG PASCAL ;
> From "SetErrorMode" Lib "kernel32.dll"
> DLL32 STATIC Function _DRIVEINF3( cDrive AS STRING ) AS LONG PASCAL ;
> From "GetDriveTypeA" Lib "kernel32.dll"
Creo que algo te puedo ayudar aunque en todo no, pero en lo del espacio
y capacidad del medio si.
Primero en un PRG pones esto:
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( GETDISKFREESPACE )
{
DWORD lpSectorsPerCluster; // address of sectors per cluster
DWORD lpBytesPerSector; // address of bytes per sector
DWORD lpNumberOfFreeClusters; // address of number of free clusters
DWORD lpTotalNumberOfClusters; // address of total number of clusters
hb_retl( GetDiskFreeSpace( hb_parc( 1 ),
&lpSectorsPerCluster,
&lpBytesPerSector,
&lpNumberOfFreeClusters,
&lpTotalNumberOfClusters ) );
hb_stornl( lpSectorsPerCluster, 2 );
hb_stornl( lpBytesPerSector, 3 );
hb_stornl( lpNumberOfFreeClusters, 4 );
hb_stornl( lpTotalNumberOfClusters, 5 );
}
#pragma ENDDUMP
Estas funciones las acoplas a tu gusto, la conversión en KB, MB la
tienes que hacer tú para su presentación según desees, también con los
datos que aporta puedes calcular más cosas.
FUNCTION EspacioLibreEn(cDisco)
// Calcula los Bytes libres en el disco según la variable cDisco
LOCAL nSectoresPorCluster, nBytesPorSector, nClustersLibres,
nClustersTotal
IF GetDiskFreeSpace( cDisco, @nSectoresPorCluster,
@nBytesPorSector, @nClustersLibres, @nClustersTotal )
RETURN nSectoresPorCluster * nBytesPorSector * nClustersLibres
ENDIF
RETURN 0
FUNCTION CapacidadTotalEn(cDisco)
// Calcula la capacidad total del disco según cDisco
LOCAL nSectoresPorCluster, nBytesPorSector, nClustersLibres,
nClustersTotal
IF GetDiskFreeSpace( cDisco, @nSectoresPorCluster,
@nBytesPorSector, @nClustersLibres, @nClustersTotal )
RETURN nSectoresPorCluster * nBytesPorSector * nClustersTotal
ENDIF
RETURN 0
Espero te sirva.
José Ramón Castro.
Bingen Ugaldebere escribió:
> Buenas compañeros, alguno sabe como obtener información acerca de una
> unidad de disco como el espacio libre en la unidad, bytes de capacidad
> (estas 2 cosas me suena de haberlas visto en un mensaje del foro pero no
> lo encuentro), tipo de medio HD CD DVD USB, si se puede escribir, si es
> Unidad de Red, etc...
>
> Hasta ahora usaba esta función pero ahora las DLL32 no van.
>
> Muchas gracias.
>
>
> /*********************************************************** *****
> DriveInfo(cUnidad)
> Returns información acerca de la unidad pasada... P.E. 'C:'
> Dentro de un array que contiene:
> 1. Nombre de la unidad, por ejemplo "C:"
> 2. Espacio Libre en la unidad
> 3. Total de bytes de capacidad
> 4. Tipo de Medio (Ver lista)
> 5. .T./.F. Si se puede escribir...
> 6. Si es Unidad de Red
>
> Forma de Uso:
> DRIVEINFO('C') / DRIVEINFO(3) (Donde "A:"=1)
> Returns por ejemplo:
> {'C:',45888998,343243244434,"Disco Rigido",.T.,.F.}
> */
>
> Function DriveInfo(cDrive)
> Local c:={SPACE(8),SPACE(8),SPACE(8)},I, nHandle:=0
> Local ADEV:={'',0,0,0,.F.,.F.},NANT,cTEMP:=Space(104)
> Local aTipo:={"No definido","No existe","Medio Removible","Disco
> Rigido","Unidad de Red","CD-ROM","RAM Drive"}
>
> DEFAULT cDrive:=CURDRIVE()
>
> nNAT:=_DRIVEINF2(1)
> IF VALTYPE(cDrive)='C'
> cDrive=Upper(LEFT(Alltrim(cDrive),1))
> ELSEIF VALTYPE(cDrive)='N'
> cDrive=CHR(64+cDrive)
> ELSE
> cDrive=DiskName()
> ENDIF
> ADEV[1]:=cDrive+':'
> cDrive+=':'
>
> ///ME FIJO SI EXISTE PRIMERO...segun tipo de medio...
> ADEV[4]:=_DRIVEINF3(cDrive)
> IF ADEV[4]>1
> _DRIVEINF1(cDrive,C[1],C[2],C[3])
> ADEV[2]:=IF(RIGHT(C[3],1)=CHR(255),0,BIN2N(C[3]))
> ADEV[3]:=IF(RIGHT(C[2],1)=CHR(255),0,BIN2N(C[2]))
> cArch:=cDrive+'X'+STR(SECONDS()*100,7)+'.í¾í½ú'
> nHandle:=FCREATE(cArch,0)
> nERROR:=FERROR()
> IF nError=3 .OR. (NERROR=5 .AND. ADEV[2]>2000*1024*1024*1024)
> adev[2]=0
> adev[3]=0
> ENDIF
> ADEV[4]:=aTipo[ADEV[4]+1]
> ADEV[5]:=(nERROR=0) .AND. FWRITE(nHandle,REPL('X',1024))>0
> ADEV[6]:=If(_DRIVEINF3(cDrive)=4,.F.,.T.)
> FCLOSE(nHandle)
> FERASE(cArch)
> ELSE
> ADEV[2]:=0
> ADEV[3]:=0
> ADEV[4]:=aTipo[2]
> ADEV[5]:=.F.
> ADEV[6]:=.F.
> ENDIF
> _DRIVEINF2(nANT)
>
> Return ADEV
>
>
> DLL32 STATIC FUNCTION _DRIVEINF1( cDirectoryName AS LPSTR,
> cFreeBytesToCaller AS LPSTR, cTotalBytes AS LPSTR, cTotalFreeBytes AS
> LPSTR ) AS BOOL PASCAL ;
> From "GetDiskFreeSpaceExA" Lib "kernel32.dll"
> DLL32 STATIC Function _DRIVEINF2( nMode As LONG ) As LONG PASCAL ;
> From "SetErrorMode" Lib "kernel32.dll"
> DLL32 STATIC Function _DRIVEINF3( cDrive AS STRING ) AS LONG PASCAL ;
> From "GetDriveTypeA" Lib "kernel32.dll"
José Ramón Castro.
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Información sobre una unidad de disco
Muchas gracias Ramón este Inline C es lo que vi en el foro alguna vez y
ahora no era capaz de encontrar.
Para lo otro se que hay otra función del API llamada GetDriveType e
incluso hay ejemplos en C pero no acabo de ver muy claro como montarme
el Inline C cada vez que lo intento es un fiasco.
Alguien que domine este sistema/técnica podría explicar para un profano
en C como se hace un Inline C partiendo de una función C o mejor me voy
apuntando a un curso de C y luego pregunto de nuevo?
Gracias.
ahora no era capaz de encontrar.
Para lo otro se que hay otra función del API llamada GetDriveType e
incluso hay ejemplos en C pero no acabo de ver muy claro como montarme
el Inline C cada vez que lo intento es un fiasco.
Alguien que domine este sistema/técnica podría explicar para un profano
en C como se hace un Inline C partiendo de una función C o mejor me voy
apuntando a un curso de C y luego pregunto de nuevo?
Gracias.
Información sobre una unidad de disco
Bingen,
> Muchas gracias Ramón este Inline C es lo que vi en el foro alguna vez y
> ahora no era capaz de encontrar.
>
> Para lo otro se que hay otra función del API llamada GetDriveType e
> incluso hay ejemplos en C pero no acabo de ver muy claro como montarme el
> Inline C cada vez que lo intento es un fiasco.
>
> Alguien que domine este sistema/técnica podría explicar para un profano en
> C como se hace un Inline C partiendo de una función C o mejor me voy
> apuntando a un curso de C y luego pregunto de nuevo?
En general, el esqueleto para hacer funciones C dentro de un .prg es el
siguiente:
//---------------------------------------------------------- --------
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
XA_FUNC( <nombre_de_la_funcion_en_mayusculas> )
{
}
#pragma ENDDUMP
//---------------------------------------------------------- --------
Y dentro de la función tendrás que usar el sistema extendido para recibir
parámetros (hb_parXX()) y para retornar valores (hb_retXX()).
--
Un saludo,
José F. Giménez
http://www.xailer.com
> Muchas gracias Ramón este Inline C es lo que vi en el foro alguna vez y
> ahora no era capaz de encontrar.
>
> Para lo otro se que hay otra función del API llamada GetDriveType e
> incluso hay ejemplos en C pero no acabo de ver muy claro como montarme el
> Inline C cada vez que lo intento es un fiasco.
>
> Alguien que domine este sistema/técnica podría explicar para un profano en
> C como se hace un Inline C partiendo de una función C o mejor me voy
> apuntando a un curso de C y luego pregunto de nuevo?
En general, el esqueleto para hacer funciones C dentro de un .prg es el
siguiente:
//---------------------------------------------------------- --------
#pragma BEGINDUMP
#include "windows.h"
#include "xailer.h"
XA_FUNC( <nombre_de_la_funcion_en_mayusculas> )
{
}
#pragma ENDDUMP
//---------------------------------------------------------- --------
Y dentro de la función tendrás que usar el sistema extendido para recibir
parámetros (hb_parXX()) y para retornar valores (hb_retXX()).
--
Un saludo,
José F. Giménez
http://www.xailer.com
Información sobre una unidad de disco
Bingen, José Ramón,
también se puede usar la función nativa de Harbour HB_DiskSpace().
Adjunto un ejemplo que está en el CVS.
Saludos,
José Lalín
--
Información sobre una unidad de disco
Bingen,
he hecho un par de cambios a un componente que hice meses atrás.
Pruébalo y dime si te sirve.
Saludos,
José Lalín
--
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Información sobre una unidad de disco
Después de leer un rato el manual de xHb y las API de Windows he
conseguido esto y funciona, jeje.
Function DriveType(cDrive)
Local aType:={"No definido","No existe","Medio Removible","Disco
Rigido","Unidad de Red","CD-ROM","RAM Drive"}
Default cDrive To "C:"
Return aType[GetDriveType(Left(cDrive,1)+":")+1]
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( GETDRIVETYPE )
{
int nType ; // address of sectors per cluster
hb_retnl( GetDriveType( hb_parc( 1 ) ) );
}
#pragma ENDDUMP
conseguido esto y funciona, jeje.
Function DriveType(cDrive)
Local aType:={"No definido","No existe","Medio Removible","Disco
Rigido","Unidad de Red","CD-ROM","RAM Drive"}
Default cDrive To "C:"
Return aType[GetDriveType(Left(cDrive,1)+":")+1]
#pragma BEGINDUMP
#include <windows.h>
#include <xailer.h>
XA_FUNC( GETDRIVETYPE )
{
int nType ; // address of sectors per cluster
hb_retnl( GetDriveType( hb_parc( 1 ) ) );
}
#pragma ENDDUMP
Información sobre una unidad de disco
Bingen, muchas gracias por el aporte...
Esta línea te debería dar al menos una warning, ya que declaras una
variable que luego no usas...
int nType ; // address of sectors per cluster
Saludos
Bingen Ugaldebere escribió:
> Después de leer un rato el manual de xHb y las API de Windows he
> conseguido esto y funciona, jeje.
>
> Function DriveType(cDrive)
> Local aType:={"No definido","No existe","Medio Removible","Disco
> Rigido","Unidad de Red","CD-ROM","RAM Drive"}
>
> Default cDrive To "C:"
>
> Return aType[GetDriveType(Left(cDrive,1)+":")+1]
>
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> XA_FUNC( GETDRIVETYPE )
> {
> int nType ; // address of sectors per cluster
>
> hb_retnl( GetDriveType( hb_parc( 1 ) ) );
>
> }
>
> #pragma ENDDUMP
Esta línea te debería dar al menos una warning, ya que declaras una
variable que luego no usas...
int nType ; // address of sectors per cluster
Saludos
Bingen Ugaldebere escribió:
> Después de leer un rato el manual de xHb y las API de Windows he
> conseguido esto y funciona, jeje.
>
> Function DriveType(cDrive)
> Local aType:={"No definido","No existe","Medio Removible","Disco
> Rigido","Unidad de Red","CD-ROM","RAM Drive"}
>
> Default cDrive To "C:"
>
> Return aType[GetDriveType(Left(cDrive,1)+":")+1]
>
>
> #pragma BEGINDUMP
> #include <windows.h>
> #include <xailer.h>
>
> XA_FUNC( GETDRIVETYPE )
> {
> int nType ; // address of sectors per cluster
>
> hb_retnl( GetDriveType( hb_parc( 1 ) ) );
>
> }
>
> #pragma ENDDUMP
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Información sobre una unidad de disco
Cierto es quedo de pruebas anteriores.
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Información sobre una unidad de disco
Como siempre muy agradecido pero debo de cometer alguna torpeza ya que
he añadido el OBJ al proyecto, incluido la clase en mi PRG y al compilar
me da:
Compilando Initial.prg...
C:XailerxHarbourBinharbour.exe Initial.prg /n /w1
/iC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude
/oC:XailerProgramasInitialObjInitial.c
xHarbour Compiler build 0.99.61 (SimpLex)
Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'Initial.prg'...
Lines 2319, Functions/Procedures 39
Generating C source output to 'C:XailerProgramasInitialObjInitial.c'...
Done.
C:XailerBCC55Binbcc32 -tWM -c -v- -O2 -X -DHB_API_MACROS
-DHB_STACK_MACROS -D__XHARBOUR__
-IC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude;C:XailerBCC55Include
-oC:XailerProgramasInitialObjInitial.obj Initial.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Initial.c:
Compilando Messages.prg...
C:XailerxHarbourBinharbour.exe Messages.prg /n /w1
/iC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude
/oC:XailerProgramasInitialObjMessages.c
xHarbour Compiler build 0.99.61 (SimpLex)
Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'Messages.prg'...
Lines 975, Functions/Procedures 20
Generating C source output to
'C:XailerProgramasInitialObjMessages.c'...
Done.
C:XailerBCC55Binbcc32 -tWM -c -v- -O2 -X -DHB_API_MACROS
-DHB_STACK_MACROS -D__XHARBOUR__
-IC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude;C:XailerBCC55Include
-oC:XailerProgramasInitialObjMessages.obj Messages.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Messages.c:
Compilando Initial.rc...
C:XailerBCC55Binbrc32 -r
-foC:XailerProgramasInitialObjInitial.res Initial.rc
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
Enlazando Initial.exe...
C:XailerBCC55Binilink32 -Gn -Tpe -x -aa @make.tmp
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_TDRIVEINFO_CREATE' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASNAMEDSTREAMS'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISREADONLY' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASOBJECTSID' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASREPARSEPOINTS'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASSPARSEFILES'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASDISKQUOTAS' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCASEPRESERVED'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCASESENSITIVE'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASCOMPRESSION'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASENCRYPTION' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASUNICODEONDISK'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCOMPRESSED' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISUNKNOWN' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISNOTVALID' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISREMOVABLE' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISFIXED' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISREMOTE' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCDROM' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISRAMDISK' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Warning: Public symbol '_HB_FUN_TDRIVEINFO' defined in both module
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ and
C:XAILERPROGRAMASINITIALOBJDRIVEINFO.OBJ
1 Warnings, 20 Errors
he añadido el OBJ al proyecto, incluido la clase en mi PRG y al compilar
me da:
Compilando Initial.prg...
C:XailerxHarbourBinharbour.exe Initial.prg /n /w1
/iC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude
/oC:XailerProgramasInitialObjInitial.c
xHarbour Compiler build 0.99.61 (SimpLex)
Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'Initial.prg'...
Lines 2319, Functions/Procedures 39
Generating C source output to 'C:XailerProgramasInitialObjInitial.c'...
Done.
C:XailerBCC55Binbcc32 -tWM -c -v- -O2 -X -DHB_API_MACROS
-DHB_STACK_MACROS -D__XHARBOUR__
-IC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude;C:XailerBCC55Include
-oC:XailerProgramasInitialObjInitial.obj Initial.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Initial.c:
Compilando Messages.prg...
C:XailerxHarbourBinharbour.exe Messages.prg /n /w1
/iC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude
/oC:XailerProgramasInitialObjMessages.c
xHarbour Compiler build 0.99.61 (SimpLex)
Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'Messages.prg'...
Lines 975, Functions/Procedures 20
Generating C source output to
'C:XailerProgramasInitialObjMessages.c'...
Done.
C:XailerBCC55Binbcc32 -tWM -c -v- -O2 -X -DHB_API_MACROS
-DHB_STACK_MACROS -D__XHARBOUR__
-IC:XailerProgramasInitialInclude;C:XailerInclude;C:X ailerxHarbourInclude;C:XailerBCC55Include
-oC:XailerProgramasInitialObjMessages.obj Messages.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Messages.c:
Compilando Initial.rc...
C:XailerBCC55Binbrc32 -r
-foC:XailerProgramasInitialObjInitial.res Initial.rc
Borland Resource Compiler Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation. All rights reserved.
Enlazando Initial.exe...
C:XailerBCC55Binilink32 -Gn -Tpe -x -aa @make.tmp
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external '_HB_FUN_TDRIVEINFO_CREATE' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASNAMEDSTREAMS'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISREADONLY' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASOBJECTSID' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASREPARSEPOINTS'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASSPARSEFILES'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASDISKQUOTAS' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCASEPRESERVED'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCASESENSITIVE'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASCOMPRESSION'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASENCRYPTION' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_HASUNICODEONDISK'
referenced from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCOMPRESSED' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISUNKNOWN' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISNOTVALID' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISREMOVABLE' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISFIXED' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISREMOTE' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISCDROM' referenced from
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Error: Unresolved external '_HB_FUN_TDRIVEINFO_ISRAMDISK' referenced
from C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ
Warning: Public symbol '_HB_FUN_TDRIVEINFO' defined in both module
C:XAILERPROGRAMASINITIALOBJINITIAL.OBJ and
C:XAILERPROGRAMASINITIALOBJDRIVEINFO.OBJ
1 Warnings, 20 Errors
Información sobre una unidad de disco
Bingen,
> Como siempre muy agradecido pero debo de cometer alguna torpeza ya que
> he añadido el OBJ al proyecto, incluido la clase en mi PRG y al compilar
> me da:
la clase la puse sólo para que vieras las propiedades y métodos que
puedes utilizar, nada más.
Quítala del proyecto y deja sólo el OBJ.
Saludos,
José Lalín
> Como siempre muy agradecido pero debo de cometer alguna torpeza ya que
> he añadido el OBJ al proyecto, incluido la clase en mi PRG y al compilar
> me da:
la clase la puse sólo para que vieras las propiedades y métodos que
puedes utilizar, nada más.
Quítala del proyecto y deja sólo el OBJ.
Saludos,
José Lalín
Información sobre una unidad de disco
Bingen,
> Después de leer un rato el manual de xHb y las API de Windows he
> conseguido esto y funciona, jeje.
Si quieres usar tu función en la clase que he puesto antes:
CLASS TDriveInfo FROM XDriveInfo
PUBLIC:
METHOD DriveType( cDrive )
ENDCLASS
METHOD DriveType( cDrive ) CLASS TDriveInfo
Local aType:={"No definido","No existe","Medio Removible","Disco
Rigido","Unidad de Red","CD-ROM","RAM Drive"}
Default cDrive To "C:"
Return aType[GetDriveType(Left(cDrive,1)+":")+1]
Y ya tienes la misma funcionalidad que cuando usabas la vieja función.
Saludos,
José Lalín
> Después de leer un rato el manual de xHb y las API de Windows he
> conseguido esto y funciona, jeje.
Si quieres usar tu función en la clase que he puesto antes:
CLASS TDriveInfo FROM XDriveInfo
PUBLIC:
METHOD DriveType( cDrive )
ENDCLASS
METHOD DriveType( cDrive ) CLASS TDriveInfo
Local aType:={"No definido","No existe","Medio Removible","Disco
Rigido","Unidad de Red","CD-ROM","RAM Drive"}
Default cDrive To "C:"
Return aType[GetDriveType(Left(cDrive,1)+":")+1]
Y ya tienes la misma funcionalidad que cuando usabas la vieja función.
Saludos,
José Lalín
-
- Mensajes: 1310
- Registrado: Mié Sep 26, 2007 7:12 pm
Información sobre una unidad de disco
Muy bien muchas gracias, me di cuenta anoche cuando ya lo había dejado.
José Lalín escribió:
>
> Bingen,
>
>> Como siempre muy agradecido pero debo de cometer alguna torpeza ya que
>> he añadido el OBJ al proyecto, incluido la clase en mi PRG y al
>> compilar me da:
>
> la clase la puse sólo para que vieras las propiedades y métodos que
> puedes utilizar, nada más.
>
> Quítala del proyecto y deja sólo el OBJ.
>
> Saludos,
> José Lalín
José Lalín escribió:
>
> Bingen,
>
>> Como siempre muy agradecido pero debo de cometer alguna torpeza ya que
>> he añadido el OBJ al proyecto, incluido la clase en mi PRG y al
>> compilar me da:
>
> la clase la puse sólo para que vieras las propiedades y métodos que
> puedes utilizar, nada más.
>
> Quítala del proyecto y deja sólo el OBJ.
>
> Saludos,
> José Lalín