Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Lazarus, FreePascal, Kylix, etc. (https://www.clubdelphi.com/foros/forumdisplay.php?f=14)
-   -   KeyLogger Ayuda (https://www.clubdelphi.com/foros/showthread.php?t=90488)

Ripoll1021 22-06-2016 20:18:49

KeyLogger Ayuda
 
Buenas a todos, tengo un problema con mi aplicacion realizada en lazarus. En algunas PC funciona y en otras no, no se si me falta un uses o algo estoy, perdido y estancado por el momento.

La aplicacion la uso para detectar la lectura de un codigo de barra de otra aplicacion Web (no desarrollada por mi) y busca en logs si el Codigo de barra es correcto.

Podrian dar una mano, he intentando tambien hacer la captura de la lectura con un Timer, pero no alcanza a registrar todos los numeros del codigo de barra. Tenia puesto de intervalo 1.

No uso una dll para el hook, porque todavia soy principiante, he intentado usar algunas que estan dando vueltas por internet, pero se me complico al llevarlo a Lazarus.

Gracias de antemano

Código:


unit ulala;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, eventlog, FileUtil, Forms, Controls, Graphics, Dialogs,
  StdCtrls, Buttons, ExtCtrls, Menus, UFail, uok, Windows, Messages, Variants;


var
  MainForm: TMainForm;
  MainHook : HHOOK;   

...

function KeyboardHook(Code: Integer; wParam : WPARAM;
  lParam : LPARAM): Longint; stdcall;
var
  Buffer : TEventMsg;

  procedure TranslateKey(Key : Byte);
  begin
    if (Key <> VK_LBUTTON) and (Key <> VK_RBUTTON) then
    begin
      GetWindowText(GetForegroundWindow, Wnd2, SizeOf(Wnd2));
      if wnd1 <> wnd2 then
    begin
      Wnd1 := Wnd2;
    end;
    end;
    with MainForm do
    begin
      case Key of
        VK_NUMPAD0    :    eImei.text := eImei.text + '0';
        VK_NUMPAD1    :    eImei.text := eImei.text + '1';
        VK_NUMPAD2    :    eImei.text := eImei.text + '2';
        VK_NUMPAD3    :    eImei.text := eImei.text + '3';
        VK_NUMPAD4    :    eImei.text := eImei.text + '4';
        VK_NUMPAD5    :    eImei.text := eImei.text + '5';
        VK_NUMPAD6    :    eImei.text := eImei.text + '6';
        VK_NUMPAD7    :    eImei.text := eImei.text + '7';
        VK_NUMPAD8    :    eImei.text := eImei.text + '8';
        VK_NUMPAD9    :    eImei.text := eImei.text + '9';
        48            :    eImei.text := eImei.text + '0';
        49            :    eImei.text := eImei.text + '1';
        50            :    eImei.text := eImei.text + '2';
        51            :    eImei.text := eImei.text + '3';
        52            :    eImei.text := eImei.text + '4';
        53            :    eImei.text := eImei.text + '5';
        54            :    eImei.text := eImei.text + '6';
        55            :    eImei.text := eImei.text + '7';
        56            :    eImei.text := eImei.text + '8';
        57            :    eImei.text := eImei.text + '9';
      end;
    end;
  end;

begin
  Result := 0;
  Buffer := PEventMsg(lParam)^;

  if Buffer.Message = WM_KEYUP then
  begin
    TranslateKey(Buffer.paramL);
  end;
end;   

procedure TMainForm.FormCreate(Sender: TObject);
begin
    MainHook := SetWindowsHookEx(WH_JOURNALRECORD, @KeyboardHook, hInstance, 0);
end;

procedure TMainForm.FormDestroy(Sender: TObject);
begin
    UnhookWindowsHookEx(MainHook);
end;


Casimiro Notevi 22-06-2016 21:12:55

Cita:

Empezado por Ripoll1021 (Mensaje 506432)
Buenas a todos, tengo un problema con mi aplicacion

¿Y qué problema es?
¿Tiene algo que ver con internet?

Ripoll1021 22-06-2016 21:43:23

Cita:

Empezado por Casimiro Notevi (Mensaje 506433)
¿Y qué problema es?
¿Tiene algo que ver con internet?

Es verdad no puse el problema y lo postee en la seccion incorrecta, lo podras borrar?

Casimiro Notevi 23-06-2016 00:26:51

Cita:

Empezado por Ripoll1021 (Mensaje 506434)
Es verdad no puse el problema y lo postee en la seccion incorrecta, lo podras borrar?

No hace falta borrarlo, simplemente escribe aquí un nuevo post explicando correctamente todo.
Ya lo moverá algún moderador al foro adecuado.

Ripoll1021 23-06-2016 02:36:00

El Problema reside en que en algunas PC, captura las teclas y el lector de codigo de barra perfectamente y en otras pc, directamente no captura nada.

No se si me falta agregar una DLL o algo

Gracias

escafandra 23-06-2016 17:27:37

Es mucho más eficiente un hook al te lado tipo WH_KEYBOARD_LL

Saludos

Ripoll1021 23-06-2016 17:33:09

Cita:

Empezado por escafandra (Mensaje 506450)
Es mucho más eficiente un hook al te lado tipo WH_KEYBOARD_LL

Saludos

Hola Escafandra, me podrias ayudar con un ejemplo, estoy bastante perdido.

Gracias

Casimiro Notevi 23-06-2016 17:54:31

Usa las búsquedas de los foros ;)
Encontrarás varios hilos sobre el mismo tema.

escafandra 24-06-2016 22:54:21

¿Cual es la lógica del funcionamiento? ¿Qué hace esa app web y porqué te interesa capturar las pulsaciones de teclado? ¿Cuando falla, qué es lo que no va bien? ¿Cómo funciona tu lector de barras?

El código que expones trata de hacer dos cosas, la primera es capturar el texto de una ventana y la segunda es capturar el teclado si no consigue el primer objetivo.
No queda claro el uso de wnd1 y wnd2, en principio parece que son array of char.
Todas esas cosas debes tener claras a la hora de saber porqué y donde falla ese código.


Saludos.


La franja horaria es GMT +2. Ahora son las 07:13:42.

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