Access starten und maximieren

  • Hallo,

    ich hab 2 .accdb dateien die jeweils auf einen Bildschirm angezeigt und maximiert werden sollen. Jedoch funktioniert es nur mit .txt dateien und er startet bei den Access Dateien nur eine und Maximiert sie nicht.

    der Code funktioniert.

    Spoiler anzeigen

    ;Bild 1

    $x1 = 0

    $y1 = 0

    $titel1 = "Test.txt"


    ;Bild 2

    $x2 = -1920

    $y2 = 0

    $titel2 = "Test2.txt"

    ShellExecute("C:\Test\Test.txt")

    WinWait($titel1)

    WinMove($titel1,"", $x1 , $y1)

    WinSetState($titel1, "", @SW_MAXIMIZE)

    ShellExecute("C:\Test\Test2.txt")

    WinWait($titel2)

    WinMove($titel2,"", $x2 , $y2)

    WinSetState($titel2, "", @SW_MAXIMIZE)


    Der funktioniert nicht.

    Jetzt wollte ich fragen woran das liegen könnte.

    MfG

  • Hallo DDT

    ich denke mal das Skript bleibt bei WinWait hängen, weil das Fenster nicht gefunden wird. Du solltest bei solchen Problemen die Hilfe checken und schauen, was die einzelnen Funktionen im Erfolgs-/Fehlerfall zurückgeben. Dann kannst du darauf prüfen und dir das etwa in der Konsole anzeigen lassen.
    Schreib mal ganz oben ins Skript Opt("WinTitleMatchMode", 2) und probiere es noch einmal.

    Grüße autoiter

  • Danke es funktioniert. jedoch hätte ich noch ein anliegen, wenn die beiden Datenbanken offen sind soll er die schließen und dann erst öffnen.

    Hab ich da den richtigen Anatz?

  • Ne, ich denke nicht, dass das der richtige Ansatz ist.

    Statt alles in If Else zu setzen, würde ich nur auf die offenen Datenbanken prüfen und darauf warten, dass sie geschlossen sind (WinWaitClose). Sonst musst du das Skript ja erneut ausführen.

    Dabei würde ich auch auf die Datenbanken prüfen, um die es geht und die dann schließen statt random Access zu killen (WinClose oder WinKill).

    Grüße autoiter

  • Oder zum schließen der MSACCESS.exe so vorgehen.

    Hier wird die While Schleife so lange ausgeführt, bis kein Access Prozess mehr läuft.

    Code
    While 1
    
        If ProcessExists("MSACCESS.exe") Then
            ProcessClose("MSACCESS.exe")
        Else
            ;MsgBox(0,"","Springe aus schleife",2)
            ExitLoop
        EndIf
    WEnd

    Gruß gmmg

  • Ne, echt nicht.

    Wir kennen doch die Titel. Wenn man anfängt ganze Prozesse zu killen, fängt man sich doch ganz leicht Probleme ein. Heute sag ich mir "ach, es sind doch eh nur die beiden Fenster offen. Prozess killen reicht". Übermorgen habe ich aber weitere Fenster, die nicht gekillt werden sollen und mein Skript schließt sie.

    Es ist null Mehraufwand, die Fenster zu schließen, statt den Prozess zu killen.

    Grüße autoiter

  • gmmg

    eigentlich gibt es keinen Grund für eine Schleife, wenn man gezielt die Fenster schließt.

    Davon abgesehen antworte ich darauf auch nur, weil es wirklich extrem schlecht ist, so weit über das Ziel hinauszuschießen. ProcessClose ist hier einfach zu random. Eine schlechte Idee, die man nicht verfolgen sollte.

    Sorry, nicht böse gemeint.

    Grüße autoiter

  • benutze ich, jedoch muss man im Programm sein damit es sich aktualisiert und da es 2 sind

    hab ich mir das noch geschrieben

  • Warum so kompliziert?

    Code
    ShellExecute('Pfad zur access.exe', 'C:\Datenbanken\Datenbank1.accdb', "", $SHEX_OPEN, @SW_MAXIMIZE)

    Müsste doch eigentlich funktionieren (siehe @SW_MAXIMIZE).

    Und für das aktualisieren gibt es sicherlich Mechaniken in Access, die sich nutzen lassen könnten...

  • DDT

    Den Zusammenhang verstehe ich nicht.

    jedoch muss man im Programm sein damit es sich aktualisiert und da es 2 sind ... hab ich mir das noch geschrieben

    Was hat das Skript mit der Aussage zu tun. Sieht eher wie ein Versuch aus, einen Windows Energiesparplan auszuhebeln..

    Grüße autoiter

  • @autoiter: Das verstehe ich auch nicht böse gemeint :) Eine Schleife deshalb, weil die DB ja auch über verschiedene Pfade offen sein kann :)

    Wenn zum beispiel eine auf C:\ und eine Kopie auf D:\ oder übers Netzlaufwerk geöffnet ist, heißen die alle Instanzen bei mir alle wie im Beispiel "mitarbeiter:......"