web-dev-qa-db-ja.com

指定された画面/座標でブラウザウィンドウを開きます

顧客は、ワークステーションごとに6画面のセットアップを持っており、起動時またはショートカットの呼び出し時に、Webアプリのさまざまなページを各画面で自動的に開くことを望んでいます。 (ターゲットのWebブラウザーはChromeである可能性があります)。

Javascript window.openを使用してこれを行うことは可能かどうか疑問に思いましたが、考えられる問題の1つは、ポップアップブロッカーをオンにしてタブブラウジングを希望する場合です。 (OK、これらはオーバーライドできますが、そのような構成は現在制御できません...)

したがって、質問は次のとおりです。6つの画面(それぞれが異なるURLを指している)内の指定された座標でブラウザの複数のインスタンスを開くためのスクリプト(バッチファイルなど)を作成できますか?

[これは基本的に https://askubuntu.com/questions/68354/is-there-any-way-to-specify-which-workspace-and-or-window-to-launch-と同じ質問です。 a-program-in ただし、UbuntuではなくWindowsの場合。]

3
Steve Chambers

ちょうどこれを見つけました:

https://stackoverflow.com/questions/10392620#20466454

サードパーティのツールと非常に複雑なバッチスクリプトに依存しているため、私が望んでいたものとは異なりますが、これまでのところ最高です...

編集:fixer1234の要求に応じて、リンクされた回答の関連部分を以下にコピーします。


このデモバッチファイルは、2つのエクスプローラーウィンドウを並べて開き、2つのモニターデスクトップのもう一方の(プライマリではない)モニターの画面の中央に配置します。バッチファイルの説明を読んでください。

注:このデモでは、左側のモニターがMonitor-1(タスクバーを含むプライマリアクティブモニター)であり、右側のモニターがMonitor-2(非プライマリアクティブモニター)であると想定しています。設定が異なる場合は、スクリプトを微調整してください。

使用したツール:
1。 MonitorInfoViewby Nir ​​Sofer(41 KB)..........。 .. ホームページ
2。 MultiMonitorToolby Nir ​​Sofer(102 KB)...........- ホームページ
3。 NirCmdby Nir ​​Sofer(43 KB)..........。 ................... ホームページ
4。 バッチファイル(6 KB)...........。 ..................................下記参照

4つのファイルすべてをディレクトリに収集します。
これはバッチファイルであり、任意のWindowsシステムで実行する準備ができています(インスタントデモで実行):

@echo off
REM ----- GIVE THIS CONSOLE WINDOW TITLE A UNIQUE STRING ID
title OPEN-2-Explorer-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-MONITOR-2-OF-A-MULTI-MONITOR-DESKTOP___20140101024519
pushd %~dp0

REM ----- HIDE THIS CONSOLE WINDOW (HOOKS THE WINDOW TITLE)
nircmd.exe win hide ititle "OPEN-2-Explorer-WINDOWS-SIDE-BY-SIDE-AND-CENTERED-ON-SCREEN-AT-MONITOR-2-OF-A-MULTI-MONITOR-DESKTOP___20140101024519"

REM ********************** DESCRIPTION ************************************
REM ** This script opens one or more windows with specified screen properties
REM ** at a chosen monitor of a multi-monitor desktop. The "X/Y position" and
REM ** "W/H size" of the windows are auto-set by this script and the monitor
REM ** resolutions are auto-calculated to suit. 
REM ** 'MonitorInfoView.exe' is the helper tool used to isolate the resolution
REM ** info of the primary monitor (containing the taskbar).
REM ** 'MultiMonitorTool.exe' is the helper tool used to capture the 
REM ** resolution info of all monitors and for isolating the resolution info
REM ** of the other (non-primary) monitor.
REM ** 'nircmd.exe' is the tool performing all the display trickery.
REM **
REM ** To Tweak this script, go to the code section named:
REM ** >>>>> USER INPUT/PREFERENCES ARE ALL SET HERE <<<<<
REM ***********************************************************************

REM ----- CLEAR ANY PREVIOUS JOB OUTPUTS IF THEY EXIST
if exist ~TMP.TXT type NUL > ~TMP.TXT
if exist ~TMP2.TXT type NUL > ~TMP2.TXT

REM ----- OUTPUT THE PRIMARY MONITOR (MONITOR-1) INFORMATION TO A TEXT FILE
MonitorInfoView.exe /hideinactivemonitors 1 /stext ~TMP.TXT

REM ----- ISOLATE THE RESOLUTION LINE OF MONITOR-1, REMOVING ALL THE OTHER LINES IN THE TEXT FILE
for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "Maximum Resolution"') do echo %%A>~TMP.TXT

REM ----- GET THE RESOLUTION NUMBERS OF MONITOR-1, AND SET THEM AS VARIABLES
for /f "tokens=3,4 delims=:X " %%A in ('type "~TMP.TXT"') do (
set _M1_SCREENW_=%%A
set _M1_SCREENH_=%%B
)

REM ----- OUTPUT INFO OF ALL MONITORS TO TEXT FILE
MultiMonitorTool.exe /stext ~TMP.TXT

REM ----- TRY REMOVING MONITOR-1 RESOLUTION LINE (KEEPING MONITOR-2 RESOLUTION LINE)
find.exe /i /v "%_M1_SCREENW_% X %_M1_SCREENH_%" < ~TMP.TXT > ~TMP2.TXT

REM ----- TRY ISOLATING MONITOR-2 RESOLUTION LINE (REMOVING ALL THE OTHER LINES IN THE TEXT FILE)
for /f "delims=" %%A in ('type "~TMP2.TXT" ^|find.exe /i "Maximum Resolution"') do echo %%A>~TMP2.TXT

REM ----- CONDITIONALLY GET THE RESOLUTION NUMBERS OF MONITOR-2, AND SET THEM AS VARIABLES ...
REM ----- CASE(A): IF MONITORS HAVE SAME RESOLUTION, ASSUME NO LINES HAVE STRING "Maximum Resolution". 
REM ----- CASE(B): IF MONITORS HAVE DIFFERENT RESOLUTION, ASSUME ONE LINE HAS STRING "Maximum Resolution".
find.exe /i /c "Maximum Resolution" ~TMP2.TXT
if %ERRORLEVEL% equ 1 (
set _M2_SCREENW_=%_M1_SCREENW_%&set _M2_SCREENH_=%_M1_SCREENH_%
) else (
for /f "tokens=3,4 delims=:X " %%A in ('type "~TMP2.TXT"') do set _M2_SCREENW_=%%A&set _M2_SCREENH_=%%B
)    


REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [BEGIN] <<<<<<<<<<<<

REM ----- MONITOR-2 LEFT WINDOW PROPERTIES

    set _M2_WINLEFT_=%SYSTEMDRIVE%
    set /a _M2_WINLEFTW_=(%_M2_SCREENW_% / 3) + 50
    set /a _M2_WINLEFTH_=(%_M2_SCREENH_% / 2) + 200
    set /a _M2_WINLEFTX_=(%_M1_SCREENW_%) + (%_M2_SCREENW_% - %_M2_WINLEFTW_%) / 5
    set /a _M2_WINLEFTY_=(%_M2_SCREENH_% - %_M2_WINLEFTH_%) / 2

REM ----- MONITOR-2 RIGHT WINDOW PROPERTIES

    set _M2_WINRIGHT_=%USERPROFILE%
    set /a _M2_WINRIGHTW_=(%_M2_SCREENW_% / 3) + 50
    set /a _M2_WINRIGHTH_=(%_M2_SCREENH_% / 2) + 200
    set /a _M2_WINRIGHTX_=(%_M2_WINLEFTX_%) + (%_M2_WINLEFTW_%)
    set /a _M2_WINRIGHTY_=(%_M2_SCREENH_% - %_M2_WINRIGHTH_%) / 2

REM ----- ADJUST THE WAIT TIME (MILLISECONDS) BETWEEN EACH WINDOW LAUNCH.
REM ----- IF TOO QUICK, THE FOLLOWING WINDOW WILL NOT SET IN THE CORRECT SCREEN POSITION.
REM ----- | FOR FAST SYSTEM: TRY 200 | NORMAL SYSTEM: TRY 400-600 | BLOATED SYSTEM: TRY 800-1200+

    set _WAITTIME_=400

REM ----- ON WINDOWS NT5 (XP, 2000), RUNNING Explorer WITH THE 'N' SWITCH WOULD RELIABLY GIVE
REM ----- YOU 1-PANE VIEW (HIDDEN LEFT NAV PANE). ALSO, SHOWING/HIDING OF THE LEFT NAV PANE WAS
REM ----- INSTANTLY TOGGLED BY AN ICON ON THE Explorer GUI TOOLBAR.
REM ----- ON WINDOWS NT6 (Vista, 7), Explorer WILL NOT OBEY YOUR COMMANDS AT ALL TIMES AND IT
REM ----- IS A "PITA" TO CONTROL THE GRAPHIC USER INTERFACE. 
REM ----- THIS INPUT SECTION IS A WORKAROUND TO FORCE AN INSTANCE OF NT6 Explorer TO BE
REM ----- TOGGLED TO A SPECIFIED VIEW.
REM ----- |
REM ----- | INSERT ONE OF THESE VALUES INTO THE VARIABLE _Explorer_VIEW_MYPREF_
REM ----- | | FOR Explorer 2-PANE VIEW (SHOW LEFT NAVPANE):  150100000100000000000000E5010000
REM ----- | | FOR Explorer 1-PANE VIEW (HIDE LEFT NAVPANE):  1501000000000000000000007B020000

    set _Explorer_VIEW_MYPREF_=1501000000000000000000007B020000

REM >>>>>>>>>> USER INPUT/PREFERENCES ARE ALL SET HERE [END] <<<<<<<<<<<<<<
REM >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


REM ----- RUN THE TASK . . .

REM ----- REGKEY 'HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Modules' DOES NOT EXIST IN NT5 OR EARLIER
REM ----- BUT TO ELIMINATE DOUBT WE WILL PERFORM A CONDITIONAL VERSION CHECK
for /f "tokens=2 delims=[]" %%A in ('ver') do set _THIS_OS_VERSTRING_=%%A
set _THIS_OS_VERSTRING_=%_THIS_OS_VERSTRING_:Version =%
for /f "tokens=1,2,3* delims=." %%A in ("%_THIS_OS_VERSTRING_%") do set _THIS_OS_MAJORVERSION_=%%A
if %_THIS_OS_MAJORVERSION_% leq 5 goto SKIP1

set _Explorer_VIEW_REGKEY_=HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Modules\GlobalSettings\Sizer
set _Explorer_VIEW_REGVAL_=PageSpaceControlSizer
if exist ~TMP.TXT type NUL > ~TMP.TXT
reg.exe query %_Explorer_VIEW_REGKEY_% > ~TMP.TXT
if %ERRORLEVEL% equ 1 goto SKIP1
for /f "delims=" %%A in ('type "~TMP.TXT" ^|find.exe /i "%_Explorer_VIEW_REGVAL_%"') do echo %%A>~TMP.TXT
for /f "tokens=1-3 delims= " %%A in ('type "~TMP.TXT"') do set _Explorer_VIEW_SYSTEMPREF_=%%C
reg.exe add %_Explorer_VIEW_REGKEY_% /v %_Explorer_VIEW_REGVAL_% /t REG_BINARY /d %_Explorer_VIEW_MYPREF_% /f 2>nul >nul
nircmd.exe wait %_WAITTIME_%

:SKIP1
nircmd.exe exec show "Explorer.exe" /n,%_M2_WINLEFT_%
nircmd.exe wait %_WAITTIME_%
nircmd.exe win setsize foreground %_M2_WINLEFTX_% %_M2_WINLEFTY_% %_M2_WINLEFTW_% %_M2_WINLEFTH_%
nircmd.exe wait %_WAITTIME_%
nircmd.exe exec show "Explorer.exe" /n,%_M2_WINRIGHT_%
nircmd.exe wait %_WAITTIME_%
nircmd.exe win setsize foreground %_M2_WINRIGHTX_% %_M2_WINRIGHTY_% %_M2_WINRIGHTW_% %_M2_WINRIGHTH_%


REM ----- RESET SYSTEM PREF, CLEAR MEMORY, CLEANUP, QUIT . . .

find.exe /i /c "%_Explorer_VIEW_REGVAL_%" ~TMP.TXT
if %ERRORLEVEL% equ 1 goto SKIP2
nircmd.exe wait %_WAITTIME_%
nircmd.exe wait %_WAITTIME_%
reg.exe add %_Explorer_VIEW_REGKEY_% /v %_Explorer_VIEW_REGVAL_% /t REG_BINARY /d %_Explorer_VIEW_SYSTEMPREF_% /f 2>nul >nul
:SKIP2
set _M1_SCREENW_=
set _M1_SCREENH_=
set _M2_SCREENW_=
set _M2_SCREENH_=
set _M2_WINLEFT_=
set _M2_WINLEFTX_=
set _M2_WINLEFTY_=
set _M2_WINLEFTW_=
set _M2_WINLEFTH_=
set _M2_WINRIGHT_=
set _M2_WINRIGHTX_=
set _M2_WINRIGHTY_=
set _M2_WINRIGHTW_=
set _M2_WINRIGHTH_=
set _WAITTIME_=
set _THIS_OS_VERSTRING_=
set _THIS_OS_MAJORVERSION_=
set _Explorer_VIEW_REGKEY_=
set _Explorer_VIEW_REGVAL_=
set _Explorer_VIEW_MYPREF_=
set _Explorer_VIEW_SYSTEMPREF_=
del /f /q ~TMP.TXT
del /f /q ~TMP2.TXT
popd
exit
1
Steve Chambers

ユーティリティ「CMDOWコマンドラインウィンドウユーティリティ」は、ブラウザウィンドウを開いて配置するための制御バッチファイルと組み合わせて、おそらく同様に機能します。

http://www.commandline.co.uk/cmdow/

DOSタイプのコマンドウィンドウを開いたり、名前を変更したり、再配置したりする、かなり複雑なバッチファイルを作成しました。各DOSウィンドウは、ストリーミングオーディオキャプチャユーティリティのインスタンスを表しています。

単一のバッチファイルは、「現在の」(最後に開いた)コマンドウィンドウの名前をタイムスタンプ付きの「古い」コマンドウィンドウ名に変更します。次に、「古い」ウィンドウを新しい画面位置に再配置します。次に、新しい「現在の」コマンドウィンドウが開始され、以前は「古い」ウィンドウで占められていた画面の場所に移動します。

を使用すると、画面の場所に基づいて、手動で閉じるための古いウィンドウを簡単に識別できます。複数の「古い」ウィンドウがアクティブな場合(バッチファイルを複数回実行した後)、すべての「古い」ウィンドウが同じ画面位置にスタックされます。これにより、バッチファイルが正しく実行されなかった場合に、「現在の」ウィンドウを閉じて「古い」ウィンドウをアクティブのままにするオプションも可能になります。

私はこれをコマンドウィンドウに使用していましたが、ブラウザウィンドウを含む他のすべてのウィンドウタイプで機能します。 CMDOWユーティリティと「@」ウィンドウ識別子の多数のコントロールについては、上記のWebページで説明されています。

以下は、使用する環境変数とCMDOWコマンドを指定するバッチファイルのごく一部です。バッチの問題の可能性を回避するために、使用している特定のバージョンを示すために、汎用cmdowユーティリティの名前をcmdow.v1.4.3に変更しました。 cmdowユーティリティは、バッチファイルと同じディレクトリにあります(特別なcmdowのインストールは必要ありません。ユーティリティを実行するだけです)。

REM --------------------------------
REM   SET THE BATCH CONTROL VARIABLES
set strInitialBatchWindow=STARTUP_INSTANCE_OF_stream-1(p)
set   strFinalBatchWindow=CURRENT_INSTANCE_OF_stream-1(p)
set   strBannerTextLine=Audio Stream  (for "Main" channel stream.)
set   strUsualRunPosition= 25 470
set   strRetirePosition= 25 270
set   strWindowSize=668 331
REM

  < Most of the batch setup details have been removed. >

REM move this window instance to it's final "Normal" runtime screen location.
cmdow.v1.4.3 @ /mov %strUsualRunPosition%
REM The following command resizes the current instance window.
cmdow.v1.4.3 @ /siz %strWindowSize%
0
Darrell