word.Activate() "blinkt nur"
-
sexta-feira, 5 de novembro de 2010 12:51
Hallo Zusammen,
ich hoffe ich bin hier im richtigen Forum gelandet.
Ich verwende:
- Windows 7
- Office 2010
Ich versuche meine Word-Application (nachdem ich ein paar Textmarken gefüllt habe) mit
word.Activate()
in den Vordergrund zu holen. Das klappt auch, allerdings nur solange ich mein Projekt im Debug-Modus ausführe. Sobald ich es ohne Debugging starte, blinkt das Word-Taskleistensymbol nur.
Jetzt habe ich gelesen, dass ab Windows Vista verhindert wird, dass der Fokus einfach "geklaut" wird.
Jetzt könnte ich natürlich AppActivate() verwenden, jedoch ist mir das zu unsicher. Denn hier kann ich ja nicht 100%ig sichergehen, wie der Titel lautet. word.Caption liefert mir ja nur "Microsoft Word" zurück. Der Titel des Fensters besteht allerdings noch aus dem Dateinamen und evtl. [Kompatiblitätsmodus]
Also z. B.: Test.doc [Kompatibilitätsmodus] - Microsoft Word
Lange Rede, kurzer sinn: Gibt es eine zuverlässige Möglichkeit unter Windows 7 und Word 2010 das Word-Fenster in den Vordergrund zu holen?
Edit: Heute ist mir aufgefallen, dass auch das Outlook-Adressfenster das ich per Application.GetAddress() aufrufe, nicht in den Vordergund kommt (im Debugmodus allerdings schon)
Gruß Florian
Todas as Respostas
-
segunda-feira, 15 de novembro de 2010 11:10
Hallo,
ich hatte ein ähnliches Problem. Ich habe in meiner Funktion das Fenster selber minimiert, dann meine Aufgaben erledigt und am Ende der Funktion das Dokument (nicht die Anwendung) wieder nach oben geholt. Solange das in einer Function oder Sub passiert geht es. Wenn ich versuche den Fokus in einer anderen Sub zu holen geht es MANCHMAL auch nicht. Aber ich habe dass System noch nicht entdeckt :-)
Grüße
Carsten
-
terça-feira, 16 de novembro de 2010 10:25
Hallo Carsten,
erstmal vielen Dank für deine Antwort (Ich dachte schon es kommt gar keine mehr)
Ich habe es mit word.Application.WindowState versucht, und auch mit doc.Activate() . Aber sobald ich mein AddIn nicht mehr im Debug-Modus ausführe, bekomme ich Word nicht in den Vordergrund.
Ich öffne ja für mein neues Dokument in einem neuen Word-Fenster. Kann ich dann evtl. das "alte" Fentster irgendwie schließen (sodass das neue dann nicht mehr vom alten verdeckt wird?)
Gruß Florian -
domingo, 6 de fevereiro de 2011 23:04
Hallo,
generell werden solche Anwendungen nur mit word.Visible = True in den Vorderung geholt.
Daher wäre der Rest deines Codes interessant.
Cheers, Jörn Bosse
Microsoft Studentpartner -
quarta-feira, 9 de fevereiro de 2011 14:22
Das blinken in der Taskleiste zeigt nur, dass dein Fenster aktiv ist, welches aber nicht im Vordergrund steht.
Ich würde ggf. auf WinAPI zurückgreifen.
setForgroundWindow(handle) holt ein Fenster nach vorne und dann das Fenster noch wie du es bereits gemacht hast, aktivieren.
http://msdn.microsoft.com/en-us/library/ms633539(v=vs.85).aspx
Mit der WinAPI ShowWinow, kannst du zudem noch das den Fensterstatus von minimiert auf Normal oder maximiert ändern.
Leider habe ich für die Windows API's gerade nicht die VBA deklaration zur Hand, aber in Google dürftest du die finden.
-
quarta-feira, 9 de fevereiro de 2011 14:26Ich würde alternativ versuchen das Dokument mit Visible=False zu verbergen und mit Visible = True wieder sichtbar zu machen.
Cheers, Jörn Bosse
Microsoft Studentpartner -
segunda-feira, 14 de maio de 2012 18:33
hallo allerseits,
mein beitrag kommt zwar um einiges verspätet, aber vielleicht ist er noch anderen besuchern dieses threads mit dem selben problem nützlich.
das fenster war offensichtlich aktiviert, aber nicht im vordergrund.
zunächst die benötigten winAPI
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr End Function <DllImport("user32.dll", CharSet:=CharSet.Ansi, SetLastError:=True, ExactSpelling:=True)> Public Shared Function SetForegroundWindow(ByVal hwnd As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean End Functionund hier die befehlszeilen, um das fenster damit in den vordergrund zu rücken
Dim fenstertitel As String = word.ActiveWindow.Caption & " - " & word.Caption Dim fensterHandle As IntPtr = FindWindow("OpusApp", fenstertitel) SetForegroundWindow(fensterHandle)
grüsse, peter

