Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-02-2013
Avatar de darkbits
darkbits darkbits is offline
Miembro
 
Registrado: may 2006
Posts: 280
Poder: 18
darkbits Va por buen camino
como hago que solo funcione en Pendriver

un saludo

tengo una aplicacion que esta funcionando bien en PC

pero me piden que solo funcione en pendriveres
ahi me agarraron en curva...
consulto a ustedes expertos como se hace esto ?
solo tengo una idea de colocar un IF es pendriver then si es verdad que continue de lo contrario lo cierro la aplicacion.
__________________
Gracias por su coloración club delphi

darkbits ;)
Responder Con Cita
  #2  
Antiguo 08-02-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Puede que te sirva la función GetDriveType, de la API de Windows. Que como dice la ayuda (busca el archivo Win32.hlp):
Cita:
The GetDriveType function determines whether a disk drive is a removable, fixed, CD-ROM, RAM disk, or network drive.

UINT GetDriveType(
LPCTSTR lpRootPathName // address of root path
);


Parameters

lpRootPathName

Points to a null-terminated string that specifies the root directory of the disk to return information about. If lpRootPathName is NULL, the function uses the root of the current directory.

Return Values

The return value specifies the type of drive. It can be one of the following values:

Value Meaning
0 The drive type cannot be determined.
1 The root directory does not exist.
DRIVE_REMOVABLE The drive can be removed from the drive.
DRIVE_FIXED The disk cannot be removed from the drive.
DRIVE_REMOTE The drive is a remote (network) drive.
DRIVE_CDROM The drive is a CD-ROM drive.
DRIVE_RAMDISK The drive is a RAM disk.
Espero te sirva, saludos.
Responder Con Cita
  #3  
Antiguo 09-02-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Como Al, opino que la función GetDriveType te servirá para el propósito.

Por ejemplo podrías hacer:
Código Delphi [-]
program Tu_proyecto;

uses
  Windows, ...
 
