AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Hook.dll und programm liefern kein ergebnis
Thema durchsuchen
Ansicht
Themen-Optionen

Hook.dll und programm liefern kein ergebnis

Ein Thema von Chaosente · begonnen am 6. Sep 2007 · letzter Beitrag vom 8. Sep 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Hook.dll und programm liefern kein ergebnis

  Alt 7. Sep 2007, 00:17
aaalso...

wie erwartet:

aktiviere ich ein anderes fenster, funktioniert der hook schon nicht mehr. er ist im moment also auf deinen prozess beschränkt, in dem dein fensterhandle bekannt ist.

Mehrere Tastendrücke schickt er, weil er für das drücken der taste, während die taste gedrückt ist, und vor und nach dem loslassen jeweils einmal die hookproc aufruft. oder so ähnlich.

Ich hab aus der Hookproc mal folgendes gemacht:

Delphi-Quellcode:
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM):
LRESULT; stdcall;
begin
//es ist ebenfalls möglich die Bearbeitung an eine Bedingung zu knüpfen
//it's possible to call CallNextHookEx conditional only.
  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
  case nCode < 0 of
    TRUE: exit; //wenn code kleiner 0 wird nix gemacht
                //if code smaller 0 nothing has to be done
    FALSE:
      begin
       if (lparam shr 30) = 0 then
         sendmessage(WindowHandle, WM_KeyLogMessage,wparam,lparam);
//Hier kann jetzt alles bearbeitet werden
//Here one can work with the parameters
      end;
  end;
end;
Damit kommen nur noch zwei an.
Deine kleine Hausaufgabe: Sag mir, warum das so ist.
Tipp: per "shr 30" schiebe ich alle bits außer 30 und 31 aus dem integer, d.h. nur 30 und 31 bleiben als MSB oder LSB übrig (wie endian das ganze ist, will ich jetzt nicht nachlesen)
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#12

Re: Hook.dll und programm liefern kein ergebnis

  Alt 7. Sep 2007, 04:56
Argh, ich muß das Hook-Tut wirklich dringend überarbeiten. Gibt's hier jemanden der sich ein paar Lorbeeren als Coautor verdienen will?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Hook.dll und programm liefern kein ergebnis

  Alt 7. Sep 2007, 07:17
ich finde du solltest das tutorial NICHT überarbeiten. Denn ansonsten wird wirklich nur kopiert und niemand bemüht sich in die Materie einzusteigen.
So wie es jetzt ist geht es im Ansatz und wer mehr machen will muss sich genauer damit auseinander setzen um es ordentlich hinn zu bekommen.
Wenn du ein fertiges Copy-Paste-Tutorial wird einfach nur kopiert (ohne zu verstehen) und der quelltext drum herum hat dann in etwa das gleiche Niveau. Resulatat wäre das ständig Programme wegen Script-Kiddi-Hooks abstürzen..
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#14

Re: Hook.dll und programm liefern kein ergebnis

  Alt 7. Sep 2007, 07:31
Zitat von Chaosente:
Tut mir leid ich versteh nur bahnhof! kann mir jemand erklären was das heißen soll?

es bedeutet einfach, dass Deine Variable WindowHandle keine globale Variable darstellt, wie Du fälschlicherweise angenommen hast.
Du brauchst also einen zentralen Ort, wo Du die Variable abspeichern kannst.
Es müssen Dich also genau dieselben Fragen beschäftigen, als wenn zwei programme daten austauschen wollen.
Grund ist eben, die DLL wird von jedem Process geladen. Es existieren also genau so viele Variablen, wie auch die DLL geladen wurde...


Delphi-Quellcode:
var
  HookHandle: Cardinal = 0;
  WindowHandle: Cardinal = 0;

http://assarbad.net/stuff/tutorials/...k_tutorial.pdf

da steht eigentlich alles drin ..
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Hook.dll und programm liefern kein ergebnis

  Alt 7. Sep 2007, 11:23
Zitat von Olli:
Argh, ich muß das Hook-Tut wirklich dringend überarbeiten. Gibt's hier jemanden der sich ein paar Lorbeeren als Coautor verdienen will?
*meld*

Reicht es, wenn ich schon meinen eigenen Keyboard-LL-Hook geschrieben hab (Ich bin sogar irgendwie an meinen Monitorprozess zurückgekommen. Muss ich mal schauen, ob ich die alten Sourcen noch find)?

