La rutina que te anexo sirve para determinar si un fichero está en uso exclusivo. Por las características del sistema de ficheros de windows no estoy seguro de que pueda saberse si un programa tiene abierto un fichero en modo no exclusivo o sólo lectura.
{IsFileInUse
--------------------------- CREACION/MODIFICACION ------------------------------
Creación: dd/mm/aaaa Por: http://delphi.about.com/
--------------------------------- PARAMETROS -----------------------------------
Entrada:
El nombre de un fichero
Salida:
True si el fichero está bloqueado para acceso exclusivo, por ejemplo:
- Un fichero grande cuando está siendo grabado, copiado o movido.
False si no está bloqueado o no existe.
---------------------------------- PROPOSITO -----------------------------------
* Hace uso de las units:
- Windows (HFILE, CreateFile)
- SysUtils (FileExists)
--------------------------------------------------------------------------------
}
function IsFileInUse(fName : string) : boolean;
var
HFileRes: HFILE;
begin
result := False;
if not FileExists(fName) then
exit;
HFileRes := CreateFile(pchar(fName),
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0) ;
result := (HFileRes = INVALID_HANDLE_VALUE);
if not result then
CloseHandle(HfileRes);
end;//IsFileInUse