Problem: 2 Browserfenster sollen auf 2 Monitoren beim Starten fullscreen öffnen

  • Hallo Leute,

    ich bin azubine im 1. Lehrjahr und habe eine Aufgabe im Betrieb erhalten,
    und zwar soll ich ein kleines Script erstellen,
    was dafür sorgt, dass nach dem Hochfahren des Rechners
    automatisch 2 Browserfenster im Firefox (mit 2 URL) auf 2 Monitoren fullscreen öffnet.

    Ich habe es mit einer kleinen .bat-Datei versucht:
    @echo off
    start [Pfad zur firefox.exe] [1. URL]
    start [Pfad zur firefox.exe] [2. URL]
    => die Datei als .bat gespeichert und in den Autostart bei Windows 7 verschoben

    Leider öffneten sich die Fenster weder fullscreen noch auf 2 verschiedenen Monitoren.

    Man hat mir geraten, es mit "autoit" zu versuchen. Leider habe ich noch keine Programmierkenntnisse
    und auch bei Google habe ich nichts gefunden, was ich verstanden habe.
    Ich hatte noch nie etwas mit Skriptsprachen oder "autoit" zu tun und kenne weder die Befehle noch die Syntax.

    Wer kann mir weiterhelfen?

    Benötige ich "Autoit" (Full Installation)? Ist da ein Editor, Compiler und Nutzeroberfläche dabei
    oder muss ich weitere Programme runterladen?

    Vielen lieben Dank im Voraus!

    Liebe Grüße
    azubine

    • Offizieller Beitrag

    Hier eine kleine Hilfe, den Rest schaffst du allein.

    Spoiler anzeigen
    [autoit]

    ; 2 Urls auf 2 Monitoren
    #Region ;************ Includes ************
    #Include <Array.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #EndRegion ;************ Includes ************

    [/autoit] [autoit][/autoit] [autoit]

    Global $url = 'www.autoit.de'
    Global $url1 = 'www.autoitscript.com'
    Global $aScreenResolution

    [/autoit] [autoit][/autoit] [autoit]

    $aScreenResolution = _DesktopDimensions()

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite("Example of _DesktopDimensions():" & @CRLF & _
    "Number of monitors = " & $aScreenResolution[1] & @CRLF & _
    "Primary Width = " & $aScreenResolution[2] & @CRLF & _
    "Primary Height = " & $aScreenResolution[3] & @CRLF & _
    "Secondary Width = " & $aScreenResolution[4] & @CRLF & _
    "Secondary Height = " & $aScreenResolution[5] & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    $pid = Run('"c:\Program Files (x86)\Mozilla Firefox\firefox.exe "' & $url)
    ConsoleWrite($pid & ' ' & ProcessExists('firefox.exe')& @CRLF)
    Sleep(1500)
    $re = _WinGetHandleByPID(ProcessExists('firefox.exe'))
    ;~ ConsoleWrite(@error & @CRLF)
    ;~ _ArrayDisplay($re)
    WinMove($re[1][1], '', 100, 100) ; an Position 100, 100 verschieben
    Sleep(1000)
    WinMove($re[1][1], '', $aScreenResolution[2], 0)

    [/autoit] [autoit][/autoit] [autoit]

    ; #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _DesktopDimensions
    ; Description ...: Returns an array containing information about the primary and virtual monitors.
    ; Syntax ........: _DesktopDimensions()
    ; Return values .: Success - Returns a 6-element array containing the following information:
    ; $aArray[0] = Number of elements.
    ; $aArray[1] = Total number of monitors.
    ; $aArray[2] = Width of the primary monitor.
    ; $aArray[3] = Height of the primary monitor.
    ; $aArray[4] = Total width of the desktop including the width of multiple monitors. Note: If no secondary monitor this will be the same as $aArray[2].
    ; $aArray[5] = Total height of the desktop including the height of multiple monitors. Note: If no secondary monitor this will be the same as $aArray[3].
    ; Author ........: guinness
    ; Remarks .......: WinAPI.au3 must be included i.e. #include <winapi.au3>
    ; Related .......: @DesktopWidth, @DesktopHeight, _WinAPI_GetSystemMetrics
    ; Example .......: Yes
    ; ===============================================================================================================================
    Func _DesktopDimensions()
    Local $aReturn[6] = [5, _
    _WinAPI_GetSystemMetrics($SM_CMONITORS), _ ; Number of monitors.
    _WinAPI_GetSystemMetrics($SM_CXSCREEN), _ ; Width or Primary monitor.
    _WinAPI_GetSystemMetrics($SM_CYSCREEN), _ ; Height or Primary monitor.
    _WinAPI_GetSystemMetrics($SM_CXVIRTUALSCREEN), _ ; Width of the Virtual screen.
    _WinAPI_GetSystemMetrics($SM_CYVIRTUALSCREEN)] ; Height of the Virtual screen.
    Return $aReturn
    EndFunc ;==>_DesktopDimensions

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _WinGetHandleByPID($vProcess, $nShow = 1)
    ; Get Window Handle by PID
    ; Author Hubertus
    ; derived from Smoke_N's script with the same name,
    ; but to handle more than one process with the same name
    ; and to return handle of newest window ($nShow = 2).
    ;
    ; $vProcess = Processname(e.g. "Notepad.exe") or Processnumber(e.g. 4711 )
    ; $nShow = -1 "All (Visble or not)", $nShow = 0 "Not Visible Only", $nShow = 1 "Visible Only", $nShow = 2 "return handle of newest window "
    ; @error = 0 Returns array of matches. Array[0][0] and @extended shows number of matches.
    ; @error = 0 and $nShow = 2 return handle of newest window
    ; Array[n][0] shows windows title. Array[n][1] shows windows handle. n = 1 to @extended
    ; @error = 1 Process not found.
    ; @error = 2 Window not found.
    If Not ProcessExists($vProcess) Then Return SetError(1, 0, 0) ; no matching process
    Local $iWinList, $aWinList = WinList()
    Local $iResult, $aResult[UBound($aWinList)][2]
    Local $iProcessList, $aProcessList = ProcessList($vProcess)
    If $aProcessList[0][0] = 0 Then Local $aProcessList[2][2] = [[1, 0],["", $vProcess]]
    For $iWinList = 1 To $aWinList[0][0]
    For $iProcessList = 1 To $aProcessList[0][0]
    If WinGetProcess($aWinList[$iWinList][1]) = $aProcessList[$iProcessList][1] Then
    If $nShow > -1 And Not $nShow = (2 = BitAND(WinGetState($aWinList[$iWinList][1]), 2)) Then ContinueLoop
    $iResult += 1
    $aResult[$iResult][0] = $aWinList[$iWinList][0]
    $aResult[$iResult][1] = $aWinList[$iWinList][1]
    EndIf
    Next
    Next
    If $iResult = 0 Then Return SetError(2, 0, 0) ; no window found
    ReDim $aResult[$iResult + 1][2]
    $aResult[0][0] = $iResult
    If $nShow = 2 Then Return SetError(0, $iResult, $aResult[1][1])
    Return SetError(0, $iResult, $aResult)
    EndFunc ;==>_WinGetHandleByPID

    [/autoit]
  • Hallo,

    habe hier auch mal so was in der Art gemacht ...
    Ganz einfach ... :) die Webseiten sind als Beispiel so gewählt ...

    Mega war aber schneller mit seiner schöneren Lösung :o)

    [autoit]


    ;Bildschirm 1
    $x1 = 0
    $y1 = 0
    $titel1 = "Welcome to ALDI - Mozilla Firefox" ; der Anzeigetitel der Webseite
    ;Bildschirm 2
    $x2 = 1024 ; hier die Zahl entsprechend, dass das zweite Fenster in den zweiten Bildschirm passt
    $y2 = 0
    $titel2 = "NETTO.de - Nur echt mit dem Scottie. - Mozilla Firefox" ; der Anzeigetitel der Webseite
    ; startet firefox 1 als neues Fenster und übergibt die URL
    Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe -new-window http://www.aldi.de")
    WinWait($titel1)
    WinMove($titel1,"", $x1 , $y1)
    WinSetState($titel1, "", @SW_MAXIMIZE) ; Maximiert das Fenster
    ; startet firefox 2 als neues Fenster und übergibt die URL
    Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe -new-window http://www.netto.de")
    WinWait($titel2)
    WinMove($titel2,"", $x2 , $y2)
    WinSetState($titel2, "", @SW_MAXIMIZE) ; Maximiert das Fenster

    [/autoit]

    gruß gmmg

  • Vielen Dank für die Antworten und die Mühe.
    Die Variante von "Mega" übersteigt mein Können um ein Vielfaches :S

    gmmg: Ich habe das Script so nachstellen wollen (als .au3-Datei gespeichert und in den Autostart),
    leider öffnete sich dann nur ein Fenster. :(

    Was ich nicht so ganz verstehe: Wieso x1 = 0 und y1 = 0 sowie y2 = 0? Sind das die Koordinaten für die "Monitorposition"?
    1024 verstehe ich bei x2...

    An welcher Stelle was das Script genau: URL 1 auf Monitor 1 und URL 2 auf Monitor2?

    Dankeschön!

  • @azubine

    schau dir in der Autoit Hilfe mal die Befehle WinWait, WinMove, WinSetState an ...
    Wobei WinSetState nur das Fenster Maximieren soll ...

    $x1 und $y1 sind jeweils die Koordinaten ... bedeutet , dass das erste Fenster am Bildschirm links Oben bei Pixel 0 beginnt
    $x2 und $y2 heißt, dass das zweite Fenster bei Pixel 1168 beginnt .. je nachdem, wie groß die Auflösung vom Bildschirm ist, muss dass angepasst werden ...

    Probiere da doch einfach mal bisschen mit den Koordinaten hin und her ...
    Hab mal noch paar Kommentare eingefügt ... und ein Bild angehangen ..

    Spoiler anzeigen
    [autoit]


    ;-----Anfang Bildschirm 1-----
    $x1 = 0
    $y1 = 0
    $titel1 = "Welcome to ALDI - Mozilla Firefox" ; Fenstertitel des Firefox Fenster Aldi.de

    [/autoit] [autoit][/autoit] [autoit]

    Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe -new-window http://www.aldi.de") ; Achtung, der Programmpfad von firefox kann je nach Betriebssystem, 32Bit/64Bit variieren
    WinWait($titel1)
    WinMove($titel1,"", $x1 , $y1)
    WinSetState($titel1, "", @SW_MAXIMIZE)
    ;-----Ende Bildschirm 1-----

    [/autoit] [autoit][/autoit] [autoit]

    ;-----Anfang Bildschirm 2-----
    $x2 = 1168
    $y2 = 0
    $titel2 = "NETTO.de - Nur echt mit dem Scottie. - Mozilla Firefox" ; Fenstertitel des Firefox Fenster Netto.de

    [/autoit] [autoit][/autoit] [autoit]

    Run("C:\Program Files (x86)\Mozilla Firefox\firefox.exe -new-window http://www.netto.de") ; Achtung, der Programmpfad von firefox kann je nach Betriebssystem, 32Bit/64Bit variieren
    WinWait($titel2)
    WinMove($titel2,"", $x2 , $y2)
    WinSetState($titel2, "", @SW_MAXIMIZE)
    ;-----Ende Bildschirm 2-----

    [/autoit]

    Anbei auch nochmal die au3 Datei ... Diese sollte bei dir so funktionieren ..

    gruß gmmg

  • Vielen Dank für die Antworten und die Mühe.
    Die Variante von "Mega" übersteigt mein Können um ein Vielfaches :S

    gmmg: Ich habe das Script so nachstellen wollen (als .au3-Datei gespeichert und in den Autostart),
    leider öffnete sich dann nur ein Fenster. :(

    Was ich nicht so ganz verstehe: Wieso x1 = 0 und y1 = 0 sowie y2 = 0? Sind das die Koordinaten für die "Monitorposition"?
    1024 verstehe ich bei x2...

    An welcher Stelle was das Script genau: URL 1 auf Monitor 1 und URL 2 auf Monitor2?

    Dankeschön!

    x1 = 0 == > Das Programm öffnet Firefox bei zwei Bildschirmen ganz links vom ersten Monitor
    y1 = 0 == > Das Programm öffnet Firefox bei zwei Bildschirmen ganz oben vom ersten Monitor
    ----------
    x1 und y1 = Ganz links oben im ersten Monitor

    x2 = 1024 (wenn du eine 1024x768 hast) ==> Das Programm öffnet Firefox bei zwei Bildschirmen ganz links vom zweiten Monitor
    y2 = 0 == > Das Programm öffnet Firefox bei zwei Bildschirmen ganz oben vom zweiten Monitor
    ---------
    x2 und y2 = Ganz links oben im zweiten Monitor

    Das mit den URL's wird dem Run mitgegeben, und das Skript wartet, bis der Firefox da ist, damit er es an die richtige Position "verschieben" kann. Er weiß anhand des Fenstertitels, welcher Firefox wohin gehört. Ist das Fenster an der richtigen Position, wird es dort maximiert. Ist leider etwas statisch, das Thema: wird die Homepage überarbeitet, und ändert sich der Fenstertitel, wird das Skript nicht mehr funktionieren.

    Ich hoffe, ich konnte helfen.

    Einmal editiert, zuletzt von DasIch (19. Dezember 2013 um 16:44)

  • @Robert

    besser hätte ich es nicht erklären können!
    man könnte ja den Titel noch mit WinGetTitle usw. auslesen ...

    Es wurde ja nicht angegeben, welche Webseiten dargestellt werden sollen, kann ja auch was internes sein ...

    gruß gmmg