begin
  if GetDriveType(PChar(Application.ExeName[1]+':\')) = DRIVE_REMOVABLE then
  begin
    Application.Initialize;
    Application.CreateForm(TMainForm, MainForm);
    //...
    Application.Run;
  end
  else
    MessageBox(Application.Handle,
      'Esta aplicación sólo puede ejecutarse en medios removibles',
      'ERROR', MB_ICONERROR + MB_OK);
end.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 11-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.267
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
A parte de las opciones comentadas, te puedo redirigir a la página de las librerías GLibWMI, que incluyen un componente para DiskDriveInfo para acceder a las propiedades de los discos.

En este caso, puedes obtener algunas propiedades que te pueden ayudar:



Si no deseas instalar toda la librería de componentes, otra opción es utilizar WMI (que es lo que utiliza esta librerías al fin y al cabo) para obtener la misma información.
En concreto para este caso se usa la clase Win32_DiskDrive. Si miras esta página podrás ver las propiedades que te devuelve esta clase.

Si buscas ejemplos sobre esta clase podrás encontrar alguno son problemas (por ejemplo, este que acabo de encontrar en el FTP).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 11-02-2013
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Debes capturar el número de serie de fabrica. El cual no se borra aúnque se formatee.

En cuanto tenga acceso a mi equipo te doy el código necesario.
Responder Con Cita
  #6  
Antiguo 11-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.267
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por darkbits Ver Mensaje
... tengo una aplicacion que esta funcionando bien en PC
pero me piden que solo funcione en pendriveres
...

Cita:
Empezado por MAXIUM Ver Mensaje
...Debes capturar el número de serie de fabrica. El cual no se borra aúnque se formatee.
No acabo de ver qué tiene que ver la pregunta con la respuesta.
Este usuario necesita que la aplicación funcione en los dispositivos de tipo "PENDRIVE", entiendo que en general, cualquier dispositivo de almacenamiento conectado por USB.

¿Porqué hay que comprobar el número de serie del disco?
Tal vez no has leído bien la pregunta...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 11-02-2013
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Tienes razón Neftali. Era solo para que no copiasen la aplicación de un pendrive a otro.

Ok, olvida mi código
Responder Con Cita
  #8  
Antiguo 15-02-2013
Avatar de darkbits
darkbits darkbits is offline
Miembro
 
Registrado: may 2006
Posts: 280
Poder: 18
darkbits Va por buen camino
Gracias!
si me llego a funcionar la opcion de ecfisa


MAXIUM me intereso lo que comentaste de como sacar el ID unico del pendriver por mas que se llege a formatear please si podes compartirme el codigo
__________________
Gracias por su coloración club delphi

darkbits ;)
Responder Con Cita
  #9  
Antiguo 15-02-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.267
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por MAXIUM Ver Mensaje
Era solo para que no copiasen la aplicación de un pendrive a otro.
Al final si que vas a acertar con el comentario...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 15-02-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
darkbits,

Cita:
Empezado por darkbits
...como sacar el ID unico del pendriver por mas que se llege a formatear...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl, StrUtils, ActiveX, ComObj, XPMan;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function VarStrNull(const V:OleVariant):string; //avoid issues with null variants
begin
   Result:='';
   if not VarIsNull(V) then
      Result:=VarToStr(V);
end;

// Obtiene el Número de Serial un Drive USB por medio de la propiedad PnPDeviceID de Windows Management Instrumentation (WMI)
function GetUsbDriveSerial(const Drive : AnsiChar) : string;
var
   FSWbemLocator : OleVariant;
   objWMIService : OLEVariant;
   colDiskDrives : OLEVariant;
   colLogicalDisks : OLEVariant;
   colPartitions : OLEVariant;
   objDiskDrive : OLEVariant;
   objPartition : OLEVariant;
   objLogicalDisk : OLEVariant;
   oEnumDiskDrive : IEnumvariant;
   oEnumPartition : IEnumvariant;
   oEnumLogical : IEnumvariant;
   iValue : LongWord;
   DeviceID : string;

begin;

   Result:='';

   FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
   objWMIService := FSWbemLocator.ConnectServer('.', 'root\CIMV2', '', '');
   colDiskDrives := objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive WHERE InterfaceType="USB"','WQL',0);
   oEnumDiskDrive:= IUnknown(colDiskDrives._NewEnum) as IEnumVariant;

   while oEnumDiskDrive.Next(1, objDiskDrive, iValue) = 0 do
   begin

      //Escape the `\` chars in the DeviceID value because the '\' is a reserved character in WMI.
      DeviceID := StringReplace(VarStrNull(objDiskDrive.DeviceID),'\','\\',[rfReplaceAll]);

      //link the Win32_DiskDrive class with the Win32_DiskDriveToDiskPartition class
      colPartitions := objWMIService.ExecQuery(Format('ASSOCIATORS OF {Win32_DiskDrive.DeviceID="%s"} WHERE AssocClass = Win32_DiskDriveToDiskPartition',[DeviceID]));

      oEnumPartition := IUnknown(colPartitions._NewEnum) as IEnumVariant;

      while oEnumPartition.Next(1, objPartition, iValue) = 0 do
      begin

         //link the Win32_DiskPartition class with theWin32_LogicalDiskToPartition class.
         colLogicalDisks := objWMIService.ExecQuery('ASSOCIATORS OF {Win32_DiskPartition.DeviceID="'+VarStrNull(objPartition.DeviceID)+'"} WHERE AssocClass = Win32_LogicalDiskToPartition');

         oEnumLogical := IUnknown(colLogicalDisks._NewEnum) as IEnumVariant;

         while oEnumLogical.Next(1, objLogicalDisk, iValue) = 0 do
         begin

            if SameText(VarStrNull(objLogicalDisk.DeviceID),Drive+':')  then //compare the device id
            begin

               Result := VarStrNull(objDiskDrive.PnPDeviceID);

               if AnsiStartsText('USBSTOR', Result) then
               begin
                  iValue := LastDelimiter('\', Result);
                  Result := Copy(Result, iValue+1, Length(Result));
               end;

               objLogicalDisk:=Unassigned;

               Exit;

            end;

            objLogicalDisk:=Unassigned;

         end;

         objPartition:=Unassigned;

      end;

      objDiskDrive:=Unassigned;

   end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
   Drive : Char;
begin
   ListBox1.Clear;
   for Drive := 'A'  to 'Z' do
      if GetDriveType(PChar(Drive + ':\')) = DRIVE_REMOVABLE then
         ListBox1.Items.Add(UpperCase(Drive));
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  Drive : String;
begin
   Drive := ListBox1.Items.Strings[ListBox1.ItemIndex];
   ShowMessage('USB Serial Number : ' + GetUsbDriveSerial(Drive[1]));
end;

end.
El ejemplo anterior lista las unidades removibles del sistema en un control TListBox y muestra el serial de cada una de ellas al ser seleccionadas por medio del evento OnClick.

El código fuente del ejemplo esta disponible en el link : http://terawiki.clubdelphi.com/Delph...ial+Number.rar

El ejemplo mostrado esta basado en el código encontrado en el link : http://stackoverflow.com/questions/4...sb-flash-drive

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 15-02-2013 a las 19:11:27.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
imagen que funcione como boton onystam Gráficos 8 03-11-2008 17:42:14
Delphi4PHP Cómo hago que me funcione el TabOrder maximo_nashir PHP 4 31-08-2007 05:47:32
Que versión de php necesito para que funcione en mi server lo que hago el Delphi4php cooper PHP 3 01-05-2007 04:21:46
como hago que un edit solo entren numeros lazarous Varios 1 24-02-2005 14:56:22
Boton que funcione como Backspace Julio César Varios 1 15-05-2003 21:15:06


La franja horaria es GMT +2. Ahora son las 21:41:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi