Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Hook a nivel de sistema a Copiar/Pegar/Cortar/etc. (https://www.clubdelphi.com/foros/showthread.php?t=92565)

wonderDev 28-11-2017 07:16:41

Hook a nivel de sistema a Copiar/Pegar/Cortar/etc.
 
Hola amigos, ante todo un abrazo a los que me lean. Resulta que necesito un ejemplo de como hacer un hook a nivel de sistema para capturar cuando el usuario copia, corta, pega, elimina etc. los archivos en el PC. La idea es que mi app no interferiria con esos procesos, simplemente guardaria estos datos en una BD Sqlite. Para poder sacar un reporte mas o menos asi:

En fecha tal | El usuario tal | Realizo la accion tal (copiar, pegar, etc) | Sobre el fichero tal | Hacia el fichero mas cual

Eso es para que tengan la idea de como funcionaria la app. Segun vi, para esto se crea una dll que inyecta el hook a nivel de sistema y luego una app llama a esa dll y activa el hook para recibir las notificaciones. Por favor alguien me podria mostrar un ejemplo de como crear la DLL y como usarla desde un App?

PD: Utilizo Delphi XE 10.1 Berlin y la app debe de correr al menos desde Windows XP hasta Windows 10 !

Casimiro Notevi 28-11-2017 09:48:35

Mira los enlaces de final de página por si te sirve alguno, también puedes hacer una búsqueda por "hook". Saludos.

Neftali [Germán.Estévez] 29-11-2017 13:32:57

Pues uno de los primeros artículos que escribí en el blog se titulaba "Jugando con el portapapeles (artículo)" y trataba justo ede eso. De crear un Hook para el portapapeles.
Revísalo a ver si es lo que necesitas.
Incluye código fuente.

escafandra 30-11-2017 08:25:29

Sobre la copia y creación de nuevos archivos, a raíz de este hilo: Saber cuando se crea un archivo nuevo en un directorio publiqué esto otro más completo: Monitorizando el Shell sólo con la API

Sobre la monitorización del ClipBoard tenemos Visor del ClipBoard y Explorar el ClipBoard en busca de ficheros copiados

Una forma de conocer el usuario de la sesión:
Código Delphi [-]
type
  PTOKEN_USER = ^TOKEN_USER;
  TOKEN_USER = record
    User: TSidAndAttributes;
  end;

function GetCurrentUser: String;
var
  hToken: THANDLE;
  Buffer: array [0..1023] of BYTE;
  cbBuf: DWORD;
  ptiUser: PTOKEN_USER;
  snu: SID_NAME_USE;
  User, Domain: ShortString;
  USize, DSize: DWORD;
begin
  ptiUser:= PTOKEN_USER(@Buffer[0]);
  if OpenProcessToken(THANDLE(-1), TOKEN_QUERY, hToken) then
    if GetTokenInformation(hToken, TokenUser, ptiUser, sizeof(Buffer), cbBuf) then
      LookupAccountSid(nil, ptiUser.User.Sid, @User[1], USize, @Domain[1], DSize, snu);

  User[0]:= CHAR(USize);
  Result:= User;
end;

Saludos.


La franja horaria es GMT +2. Ahora son las 19:52:51.

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