Einzelnes Adobe Reader Fenster schließen

  • Sonstige

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Einzelnes Adobe Reader Fenster schließen

    Hallo,

    Ich brauche einen Script, mit dem man ein einzelnes Adboe Reader Fenster schließen kann. Bekannt ist der Name, der geöffneten datei. Es sollen nicht alle Fenster geschlossen werden, also nicht den Prozess beenden. ( Das zu schließende Fenster wird vorher mit Shell geöffnet).

    MfG



    ibot3
    Hey,

    in Deinem anderen Thread wurde Dir gesagt, Du sollst die Process-Klasse verwenden. Warum nun wieder mit diesem Shell-Müll? Verwende aus der Process-Klasse die statische Funktion "Start". Diese gibt Dir eine Referenz auf ein Process-Objekt zurück, welches Du beliebig wieder beenden kannst.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Shell ist OK in VBA.

    Vielleicht hilft dir die ShellAndWait-Routine von Pearson weiter:
    cpearson.com/excel/ShellAndWait.aspx

    Da gibt's einen Timeout-Parameter, der den Prozess nach einer bestimmten Zeit automatisch abschiesst.
    Allerdings wird die aufrufende Anwendung während der Ausführung blockiert.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()

    SpaceyX schrieb:

    Dann solltest Du vielleicht dazu schreiben, dass es sich um VBA handelt.

    Naja wenn dem nicht so wäre würde er wahrscheinlich nicht im VBA unterforum schreiben.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Lösung gefunden:

    Quellcode

    1. Private Sub UserForm_Click()
    2. Dim oWdApp As Word.Application
    3. Dim oTask As Task
    4. Dim bCreate As Boolean
    5. On Error Resume Next
    6. Set oWdApp = GetObject(, "Word.Application")
    7. On Error GoTo 0
    8. If oWdApp Is Nothing Then
    9. Set oWdApp = CreateObject("Word.Application")
    10. oWdApp.Visible = False
    11. bCreate = True
    12. End If
    13. For Each oTask In oWdApp.Tasks
    14. If InStr(oTask.Name, "tost.pdf") > o Then
    15. oTask.Close
    16. End If
    17. Next
    18. If bCreate Then oWdApp.Quit
    19. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ibot3“ ()

    ibot3 schrieb:

    dass es in allen Office Programmen Funktioniert und nicht nur in Word

    Das funktioniert aus allen Office-Anwendungen.
    Entweder holt es sich eine bestehende Word-Instanz oder erzeugt eine neue.

    Aber die Methode ist schon etwas von hinten durch die Brust ins Auge, wenn man eine Word-Instanz startet, um eine Task-Liste zu bekommen.
    Das ist so ähnlich, wie wenn du auf den Sonntagsspaziergang die 50kg-Himalaya-Ausrüstung mitnimmst, weil du weisst, dass da eine Schlechtwetterjacke drin ist.
    Die Jacke allein wäre wesentlich leichter zu tragen.

    Und für die Light-Weight-Variante hast du oben doch einen Link bekommen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    ibot3 schrieb:

    dass es in allen Office Programmen Funktioniert und nicht nur in Word

    Das funktioniert aus allen Office-Anwendungen.
    Entweder holt es sich eine bestehende Word-Instanz oder erzeugt eine neue.

    Aber die Methode ist schon etwas von hinten durch die Brust ins Auge, wenn man eine Word-Instanz startet, um eine Task-Liste zu bekommen.
    Das ist so ähnlich, wie wenn du auf den Sonntagsspaziergang die 50kg-Himalaya-Ausrüstung mitnimmst, weil du weisst, dass da eine Schlechtwetterjacke drin ist.
    Die Jacke allein wäre wesentlich leichter zu tragen.

    Und für die Light-Weight-Variante hast du oben doch einen Link bekommen.

    Nein es funktioniert NICHT aus allen Office anwendungen. Ich brauche es in Outlook, und beim Obenbesagten Link gibt es folgende Fehlermeldung:
    "Objekt unterstützt diese Eigenschaft oder Methode nicht."
    Wenn du jetzt noch mit der Information heraus rückst, in welcher Zeile der Fehler kommt...

    Ich hätte jetzt eher gedacht, dass es beim Dim schon knallt, weil Task ein Objekt der Word-Application ist.
    Dimensioniere halt oTask als Variant oder als Object.


    Wenn du schon mit dem Himalaya-Rucksack spazieren gehst, solltest du ihn eigentlich selbst packen können.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Quellcode

    1. Public Function KillAllAppsByCaption _
    2. (Optional BesidesThisOne As Boolean = True, _
    3. Optional Caption = "test.pdf")
    4. '
    5. ' Schliesst alle Anwendungsfenster mit einem bestimmten Titel
    6. ' (Nur der Anfang des Titels in der spezifizierten Länge wird
    7. ' untersucht, d.h., der tatsächliche Titel kann länger sein).
    8. '
    9. Dim hWnd As Long, tbuf As String, RetVal As Long
    10. hWnd = GetDesktopWindow()
    11. hWnd = GetWindow(hWnd, GW_CHILD)
    12. Do While hWnd <> 0
    13. tbuf = String(255, 0)
    14. RetVal = GetWindowText(hWnd, tbuf, Len(tbuf))
    15. If RetVal > Len(Caption) Then RetVal = Len(Caption) ' ggf. abschneiden
    16. If Mid(tbuf, 1, RetVal) = Caption Then
    17. If Not BesidesThisOne Or hWnd <> Application.hWndAccessApp Then
    18. PostMessage hWnd, WM_CLOSE, 0&, 0&
    19. End If
    20. End If
    21. hWnd = GetWindow(hWnd, GW_HWNDNEXT) ' nächstes Fenster
    22. Loop
    23. End Function

    Der Fehler kommt in Zeile 17.
    Aufgerufen mit:

    Quellcode

    1. KillAllAppsByCaption True, "test.pdf"



    petaod schrieb:

    Ich hätte jetzt eher gedacht, dass es beim Dim schon knallt, weil Task ein Objekt der Word-Application ist.
    Dimensioniere halt oTask als Variant oder als Object.
    könntest du mir da ein Beispiel geben?

    ibot3 schrieb:

    If Not BesidesThisOne Or hWnd <> Application.hWndAccessApp Then
    Diese Passage und das dazugehörende End If kannst du ganz weglassen.
    Die ist dafür gedacht, wenn du es aus Access aufrufst, dass du dich nicht selbst abschiesst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --