web-dev-qa-db-fra.com

Comment ouvrir deux instances du mode kiosque Chrome sur différents écrans (Windows)

Nous développons une application Web qui doit être ouverte dans deux instances de navigateur différentes, chacune sur un écran différent. De toute évidence, le PC que nous utilisons a déjà le double affichage et les deux moniteurs ont la même taille et la même résolution.

L'idée est que dès que Windows démarre, les deux applications doivent s'ouvrir immédiatement en plein écran. Notre navigateur préféré est Chrome, car il compte plusieurs commandes qui pourraient nous aider à accomplir cette tâche.

Nous avons réussi à ajouter aux programmes de démarrage deux raccourcis qui ouvrent deux instances en mode kiosque, mais nous n’avons pas été en mesure de choisir l’affichage à afficher.

Les raccourcis ont cette cible: 

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\temp --kiosk www.domain.com --new-window "%1" --window-position=0,0

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:\temp --kiosk www.domain2.com --new-window "%2" --window-position=1680,0

Afin d'ouvrir deux instances, chromes doit créer un fichier temporaire contenant les informations de l'instance à ouvrir (--user-data-dir=c:\temp)

Nous avons essayé d'utiliser (--window-position=1680,0) pour spécifier où ouvrir l'instance, mais il semble que Chrome accordera la priorité à la dernière position où la dernière instance a été ouverte. Les deux instances s'ouvrent donc dans la même fenêtre, quelle que soit la commande.

Nous avons trouvé ce site avec une liste de toutes les commandes disponibles, mais la liste est énorme et nous ne savons même pas ce que nous recherchons: 

http://peter.sh/experiments/chromium-command-line-switches/

J'ai trouvé cette commande: --display=:0.0 | --display=:0.1 Mais cela ne semble pas fonctionner ou je ne l'utilise pas correctement

Des idées? Merci.

17
multimediaxp

J'ai le même problème aussi. Cette réponse: https://stackoverflow.com/a/3750187/1305565 m'a inspiré pour créer son propre script PowerShell pour une utilisation plus facile.

Prochainement

Le script effectue les opérations suivantes:

  1. Démarrer une instance de Chrome via un script
  2. Maintenant, utilisez WinApi pour trouver la fenêtre démarrée et déplacez-la vers l'écran souhaité
  3. Envoyez la touche F11 à la fenêtre déplacée pour la faire passer en plein écran (nous pourrions déjà lancer Chrome en mode plein écran, mais déplacer la fenêtre dans ce mode ne serait pas si trivial)
  4. Faites la même chose avec d'autres instances, en spécifiant l'URL nécessaire.

Script final

Les définitions de fonctions sont cachées dans Dll et dans un autre script d'assistance. (téléchargez-les depuis GitHub en utilisant le lien ci-dessus)

$chromePath = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
$chromeArguments = '--new-window --incognito'

# &taskkill /im chrome* /F 
Chrome-Kiosk 'http://google.com' -MonitorNum 1 
Chrome-Kiosk 'http://http://www.bbc.com/' -MonitorNum 2 
11
Oleksandr

Ce code a bien fonctionné pour moi:

start C:\Users\terminal\AppData\Local\Google\Chrome\Application\chrome.exe --app="http://www.domain1.com" --window-position=0,0 --kiosk --user-data-dir=c:/monitor1

start C:\Users\terminal\AppData\Local\Google\Chrome\Application\chrome.exe --app="http://www.domain2.com" --window-position=1680,0 --kiosk --user-data-dir=c:/monitor2

Je pense que l'ordre des paramètres est pertinent.

11
serxio

Pour ce faire, le moyen le plus simple consiste à utiliser 2 répertoires de données différents. Vous pouvez ou non vouloir supprimer les préférences avant le lancement. Si vous le faites, votre script peut contrôler l'emplacement des écrans. Si vous ne le faites pas, alors elles peuvent être positionnées manuellement et il se souviendra de la position des deux fenêtres séparément:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:/screen1 --start-fullscreen --new-window www.domain.com --new-window "%1" --window-position=0,0

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --user-data-dir=c:/screen2 --start-fullscreen --new-window www.domain2.com --new-window "%2" --window-position=1680,0

Notez que j'ai aussi utilisé --start-fullscreen au lieu de kiosk et --new-window. Vous pouvez ou non avoir besoin de ceux-ci.

6
Garr Godfrey

J'ai beaucoup de mal à trouver une réponse moi-même.

