2012-04-10 10 views
2

Folgendes möchte ich in Delphi XE tun:
Erfassen Sie einen Doppelklick in einer anderen Anwendung, so dass, wenn es auftritt und der Text unter der Maus hervorgehoben ist, löst eine Reihe von Ereignissen in meiner Anwendung basierend auf dem aus Text markiert war.Gibt es einen geringen Overhead-Weg, um einen Maus-Doppelklick mit Delphi zu haken?

Ich kenne Möglichkeiten, dies mit einem systemweiten Maus-Hook zu tun, aber ... Da meine Anwendung und die andere Anwendung in vielen Fällen in einem Terminal-Service oder Citrix-Umgebung gehostet werden, bin ich eher ungern zu tun dies mit einem Maushaken, da ich über die Ressourcenkosten besorgt bin. (Ich stelle mir den Server vor, der Hunderte von Maus-Hooks beherbergt, einen für jeden Benutzer ... schaudern). Bin ich zu vorsichtig? Wie hoch ist die Leistung und Stabilität eines Maushakens? Was ist mit der TS- oder Citrix-Umgebung? Wenn mein Darm richtig ist und die Kosten für mehrere Haken zu hoch wären, gibt es einen anderen Weg, dies zu tun?

Ich habe keinen Zugriff auf den Quellcode der anderen Anwendung und der Drittanbieter-RichEdit-Steuerelement, in dem der Text gefunden wurde wurde über die gesamte Anerkennung geändert und reagiert nicht auf die API bei der Verwendung wie veröffentlicht. Hilfe?

Antwort

4

Dies ist ohne den systemweiten Maushaken AFAIK nicht möglich.

Sie haben Recht, über den Overhead besorgt zu sein. Der Maus-Hook (MouseProc) wird jedes Mal aufgerufen, wenn ein Fenster PeekMessage oder GetMessage aufruft und eine Mausnachricht abgerufen wird, die für jedes Fenster jeder laufenden Anwendung aufgerufen wird. Auch wenn Ihr Hook das Ereignis einfach mit CallNextHookEx() an den nächsten Handler weiterleitet, hat dies Auswirkungen auf das System. Ich würde vermuten, dass mehrere Sitzungen, die unter TS laufen, ziemlich unangenehm wären.