2009-05-21 3 views
0

Ich bin kurz davor, eine Anwendung für E-Learning neu zu erstellen. Aber jetzt möchte ich diese neue Version auf ein neues Level bringen.NET-Code, um eine Office-Anwendung zu "hören" (die vom Benutzer erhobenen Ereignisse abzurufen)

So das das Szenario: ein Benutzer öffnet meine App. Er entscheidet sich dann für eine der gängigsten MS Office-Anwendungen (Word, Excel, Outlook usw.).

Meine App wird dem Benutzer Anweisungen geben, was zu tun ist: ein neues Dokument erstellen, einen Text eingeben, fett umdrehen, ein Bild einfügen usw. Wenn es richtig gemacht wird, erhält der Benutzer Punkte. Wenn nicht, verpatzt es.

Aber (es gibt immer ein aber) für mich, um dies zu erreichen, muss ich in der Lage sein zu "sehen", was der Benutzer tut. Ich benutze NET (2.0 - C# oder VB, egal welche). Kann mir jemand sagen, wie das geht? Ich muss ein Handle zu der geöffneten Office-App oder starten Sie eine neue und dann muss ich zuhören und alles was der Benutzer tut bewerten.Wenn der Benutzer es falsch macht, muss ich auch Anweisungen an die Office-App senden und tun es für er/sie.

Ist das möglich? Hat jemand einige Code-Beispiele, wie man das macht oder ähnliches?

Vielen Dank im Voraus

PS: Ich würde wirklich keine Office-Add auf dies zu erreichen haben will!

Bearbeitet: Der Grund, warum ich nicht in VBA kommen möchte, ist, dass ich sicherstellen wollte, dass dies wiederverwendbar war, um Benutzern zu helfen, andere Anwendungen weiter unten zu verwenden. Also wollte ich eine Möglichkeit, einen Listener für eine Anwendung zu erstellen und die Benutzerinteraktion damit zu dekodieren.

Antwort

1

Es gibt tatsächlich eine für Computer Based Training-Anwendungen genannt WH_CBT entwickelt, um Windows Haken und eine Benachrichtigung, wenn die Fenster aktiviert werden, minimiert, bewegt, verändert werden Befehle ausgeführt, Maus/Tastatur-Ereignisse usw.

Ich werde Sie nicht belügen, Hooking ist ein ziemlich komplexes Thema, aber sicherlich von .NET zugänglich.Weitere Informationen zum MSDN-Artikel, in dem erläutert wird, wie Sie in .NET Nachrichtenanhängen verwenden, und dann einen Blick auf die beiden werfen Links, die folgen für weitere Informationen über WH_CBT.

Cutting Edge: Windows Hooks in the .NET Framework

MSDN Library: SetWindowsHookEx Function

MSDN Library: CBTProc Function

+0

Ich hätte nie gedacht, dass es einfach ist :) Vielen Dank für Ihre Antwort. Dies scheint der richtige Weg zu sein! –

2

Die Automatisierungs-API für Office ist eine COM-API. Sie können es aus verwaltetem (.NET) Code aufrufen, aber das fügt nur eine zusätzliche Ebene hinzu und macht die Dinge wesentlich komplexer. Ich habe viel Office-Automatisierung mit VB/VBA und C# gemacht und obwohl ich C# als Sprache liebe, muss ich sagen, dass es viel schwieriger ist, Office auf diese Weise zu betreiben. Viel. (Es ist einfach, es mindestens einmal auf Ihrem Rechner zum Laufen zu bringen - aber lassen Sie sich davon nicht täuschen).

Die API ermöglicht es Ihnen, bestimmte Ereignisse wie Menüauswahlen, Befehlsleistenschaltflächenklicks, Fensteraktivierung, Öffnen/Schließen von Dokumenten usw. aufzufangen. Sie können auch das Ereignis "Auswahl geändert" abfangen, das Sie theoretisch verwenden könnten was der Benutzer macht. Aber es gibt eine Menge von Direktmanipulationsaufgaben, die ein Benutzer ausführen kann, die Sie nicht abfangen könnten (z. B. Ziehen und Ablegen, Größe eines Bildes ändern usw.), und für Ihre Zwecke würde ich das sagen ein großes Problem sein.

Ich würde sagen, dass ich sehr bezweifle, dass Sie in der Lage sind, zu tun, was Sie vorschlagen - zumindest nicht gut genug, um es nahtlos zu machen. Und ich würde denken, dass es ziemlich bombensicher sein muss, wenn es um Ihre Benutzerbasis geht.

Entschuldigung. :-(

+0

Nichts über :) Nicht deine Schuld traurig zu sein. Danke für die Eingabe, aber ich habe immer noch die Hoffnung, dass es einen anderen Weg gibt :) Wenn ich es finde, werde ich es posten. –

+0

Rate mal, du bekommst die Bounty-Punkte :) Niemand scheint zu wissen, wie man das löst ... –

+0

Scheint, ich habe mich geirrt :) Danke für die Eingabe, though. –

Verwandte Themen