Hola Alan_B.
Primero analicemos la funcion USBOpenDriver:
Código Delphi
[-]
Function USBOpenDriver:boolean;
begin
USBPORT := CreateFile('\\?\USB1', GENERIC_WRITE or GENERIC_READ,
FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
USBOpenDriver:= USBPORT <> INVALID_HANDLE_VALUE;
if USBPORT = INVALID_HANDLE_VALUE then result:=false
else
result:=true;
end;
- Llama a la función CreateFile cuyos detalles podes mirar aquí:CrateFile function. El resultado queda en la variable USBPORT de tipo THandle.
- Asigna a la variable USBPORT el valor obtenido de comparar el resultado de CreateFile con INVALID_HANDLE_VALUE. Esta línea la veo redundante y prescindible(excepto para guardar compatibilidad con Pascal).
- Nuevamente evalua y asigna el resultado.
Particularmente y sin conocer sobre celulares, la hubiera escrito así:
Código Delphi
[-]
function USBOpenDriver(PathToPhone: string):boolean;
begin
USBPORT := CreateFile(PChar(PathToPhone), GENERIC_WRITE or GENERIC_READ,
FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
Result := USBPORT <> INVALID_HANDLE_VALUE
end;
La llamada correcta a la función es el que te sugirió
cloayza, por ejemplo:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
begin
if not USBOpenDriver then raise Exception.Create('No se encuentra el celular');
end;
Supongo que si la función te muestra el error, será debido a que no encuentra la ruta, pero hasta allí llegan mis conocimientos sobre rutas a celulares...
También podés reescribir la función USBOpenDriver para que admita diferentes rutas
Código Delphi
[-]
function USBOpenDriver(PathToPhone: string):boolean;
begin
USBPORT := CreateFile(PChar(PathToPhone), GENERIC_WRITE or GENERIC_READ,
FILE_SHARE_WRITE or FILE_SHARE_READ, nil, OPEN_EXISTING,
FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
Result := USBPORT <> INVALID_HANDLE_VALUE
end;
y luego recompilar la unidad...
Saludos.