Laden...

SendKey an Firefox und co.

Erstellt von vitafit vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.939 Views
vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren
SendKey an Firefox und co.

Guten Abend alle zusammen,

ich habe ein kleines Problem was mich nun schon seit etlichen Stunden beansprucht und mir keine Ruhe lässt. Leider bin ich noch zu keiner Lösung gekommen.
Grundsätzlich nutze ich folgenden KeyboardHook (Danke hier nochmal an Ayke für den tollen Hook!):
KeyboardHook, MouseHook, WindowHook [HookInput]

Mein Ziel ist es, beim drücken der Taste F8 einen Sendkey mit der Kombination STRG + C auszulösen. Anschließend soll ein markierter Text (das hat der Nutzer schon getan bevor er die Taste gedrückt hat) aus der Zwischenablage kopiert werden. Das funktioniert auch grundsätzlich:

private void key_press(object sender, KeyEventArgs e)
{
            try
            {
                SendKeys.SendWait("^(C)");
                zwischenablage = Clipboard.GetText();     n
              }
            catch { /*this.Close();*/  }
            e.Handled = true;
}

Problem dabei ist, es funktioniert im Notepad und überall da, wo ich ein Text-Eingabe-Feld habe. In dem Moment, wo ich allerdings in einem Browser oder einem anderen Programm einen Teil eines Textes markiere und dann F8 drücke, funktioniert es nicht. Hat jemand eine Erklärung / Idee wieso sich das so unterschiedlich verhält?
SendKeys ist denke ich hier das Problem oder?

C
1.214 Beiträge seit 2006
vor 12 Jahren

Das schaut schon wieder nach irgendeinem Hack aus... Kannst du nicht einfach eine Extension für Firefox schreiben?

1.820 Beiträge seit 2005
vor 12 Jahren

Hallo!

@Coder007:
Ich denke mal, es soll eine allgemeine Lösung erstellt werden, wobei nicht für jede bockende Anwendung eine Erweiterung geschrieben werden soll.

STRG-C funktioniert ja normalerweise auch in FireFox.

Hier kann es evtl. daran liegen, dass FireFox entweder F8 selbst abfängt (mal einen anderen HotKey verwenden) oder es liegt daran, dass Firefox (wie viele andere Browser) größtenteils auf selbstentwickelte Controls setzen (also keine Windows-Standard-Controls), die evtl. nicht korrekt auf Sendkeys reagieren.

Nobody is perfect. I'm sad, i'm not nobody 🙁

C
1.214 Beiträge seit 2006
vor 12 Jahren

Das mag schon sein, trotzdem ist es für mich keine "Lösung". Ich würde es nie in Betracht ziehen, so eine Software einzusetzen. Entweder es ist sinnvoll aufgebaut, oder ich lass es bleiben. Und alles, was irgendwelche Hooks einsetzt und Tastendrücke simuliert, ist eindeutig nicht sauber.
Da könnte man noch eher ein Autoit Script schreiben, bevor man sowas selber programmiert.

1.820 Beiträge seit 2005
vor 12 Jahren

Hallo!

@Coder007:
Wie würdest du denn vorgehen, um den in einer beliebigen Anwendung markierten Text in die Zwischenablage oder direkt ein eigenes Programm zu kopieren?

Mir fällt nur die Möglichkeit über SendKeys oder WindowMessages ein.
Und bzgl. der Hooks werden diese ja nur zum Abfangen der Tastendrücke verwendet, nicht zum simulieren der Tastendrücke.

Von daher kann ich hier kein "unsauberes" oder nicht sinnvolles Vorgehen erkennen.

Ein AutoIt-Skript hilft ab dem Zeitpunkt nicht mehr, wenn der Text anschließend noch weiter verarbeitet werden soll (z.B. wählen einer markierten Telefonnummer).

Nobody is perfect. I'm sad, i'm not nobody 🙁

C
1.214 Beiträge seit 2006
vor 12 Jahren

Wie würdest du denn vorgehen, um den in einer beliebigen Anwendung markierten Text in die Zwischenablage oder direkt ein eigenes Programm zu kopieren?

Gar nicht! Wenn ich das wirklich haben will, dann würd ich Änderungen der Zwischenablage überwachen und dann darauf reagieren. Der Benutzer muss dann selber kopieren, kommt auf dasselbe hinaus. Muss man natürlich die genauen Anforderungen kennen. Aber ein Programm, das Tastendrücke an ein anderes Programm sendet, ist mir zu sehr zusammengebastelt, um sowas mach ich immer einen Bogen.

Information von MarsStein vor 12 Jahren

Bitte bleibt beim Thema. Das ist nicht der Sinn oder die "Sauberkeit" der Verwendung von SendKeys oder Hooks.

vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren

Hallo zusammen,

danke erstmal für die Antworten. Das mit den eigenen Controls usw. habe ich auch schon festgestellt / gelesen / vermutet. Allerdings bin ich mir sicher, dass es einen Lösungsweg geben muss. Der Grund warum ich eine solche Software schreiben möchte, ist der das eine alte Software die genau diese Funktion bereit stellt, dies nun nicht mehr tut, da Sie in ein Webinterface umgezogen ist.
Ich habe leider keinerlei Kenntnisse um hier ein Reverse Engineering oder ähnliches durchzuführen. F8 ist in Firefox nicht belegt. Ich habe allerdings festgestellt, dass die andere Software überall funktioniert. Egal in welchem Programm. Drücke ich zum Beispiel in Firefox F11 (während die alte Version des anderen Programmes läuft) passiert genau das, was passieren soll. Nichts weiter. Obwohl Firefox normalerweise mit F11 in den Vollbildmodus wechselt.
Bei meinem Hook verhält es sich eher so, dass Firefox dann direkt in den Vollbildmodus wechselt. Vielleicht hilft das ja irgendwem hier für einen Ideen-Ansatz ich bin nämlich langsam leer davon...

Danke!

C
1.214 Beiträge seit 2006
vor 12 Jahren

Wenn die alte Software funktioniert, kannst du ja einen API Monitor ausprobieren, z.B. den:

http://www.rohitab.com/apimonitor

Damit solltest du dann sowas wie SendMessage oder PostMessage sehen und schauen, was genau gesendet wird...

vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren

Danke, habe die letzte Version getestet - Scheint kein .NET zu supporten?

C
1.214 Beiträge seit 2006
vor 12 Jahren

Warum? Funktioniert bei mir wunderbar auch mit .NET

Wenn das eh .NET ist, kannst du natürlich auch mit Reflector reinschauen, das sollte auch nicht so schwer sein, selbst wenn das Programm obfuskiert wurde.

vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren

Welche Version des API Monitors nutzt du?

C
1.214 Beiträge seit 2006
vor 12 Jahren

Die Portable, 32 Bit. In der Prozessliste seh ich auch meine .NET Anwendungen und kann sie hooken.

vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren

Der einzige Build der bei mir nicht meckert, ist die Version 2 Portable aber wirkliche Ergebnis sehe ich dabei nicht 😉
Naja, ich suche dann mal weiter...

C
1.214 Beiträge seit 2006
vor 12 Jahren

Naja, du suchst halt im Filter nach Sendmessage und Postmessage und schaust, ob du welche findest. Wenn du nichts findest, suchst du nach anderen APIs, die dafür in Betracht kommen, z.B. keybd_event