나는 이것을 실망스럽게 생각합니다.
직장에서 랩톱에 두 개의 추가 화면이 있습니다. 추가 화면이 연결되지 않은 채 랩톱을 가져와 집으로 돌아갑니다. 돌아와서 노트북을 도킹하면 창문을 다시 정리해야합니다.
전체 화면 구성 (#, 크기, 해상도)을 추적하고 창 배치 위치를 기억하기 위해 창 (또는 유틸리티)을 얻는 방법이 있습니까? 따라서 화면 구성이 다시 일치하면 응용 프로그램을 원래 위치로 되돌립니다. ?
나는 이것을 실망스럽게 생각합니다.
직장에서 랩톱에 두 개의 추가 화면이 있습니다. 추가 화면이 연결되지 않은 채 랩톱을 가져와 집으로 돌아갑니다. 돌아와서 노트북을 도킹하면 창문을 다시 정리해야합니다.
전체 화면 구성 (#, 크기, 해상도)을 추적하고 창 배치 위치를 기억하기 위해 창 (또는 유틸리티)을 얻는 방법이 있습니까? 따라서 화면 구성이 다시 일치하면 응용 프로그램을 원래 위치로 되돌립니다. ?
답변:
면책 조항 : 나는이 도구의 제작자입니다.
트레이 바 아이콘 클릭시 창을 재정렬하는 작은 도구를 만들었습니다. 소스에서 컴파일하거나 이슈 링크를 통해 (휴대용) 바이너리를 요청할 수 있습니다.
Github에서 호스팅됩니다 : https://github.com/manutalcual/winredock
제안이 있으시면 기뻐할 것입니다.
편집 : 2018/11/22
이제 완전히 자동화되었습니다.
현재 창 위치에 DisplayFusion Pro를 사용하고 있습니다 (뿐만 아니라). 모니터 연결을 끊고 연결할 때 이것이 어떻게 작동하는지 모르겠습니다. 항상 3 개가 있습니다.
다시 정렬하려면 앱을 닫았다가 다시 열어야한다고 생각합니다.
편집 :이 기능은 Pro 버전에서만 사용할 수 있습니다. -의견 정보.
DisplayFusion 홈페이지
Excel 용으로 작성된이 스크립트를 사용해보십시오. 창 위치를 시트에 저장하고 거기서부터 복원합니다. 저장 및 복원 매크로를 실행하는 시트 중 하나에 단추가 있거나 단축키 매크로가 지정된 Excel 매크로를 실행하는 VBS 스크립트에 대한 단축키가있을 수 있습니다. 이렇게하면 Excel 통합 문서가 최소화 된 상태로 유지 될 수 있습니다. 물론 비슷한 프로그램이 컴파일 된 프로그램으로 작성 될 수 있습니다.
Public Declare PtrSafe Function GetWindowPlacement Lib "user32" (ByVal hwnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function SetWindowPlacement Lib "user32" (ByVal hwnd As LongPtr, lpwndpl As WINDOWPLACEMENT) As Long
Public Declare PtrSafe Function GetWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare PtrSafe Function IsWindowVisible Lib "user32.dll" (ByVal hwnd As Long) As Boolean
Public Declare PtrSafe Function GetParent Lib "user32.dll" (ByVal hwnd As Long) As Long
Public Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal cch As LongPtr) As Long
Public Type POINTAPI
X As Long
Y As Long
End Type
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Type WINDOWPLACEMENT
Length As Long
flags As Long
showCmd As Long
MinPosition As POINTAPI
MaxPosition As POINTAPI
rcNormalPosition As RECT
End Type
Global Const gw_hwndnext = 2
Global Const fwp_startswith = 0
Global Const fwp_contains = 1
Global title As String
Global Visible As Boolean
Global RowCount
Public prog As String
Public Sub StoreActiveWindows()
Dim hwndapp As Long
Dim hwndmax As Long
Dim nret As Long
Dim WinFrm As WINDOWPLACEMENT
Dim RectFrm As RECT
PleaseWait.Show vbModeless
DoEvents
RowCount = 1
hwndmax = findwindow(0&, 0&)
Do Until hwndmax = 0
hwndapp = findthiswindow(hwndmax)
If hwndapp Then
If title <> "CURRENT WINDOWS OPEN" And Visible Then
rtn = GetWindowPlacement(hwndapp, WinFrm)
RectFrm = WinFrm.rcNormalPosition
FrmTop = RectFrm.Top
FrmRight = RectFrm.Right
FrmLeft = RectFrm.Left
FrmBottom = RectFrm.Bottom
Workbooks(Filename).Activate
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 1) = title
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 2) = hwndapp
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 3) = FrmTop
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 4) = FrmRight
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 5) = FrmLeft
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 6) = FrmBottom
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 7) = WinFrm.MaxPosition.X
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 8) = WinFrm.MaxPosition.Y
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 9) = WinFrm.MinPosition.X
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 10) = WinFrm.MinPosition.Y
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 11) = WinFrm.showCmd
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 12) = WinFrm.flags
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 13) = WinFrm.Length
RowCount = RowCount + 1
End If
End If
hwndmax = GetWindow(hwndmax, gw_hwndnext)
Loop
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 1) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 2) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 3) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 4) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 5) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 6) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 7) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 8) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 9) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 10) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 11) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 12) = ""
Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 13) = ""
Unload PleaseWait
End Sub
Public Function findthiswindow(ByVal hwndtopmost As Long) As Long
Dim hwndtmp As Long
Dim nret As Long
Dim titletmp As String
'Get the first window
hwndtmp = hwndtopmost
If GetParent(hwndtmp) = 0 Then
'Set its visibility
If IsWindowVisible(hwndtmp) Then
Visible = True
Else
Visible = False
End If
'Get its title
titletmp = Space(256)
nret = GetWindowText(hwndtmp, titletmp, Len(titletmp))
If nret Then
findthiswindow = hwndtmp
End If
End If
If Visible Then
title = titletmp & " - Visible"
Else
title = titletmp & " - Invisible"
End If
title = titletmp
If titletmp <> "" Then
'If title = "SETTINGS" Then
HasNoOWner = Not (GetWindow(hwndtmp, 4))
n = 1
'End If
If (UCase(Left(title, 15)) = "PROGRAM MANAGER" Or UCase(title) = "SETTINGS") Then
n = 1
title = ""
findthiswindow = 0
End If
End If
End Function
Sub RestoreWindowsLocations()
Dim WinFrm As WINDOWPLACEMENT
Dim RectFrm As RECT
PleaseWait.Show vbModeless
DoEvents
Workbooks(Filename).Activate
RowCount = 1
Do Until Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 1) = ""
hwndapp = Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 2)
' rtn = GetWindowPlacement(hwndapp, WinFrm)
WinFrm.rcNormalPosition.Top = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 3))
WinFrm.rcNormalPosition.Right = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 4))
WinFrm.rcNormalPosition.Left = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 5))
WinFrm.rcNormalPosition.Bottom = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 6))
WinFrm.MaxPosition.X = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 7))
WinFrm.MaxPosition.Y = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 8))
WinFrm.MinPosition.X = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 9))
WinFrm.MinPosition.Y = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 10))
WinFrm.showCmd = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 11))
WinFrm.flags = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 12))
WinFrm.Length = CLng(Workbooks(Filename).Sheets("Active Windows").Cells(RowCount, 13))
rtn = SetWindowPlacement(hwndapp, WinFrm)
rtn = SetWindowPlacement(hwndapp, WinFrm)
RowCount = RowCount + 1
Loop
Unload PleaseWait
End Sub
이것은 유망한 것으로 보였습니다. https://github.com/adamsmith/WindowsLayoutSnapshot
불행히도 제 경우에는 3x 24 "1920x1200 모니터에 레이아웃을 저장하고 하나의 랩톱 1920x1080으로 변경 한 다음 3으로 돌아가 레이아웃을 복원하려고 할 때 Windows가 실제로 다른 모니터로 이동하지 않았습니다. 다른 설정은 작동합니다.
다음은 Windows 바탕 화면에서 창 위치와 상태를 저장하고 복원 하는 콘솔 응용 프로그램 입니다. Windows 위치를 저장하려면 다음을 실행하십시오.
winLayout save
창 위치를 복원하려면 다음을 실행하십시오.
winLayout restore
편의를 위해 이러한 명령을 바탕 화면 바로 가기에 넣고 작업 표시 줄에 고정하십시오.
면책 조항 :이 페이지의 다른 도구가 작동하지 않아서이 유틸리티를 작성했습니다.
주의 사항 : 응용 프로그램에서는 작동하지만 탐색기 창에서는 작동하지 않습니다 (현재)
내가 사용했던 스타 독의 울타리를 비슷한 시나리오에서 전에 :
Fences를 사용하면 바로 가기와 아이콘을 데스크톱의 펜스라는 크기 조정 가능한 음영 영역에 자동으로 배치하여 PC를 구성 할 수 있습니다. 많은 사용자 정의 기능은 Fences를 세계에서 가장 널리 사용되는 Windows 데스크탑 향상으로 만듭니다.
많은 Windows 사용자 가이 문제를 겪고 응용 프로그램이 다음과 같이 Windows 7 포럼 내에서 개발되고 공유되었습니다.
http://www.sevenforums.com/free-developer-programs-projects/40916-shellfolderfix-manage-folder-window-positions-size.html#post396744
사이트에 도움이되는 지침이 있으며 문제를 해결해야합니다.