La solution la plus simple, puisque vous utilisez Windows, que j'ai pu trouver, a été de créer un fichier batch + VBScript qui imitera le raccourci Win + Flèches pour déplacer une fenêtre vers le deuxième écran. Voici un article très bien écrit de Tech-net (Le raccourci est spécifique à Win-7, je crois, mais il existe aussi des raccourcis pour les fabricants de cartes graphiques)

Cependant, j’ai trouvé un programme qu’un autre forum prétend pouvoir créer des raccourcis d’application qui se lancent dans une fenêtre spécifique appelée DisplayFusion, consultez-le

Vous pouvez également utiliser l'utilitaire de ligne de commande mentionné ici sur le superutilisateur <--- Probablement la méthode la plus rapide

J'espère que tout cela aide,

2
Aaron Gillion

Je cours dans le même problème et ai installé une bonne solution avec les drapeaux de ligne de commande. La solution de https://stackoverflow.com/a/29646543/3634274 fonctionne également très bien, mais elle nécessite une configuration à chaque fois que je souhaite installer de nouvelles stations multimonitor et que je ne possède pas d'icônes nommées chaque application.

J'utilise une combinaison de certains indicateurs de ligne de commande et cela fonctionne:

Moniteur 1:

--user-data-dir=C:\temp\App1
--app="http://appxy.appserver.my?station=PC-MYWORKSTATION&theme=dark"
--incognito
--window-position=0,0
--start-fullscreen

Moniteur 2:

--user-data-dir=C:\temp\App2
--app="http://appxy.appserver.my?station=PC-MYWORKSTATION&theme=light"
--incognito
--window-position=2560,0
--start-fullscreen

Il est important d’utiliser des profils d’utilisateur complètement séparés, car lorsque vous ouvrez votre Chrome avec votre profil ouvert, il ne démarre pas en tant que propre instance. Avec cette configuration, je peux utiliser mon chrome tel quel et ouvrir mes applications sur le deuxième ou le troisième moniteur, par exemple. comme des applications de surveillance sur lesquelles je veux seulement afficher des choses.

Pour faciliter la tâche de la configuration, j’ai écrit un script PowerShell qui ne crée que le raccourci avec une icône:

# Example Call:
#
# Monitor 1
# .\createShortcut.ps2 -AppName "MyApp 1" -AppPath "http://google.com" -StartFullScreen $true -WindowPosition "0,0"
# .\createShortcut.ps2 -AppName "MyApp 1" -AppPath "http://google.com" -AppIcon "\\domain.local\icons\myapp.ico" -StartFullScreen $true -WindowPosition "0,0"
#
# Monitor 2
# .\createShortcut.ps2 -AppName "MyApp 2" -AppPath "http://google.com" -StartFullScreen $true -WindowPosition "2560,0"
# .\createShortcut.ps2 -AppName "MyApp 2" -AppPath "http://google.com" -AppIcon "\\domain.local\icons\myapp.ico" -StartFullScreen $true -WindowPosition "2560,0"

param(
  [string]$AppName,
  [string]$AppPath,
  [string]$AppIcon,
  [boolean]$StartFullscreen,
  [string]$WindowPosition
)

$AppArgs = " --incognito";

if($WindowPosition) {
  $AppArgs += " --window-position=$WindowPosition"
}

if($StartFullscreen -eq $true) {
  $AppArgs += " --start-fullscreen"
}

$userDir = "C:\temp\$AppName"
Write-Host "Create Folder:"$userDir
New-Item -ItemType directory -Path $userDir -Force > $null
$scArguments = "--user-data-dir=`"$userDir`" --app=`"$AppPath`"$AppArgs"

Write-Host "Argmunets: $scArguments"
$Shell = New-Object -ComObject WScript.Shell
$ShortCut = $Shell.CreateShortcut("$env:USERPROFILE\Desktop\$AppName.lnk")
$ShortCut.TargetPath = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
$ShortCut.Arguments = $scArguments
$ShortCut.WorkingDirectory = "C:\Program Files (x86)\Google\Chrome\Application"
$ShortCut.WindowStyle = 1
if ($AppIcon.Length -gt 0) {
  $ShortCut.IconLocation = $AppIcon
}
$shortCut.Save()

J'espère que cette solution aidera tous ceux qui recherchent une solution similaire.

Last but not least qu'est-ce que ce script?

  • crée le répertoire de données utilisateur silencieusement
  • concat les paramètres de ligne de commande
  • crée le raccourci avec une icône (facultatif) sur le bureau
0
JohnnyDevNull