Toon posts:

[DELPHI] Afvangen zonder dat het programma niet actief is.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb een vraagje. Ik heb een programmatje geschreven dat de een log dat elke toets of muis beweging volgt. Maar nu is mijn probleem dus wanneer het programma geminimaliseerd is dan logt het programma niks meer. Ik heb al wel gezocht maar dan kom ik dus uit dat ik een dll moet gaan schrijven. Nou wil ik graag weten of er misschien andere manieren zijn dat het programmatje actief kan blijven werken ook al is tie geminimaliseerd.

Bedankt alvast

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07:40
Wat noem je 'actief'? Hoe log je ueberhaupt en waarom denk je dat dat niet werkt? Heb je het nu over "niet actief" als in: geen focus of: geminimaliseerd?

Verwijderd

Topicstarter
Ik heb het getest doormiddel van een memobox. Als het programma scherm geminimaliseerd word de memobox niet meer gevult met de toetsaanslagen van het toetstenbord.

  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

De enige manier waarop dat werkt is met een keyboard hook; en dat werkt met een DLL. Andere manieren heb ik nog niet gezien.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

hoe vang jij die toetsaanslagen dan op dan? Met OnKeyPress? Tja, die vangt alleen de toetsen af die op het form afgevuurd worden. Dus inderdaad alleen als ie actief is.

Als je altijd en overal de toetsen en muis wilt volgen zou ik eens zoeken naar de woorden 'windows hook'. Niet simpel, werkt niet altijd 100% stabiel, maar kan wel. Start aub een nieuwe thread als je nog vragen doorover hebt *nadat* je gezocht hebt :)

Om url's af te vangen waar mensen met IE heen zijn geweest zijn ook andere mogelijkheden. Browser Helper Objects heten ze in IE.

We adore chaos because we like to restore order - M.C. Escher


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:45

Creepy

Tactical Espionage Splatterer

Wombat: een keyboard hook (of welke (system) hook dan ook.) kan je ook door een applicatie plaatsen hoor.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Creepy schreef op 12 augustus 2002 @ 16:42:
Wombat: een keyboard hook (of welke (system) hook dan ook.) kan je ook door een applicatie plaatsen hoor.
Als je met plaatsen starten noemt, ja dat kan :) Maar de code ervan zal toch echt in een DLL moeten staan, anders van je nogsteeds alleen de dingen af van je eigen app. Windows injecteerd de DLL namelijk in de andere processen zodat ie daar de boel kan afluisteren. Dat kan niet met een EXE.

We adore chaos because we like to restore order - M.C. Escher


  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

LordLarry schreef op 12 augustus 2002 @ 16:47:
[...]

Als je met plaatsen starten noemt, ja dat kan :) Maar de code ervan zal toch echt in een DLL moeten staan, anders van je nogsteeds alleen de dingen af van je eigen app. Windows injecteerd de DLL namelijk in de andere processen zodat ie daar de boel kan afluisteren. Dat kan niet met een EXE.
_/-\o_ scheelt mij weer een hoop uitleggen :P

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
var
  Form1: TForm1;

  KBHook: HHook; {this intercepts keyboard input}

  {callback's declaration}
  function KeyboardHookProc
   (Code: Integer;
   WordParam: Word;
   LongParam: LongInt): LongInt; stdcall;


En in formcreate maak ik de hook.
code:
1
2
3
4
5
6
7
8
9
procedure TForm1.FormCreate(Sender: TObject);
begin
   {Set the keyboard hook so we
   can intercept keyboard input}
   KBHook:=SetWindowsHookEx(WH_KEYBOARD,
                          @KeyboardHookProc,
                           HInstance,
                           GetCurrentThreadId());
end;


En hier zet ik het in de memobox om te testen.

code:
1
2
3
4
5
6
7
8
function KeyboardHookProc
   (Code: Integer;
   WordParam: Word;
   LongParam: LongInt) : LongInt;
begin
  Form1.Memo1.Lines.Add(WordToStr(WordParam));
  Result:=0;
end;

Verwijderd

Topicstarter
Hoe ga ik nu tewerk. Ik heb geen ervaring met het schrijven van DLL's. Kan iemand mij opweg helpen hoe je dat zou moeten aanpakken met de code die hierboven staat??

Mijn dank is groot

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:45

Creepy

Tactical Espionage Splatterer

Ach.. mijn eerste hit in google als ik zoek op "windows delphi hook"

http://delphi.about.com/library/bluc/text/uc063001a.htm

Staat het precies in uitgelegd...

Ik was onder de indruk dat je met een app. ook een globalhook kan maken (zonder gebruik te maken van een DLL). * Creepy was wrong. Je moet inderdaad een DLL gebruiken.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1