@SirT: Die Überarbeitung von Tutorials ist nie schlecht.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Chaosente

Registriert seit: 20. Aug 2006
80 Beiträge
 
#16

Re: Hook.dll und programm liefern kein ergebnis

  Alt 7. Sep 2007, 15:47
Hab ich das richtig verstanden, das wenn ich in der dll, die daten einfach in eine datei schreiben würde sich keine probleme ergeben würde, aber wenn ich sie an mein fenster schicken möchte den umweg mit MMF gehen muss?
  Mit Zitat antworten Zitat
7. Sep 2007, 19:07
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Windows API / MS.NET Framework API" verschoben.
Delphi-Frage
Olli
(Gast)

n/a Beiträge
 
#18

Re: Hook.dll und programm liefern kein ergebnis

  Alt 7. Sep 2007, 19:43
Zitat von Chaosente:
Hab ich das richtig verstanden, das wenn ich in der dll, die daten einfach in eine datei schreiben würde sich keine probleme ergeben würde, aber wenn ich sie an mein fenster schicken möchte den umweg mit MMF gehen muss?
Kommt auf die Daten an.

Also, wenn du in der Hook/Callbackfunktion bist, laeuft dein Code ja im Kontext eines anderen Prozesses. Du musst also die Prozessgrenzen ueberwinden. Das geht zwar mit Nachrichten, aber die zu verschickenden Daten sind dann normalerweise auf 2x 32bit beschraenkt. Um also mehr Daten zu verschicken, bietet sich eindeutig MMF an.



@Luke: Wie kennst du dich mit LaTeX aus? Wenn garnicht, dann muessten wir die Zusammenarbeit einfach im unformatierten Textformat machen. Ich will sicherstellen, dass es PDF-Dateien mit Vektorgrafiken sind und als Grundlage zum Hooktut muss auch das DLL-Tut nochmal aufgefrischt werden. Bist du dabei? Code wuerde ich ohnehin sowohl fuer C als auch fuer C++ und eben Delphi schreiben wollen. Bei Delphi waerst du bis Oktober auf dich gestellt, da ich im Moment keine Installation und eben auch kein Installationsmedium habe und TurboDelphi kommt mir nicht auf die Platte.
  Mit Zitat antworten Zitat
Benutzerbild von stoxx
stoxx

Registriert seit: 13. Aug 2003
1.111 Beiträge
 
#19

Re: Hook.dll und programm liefern kein ergebnis

  Alt 8. Sep 2007, 14:40
Zitat von Chaosente:
Hab ich das richtig verstanden, das wenn ich in der dll, die daten einfach in eine datei schreiben würde sich keine probleme ergeben würde, aber wenn ich sie an mein fenster schicken möchte den umweg mit MMF gehen muss?
ja das ist richtig, in eine Datei (Text) könntest Du Deine zu loggenden Daten hineinschreiben.
Du könntest Dir auch Dein Handle in eine Text Datei speichern, theoretisch. und dann dort auslesen, damit Du weißt, wo Du mit Sendmessage Deine Daten hinschicken musst.
Würde aber niemand machen

Memory-Mapped-Files würden Dir da aber auch noch nix nützen, (Sind ja Files) in den Memory gemappte Files eben..
aber Microsoft bietet Dir mit der Option

MemFile := CreateFileMapping($FFFFFFFF.nil ...) an, Deine Daten auch prozeß-übergreifend gemeinsam zu nutzen, womit der Datenbereich in der Auslagerungsdatei von Windows angelegt wird (bzw. irgendwo im Cache vorher

Somit können die "vielen" Dll's von jedem Programm (Prozeß), was gehookt wird, auch Dein WindowHandle wieder lesen ...
und die DLL kann dann mit dem richtigen Handle eine Sendmessage verschicken

Mit MMF könntest Du wiederum eine noch größer Datenstruktur (Record) anlegen, und diese mit einer Funktion in der DLL "GetData(var Data: TMyData)" auslesen. Und mit Sendmessage teilst Du Deinem Programm nur mit, dass jetzt neue Daten da sind ...
Phantasie ist etwas, was sich manche Leute gar nicht vorstellen können.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz