Office aus vb.net steuern

sebastiandhom

Grünschnabel
Hallo zusammen,

ich benutze Word als Reportmaschine für eine VB.Net Applikation.

Jetzt ist es so, dass lange Laufzeiten bei der Erstellung von Worddokumenten auftreten (> 20 Minuten).

Wenn ich in der Zeit eine email schreiben will und mein Outlook öffne, verliert mein Programm wohl die Referenz auf das verwendete word.document was dazu führt, dass in meine email auf einmal wie von Geisterhand die Zeilen geschrieben werden.

Wie kann man das verhindern, dass der User während der Reportlaufzeit weiter normal arbeiten kann.

Für sachdienliche Hinweise wäre ich sehr dankbar....

Beste Grüße,
Sebastian
 
Hi,
Wenn du wissen willst wie du sämtliche Eingabe durch den Benutzer unterbinden willst, dann kann ich dir das sagen^^:
Code:
Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long
'Diese Funktion sperrt sämtliche Tastatur und Mauseingaben durch den Benutzer, außer Ctrl+Alt+Del wodurch die Sperrung aufgehoben wird
Const API_FALSE As Long = 0& ' aus Schönheitsgründen kann mann API_FALSE und TRUE definieren, muss man aber nicht
Const API_TRUE As Long = 1&
Call BlockInput(API_TRUE) ' Hier wird die Sperre aktiviert
Call BlockInput(API_FALSE) ' Hier wird die Sperre deaktiviert

Allerdings lässt sich dazu sagen; Diese Lösung ist sehr unelegant^^. Außerdem solltest du anderen Benutzern UNBEDINGT eine Warnung geben (sonst kriegen die noch vor Panik einen Herzkasper^^).
Eigentlich ist es bei Microsoft Produkten (vorallem Office) so, dass man auch ohne selektiers Fenster (mann kann das Fenster sogar invisible machen^^) Arbeiten kann. Dafür muss man nur den Verweis auf die Entsprechende Bibliothek machen. Dann kann man genau so mit VB .Net arbeiten wie mit VBA für Office. Das wird dann über Objekte realisiert die du direkt ansprechen kannst. Aber es kann natürlich auch sein, dass ich dein Problem nicht 100%ig verstanden habe
Gruß romin
 
Hallo romin,

danke für die Antwort. Ich versuche allerdings nicht den Benutzer daran zu hindern, mein Dokument zu stören, sondern eher, das Dokument zu hindern, sich in jedes Winwordfenster, das gerade geöffnet ist, zu setzen.

In dem Moment, wenn Outlook eine neue email verfassen will, wird intern winword (man sieht das in den Prozessen) gestartet. Zu diesem Zeitpunkt wird die interne Instanz von Winword auf den Outlookeditor umgestellt.

Sebastian
 
Hi,
mhmm dann habe ich das nicht verstanden^^
könntest du vielleicht mal sagen was dein Programm genau macht und wie das umgesetzt ist? Ich kann mir das jetzt nicht mehr so richtig vorstellen^^
Gruß romin
 
Hallo,
ich programmiere zwar mit Visual C++ .NET, aber evt hilft dir das auch weiter um die Reaktionszeiten zu verkürzen. Ich benutze die Office Interops um Word etc. zu steuern und hab dabei keine Laufzeitprobleme. Dabei müssen die Verweise zu den entsprechenden Interops gebaut werden. Leider kenne ich mich in Visual Basic nicht aus aber dennoch mal der Vorschlag. Und gleichzeitig mal ein Link in die entsprechende MSDN: http://msdn2.microsoft.com/en-us/library/microsoft.office.interop.word.application(VS.80).aspx
 
Hi

Die einfachste Variante wäre wohl Word nicht als E-Mail-Editor zu nutzen ;)
(Outlook --> Extras --> Optionen --> E-Mail-Format --> Haken vor "E-Mail mit Microsoft Office Word bearbeiten" entfernen --> OK --> Word-Prozess beenden oder Outlook neustarten)
Das hat vor allem den Vorteil, dass weniger Arbeitsspeicher belegt wird, wenn Outlook geöffnet ist.
 
Zurück