Einzelnen Beitrag anzeigen

Mephistopheles
(Gast)

n/a Beiträge
 
#15

Re: Nachrichten vollkommen abfangen

  Alt 27. Mär 2005, 22:39
Zitat von c113plpbr:
Du drehst mir die Worte im Mund um. So war das nicht gemeint.
Denn wenn du das Programm geschrieben hast, war es wohl nicht des Benutzers Schuld.
Aber wenn Madshi den nichtfunktionierenden Teil geschrieben hat, war es dennoch meine Schuld (s.o. dein Kommentar)?

Zitat von c113plpbr:
Willst du damit sagen, dass alles was du programmierst, auf anhieb perfekt funktioniert? Irren ist nun mal Menschlich, und jeder macht Fehler. Aber Fehler kann man ausbessern, und so sollte man jedem die Chance geben, seine Fehler auszubessern, bevor man über ihn, oder sein Werk richtet.
Sollte man? Da bin ich nicht so sicher. In wievielen kommerziellen Projekten hast du schon mitgearbeitet?
Mit Worten läßt sich trefflich streiten,
Mit Worten ein System bereiten,
An Worte läßt sich trefflich glauben,
Von einem Wort läßt sich kein Iota rauben.


Zitat von c113plpbr:
Ich will damit eigentlich nur sagen: auch ein Windows-Hook verbrät (mind.) soviel, wie ein API Hook. Daher sind API-Hook und Windows-Hook von der Performance her gleich einzustufen.
Nicht aber von Stabilität und Zuverlässigkeit. Kleiner Tip: Kernelmode-Programmierer behelfen sich seit langem mit SSDT-Patching. Es ist potentiell sehr gefährlich. Mit Windows XP und 2003 wurden einige neue Funktionen eingeführt, die statt Hooking einen Callback-Mechanismus einführen (nichts anderes also als Fensterhooks, nur ohne die Möglichkeit der "Interception"). Welchen Mechanismus bevorzugst du? Wie erklärst du einem Kunden, daß er einen nichtzertifizierten Treiber bekommt, obwohl ein zertifizierter unter Nutzung neuester Möglichkeiten möglich wäre?

Zitat von c113plpbr:
Wie gesagt, ich habe nie behauptet, dass es die beste Methode ist. Aber es sollte ein Vorschlag sein. Ob man diesen nun "ernst" nimmt, oder nicht, überlasse ich jedem selbst.
Sieht nach einem Konsens aus.

Zitat von OrallY:
Programmfunktion:
Der Benutzer soll im Endeffekt (genaue Funktion ist irrelevant) überall auf dem Bildschirm mit gedrückter rechter Maustaste zeichnen können. Die Anwendung selbst läuft im Hintergrund und soll den Dienst bereitstellen.
Sieht nach einem Job für SetCapture() aus.

Zitat von OrallY:
Problem:
Drückt man irgendwo auf dem Bildschirm die Maustaste, erzeugt das loslassen beispielsweise ein Kontextmenü. Dies jedoch will ich vermeiden. Dabei muss das Programm natürlich unterscheiden, wann es ein Kontextmenü zulassen soll (die Maus wurde zwischen Drücken und Loaslassen der Maustaste gar nicht oder kaum bewegt) und wann es genau dies verhindern soll (die Maus bewegt sich bei gedrückter Maustaste).
Das mit dem Kontextmenü verstehe ich nicht, denn bei SetCapture() bekommt NUR dein Fenster Input.

Zitat von OrallY:
Wie schon gesagt, ich kann mir nicht vorstellen, dass es so sauber ist, CallNextHookEx einfach nicht aufzurufen, oder?
Es ist prinzipiell schon "mal" okay, aber so generisch wie bei dir sieht ganz böse aus. Im Notfall hülfe nur noch Strg+Alt+Entf gegen deinen Hook, wenn der Amok läuft

Zitat von OrallY:
Weiteres Problem:
Mit diesem Lösungsansatz funktioniert zwar das Blockieren der Maustaste, jedoch tritt das im 1. Posting genannte Problem mit dem Highlighting auf. Aus diesem Grund möchte ich verhindern, dass ein Fenster die Nachrichten, die für das Highlighting verantwortlich sind, während des Zeichnens erhält.
Würde bei SetCapture() nicht auftreten. Lies dich mal schlau und implementiere deinen Ansatz. Bei weiteren Fragen postest du die einfach hier, bzw. postest hier einen Link zu einem neuen Thread (damit ich darauf aufmerksam werde).

Zitat von OrallY:
P.S.: Ich stelle gerade fest, dass für die Benutzung des MadCodeHooks anscheinend Adminprivilegien erforderlich sind. Liege ich da richtig? Wäre dies der Fall würde diese Möglichkeit für mich schon mal nicht in Frage kommen .
Theoretisch sollten bei soetwas immer Debug-Privilegien reichen. Denn über Debug-Privilegien kannst du höchste Systemrechte erlangen.
Wenn es nur um das Hooken von Prozessen der gleichen Privilegienstufe (z.B. gleicher Benutzer) geht, sollte es aber möglich sein dies ohne spezielle Privilegien zu erreichen. Ich kenne seine aktuelle Implementierung nicht und habe keine Zeit mir das mit DeDe näher anzuschauen.

Es gab da mal eine OpenSource-Implementierung mit SetCapture(), die du eventuell als Anschauungsmaterial verwenden kannst. Zu finden war das (ist schon lange her) unter:
http://www.bendlins.de/nico/delphi/
Der Autor treibt sich meines Wissens auch hier im Forum herum, versuche ihn einfach zu kontaktieren. Ansonsten sind mir nur C/C++-Implementierungen bekannt.

Im Platform SDK gibt es ein Beispiel namens "Drawing Lines with the Mouse":
ms-help://MS.PSDK.1033/winui/winui/windowsuserinterface/userinput/mouseinput/usingmouseinput.htm
(Der Link gilt mit dem letzten aktuellen 2003er Platform SDK)
  Mit Zitat antworten Zitat