デュアルモニターを使用していて、現在のウィンドウをまたがって、両方のモニターで1つの巨大なウィンドウとして表示したいと考えています。これをWindowsでネイティブに行う方法を誰かが知っていますか?
他の人が言っていることとは対照的に、これはマウスの下にあるウィンドウを最大化する無料の実用的なソリューションです。
(クレジットは、これらの驚くべき「自動」機能を書いた人のところに行きます-私はそれらを使用するビットを書いただけです。)
Autoitをダウンロードしてインストールします(フリーソフトウェア)。
http://www.autoitscript.com/site/autoit/
.au3ファイルを作成します。
これを内部に貼り付けます:
#include <misc.au3>
#include <Array.au3>
HotKeySet('{ESC}', '_Exit')
Global $WinText, $OldMouse[2], $NewMouse[2], $Windows, $x, $MyWin, $MyCoords
$NewMouse = MouseGetPos()
$title = _GetWin()
WinSetState($MyWin,"",@SW_RESTORE)
WinMove($MyWin,"",0,0,3840,1165)
Func _GetWin()
Local $Coords
ToolTip("")
$Mouse = MouseGetPos()
$OldMouse = $Mouse
$Windows = _WinList()
;_ArrayDisplay($Windows, "")
For $x = 1 To UBound($Windows)-1
$Coords = WinGetPos($Windows[$x][0], "")
If $Coords = -4 Then ExitLoop
If IsArray($Coords) Then
If $Mouse[0] >= $Coords[0] And $Mouse[0] <= ($Coords[0]+$Coords[2]) And $Mouse[1] >= $Coords[1] And $Mouse[1] <= ($Coords[1]+$Coords[3]) Then ExitLoop
EndIf
Next
If $x = UBound($Windows) Then $x -= 1
$MyWin = $Windows[$x][0]
$Control = _MouseGetCtrlInfo()
$Return = $Windows[$x][0] & @CRLF & $Control
Return $Return
EndFunc
Func _WinList()
Local $WinListArray[1][2]
$var = WinList()
For $i = 1 to $var[0][0]
If $var[$i][0] <> "" AND IsVisible($var[$i][1]) Then
Redim $WinListArray[UBound($WinListArray) + 1][2]
$WinListArray[UBound($WinListArray)-1][0] = $var[$i][0]
$WinListArray[UBound($WinListArray)-1][1] = $var[$i][1]
EndIf
Next
Return $WinListArray
EndFunc
Func IsVisible($handle)
If BitAnd( WinGetState($handle), 2 ) Then
Return 1
Else
Return 0
EndIf
EndFunc
Func _Exit()
Exit
EndFunc
Func _MouseGetCtrlInfo() ; get ID, Classe and Text of a control
Global $hWin = WinGetHandle($MyWin)
Global $sClassList = WinGetClassList($hWin)
Local $sSplitClass = StringSplit(StringTrimRight($sClassList, 1), @LF)
Local $aMPos = MouseGetPos()
;_ArrayDisplay($sSplitClass, "")
$MyCoords = ClientToScreen($hWin)
For $iCount = UBound($sSplitClass) - 1 To 1 Step - 1
Local $nCount = 0
If $sSplitClass[$iCount] = "WorkerW" Then ContinueLoop
While 1
$nCount += 1
$aCPos = ControlGetPos($hWin, '', $sSplitClass[$iCount] & $nCount)
If @error Then ExitLoop
$hCtrlWnd = ControlGetHandle ($hWin, "", $sSplitClass[$iCount] & $nCount)
If IsArray($aCPos) Then
If $aMPos[0] >= ($MyCoords[0]+$aCPos[0]) And $aMPos[0] <= ($MyCoords[0]+$aCPos[0] + $aCPos[2]) _
And $aMPos[1] >= ($MyCoords[1]+$aCPos[1]) And $aMPos[1] <= ($MyCoords[1]+$aCPos[1] + $aCPos[3]) Then
$aReturn = DllCall('User32.dll', 'int', 'GetDlgCtrlID', 'hwnd', $hCtrlWnd)
If @error Then Return "Err"
$Text = ControlGetText($hWin, '', $sSplitClass[$iCount] & $nCount)
If StringInStr($Text, @LF) Then $Text = "demasiado largo"
If IsArray($aReturn) Then Return 'ControlID: ' & $aReturn[0] & @CRLF & 'ClassNameNN: ' & $sSplitClass[$iCount] & $nCount & @CRLF & "Text: " & $Text
EndIf
EndIf
WEnd
Next
;_ArrayDisplay($sSplitClass, "")
Return "No Ctrl"
EndFunc
Func ClientToScreen($hWnd) ; get client area of a win relative to the screan
Local $Point, $aRes[2]
Local $cX, $cY
$Point = DllStructCreate("int;int")
DllStructSetData($Point, 1, $cX)
DllStructSetData($Point, 1, $cY)
DllCall("User32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "ptr", DllStructGetPtr($Point))
$aRes[0] = DllStructGetData($Point, 1)
$aRes[1] = DllStructGetData($Point, 2)
Return $aRes
EndFunc
次に、行を変更します
WinMove($ MyWin、 ""、0,0,3840,1165)
あなたの好みの値に。
次に、このファイルへのWindowsショートカットを作成し、右クリックして[プロパティ]を選択し、ショートカットを割り当てます(例:CTRL + ALT + UP)。
ウィンドウを小さなサイズに戻すには、手順を繰り返して2つ目のファイルを作成する必要があることがほとんどです。
お役に立てれば
Jeff Axelrodは 素晴らしいソリューション を使用します AutoHotKey を使用します
彼は ShiftWindows↑ すべてのディスプレイでウィンドウを最大化する組み合わせで、Windows 7を補完します。 Windows↑ 1つのモニターで選択したウィンドウを最大化するホットキー。
これが彼のコードです(Jeffに感謝します!):
;Shift + Windows + Up (maximize a window across all displays) https://stackoverflow.com/a/9830200/470749
+#Up::
WinGetActiveTitle, Title
WinRestore, %Title%
SysGet, X1, 76
SysGet, Y1, 77
SysGet, Width, 78
SysGet, Height, 79
WinMove, %Title%,, X1, Y1, Width, Height
return
使用デュアルモニターツール:これは無料のツールのセットです複数の画面設定を管理します。
スワップ画面ツールでは、「スーパーサイズのアクティブウィンドウ」にホットキーを割り当てて、最大化してすべてを占有することができます画面。
NVidiaビデオカードを使用している場合:
これで、最大化ボタンをクリックすると、両方のモニターが覆われます。タスクバーも両方のモニターをカバーします。バグがある場合は、モニターの左側にドラッグして垂直になるようにしてみてください(アイコンを小さくして「結合しない」を使用すると、より効果的に機能します)。
そのために無料のユーティリティVirtualScreenMaximizerを使用しています。
http://virtualscreenmax.codeplex.com/releases/view/2021
最大化と復元に使用するショートカットをカスタマイズできます。最大化すると、タスクバーの上にウィンドウが拡張されます。
少し遅いですが、Intel統合グラフィックスを使用している場合は、Intelグラフィックスコントロールパネルを開き、ディスプレイメニューを選択し、そこから複数のディスプレイを選択して、[コラージュ]を選択します。これにより、他のいくつかの選択肢と一緒に拡張するモニターを選択できます。
これが有効になっているスクリーンショットです。
クリックしてドラッグします。それ以外の場合は、高度なグラフィックカードを使用して、1つの大きな画面として機能するようにモニターを構成できます。
私のWindows 7では、ウィンドウをドラッグして両方の画面を覆うことができます。デスクトップを右クリックして「画面の解像度」を選択した場合は、「複数のディスプレイ」の下で「これらのディスプレイを拡張する」を選択する必要があります。ウィンドウをもう一度閉じると、サイズと位置が記憶されます。
誰かが autoit を使用してこれをまだ実行しようとしている場合は、次のコードを使用してこれを管理しました:
HotKeySet("^+{UP}", "Resize_Window") ; CTRL+SHIFT+UP
While 1
Sleep(1000)
WEnd
Func Resize_Window()
WinSetState("[ACTIVE]","",@SW_RESTORE)
WinMove("[ACTIVE]","",0,0,_WinAPI_GetSystemMetrics($SM_CXVIRTUALSCREEN),_WinAPI_GetSystemMetrics($SM_CYVIRTUALSCREEN))
EndFunc
更新:これは、NVidiaのnView Desktop Managerと呼ばれるものからのものであることがわかりました。 Windows 7〜10のQuadroおよびNVS製品で利用できます。 " https://www.nvidia.com/en-us/drivers/nview/149_77/nview-win7-win10-x64-149-77-driver / "。以下の元の答え。
これを調査しているときに(私が偶然それを何回かしたかを理解するために)、私は答えを見つけました。 Windows 10を使用している場合、最大化ボタンをクリックするときに「Shift」キーを押したままにします。私にとっては、3つのモニターすべてで最大化されます。モニターはすべてサイズが異なり、接続も異なります(vga、dvi、dviからポートアダプターを表示)。そのうちの1つはKVMスイッチ上にあります。高さは3台のモニターの最小値に設定されているため、すべてが横一列に並んでいます。同じサイズのモニターで期待どおりに機能すると思います。
注:これが最近の機能なのか、それともしばらく前からあったのかはわかりません。それについてオンラインで何も見つけていません。
私はこの回避策をSizer( homepage )で使用しています。その小さなフリーウェアユーティリティを使用すると、ウィンドウストレッチ領域を右クリックして、事前定義されたウィンドウサイズを設定できます。
プロファイルセットを作成するだけです。
次に、ウィンドウの右下の端まで右クリックし、プロファイルを選択します。
ソフトウェアやコードなしでこれを行う方法を見つけました。自動でも完璧でもありませんが、簡単で十分機能します。