จดจำตำแหน่งหน้าต่างเมื่อเทียบชิดขอบและปลดล็อค


45

ฉันพบว่ามันน่าผิดหวัง

ฉันมีหน้าจอพิเศษสองจอบนแล็ปท็อปที่ทำงาน ฉันนำแล็ปท็อปของฉันกลับบ้านโดยไม่ต้องมีหน้าจอเชื่อมต่อเพิ่มเติม ฉันกลับมาเชื่อมต่อแล็ปท็อปและจำเป็นต้องจัดเรียงหน้าต่างใหม่อีกครั้ง

มีวิธีรับ windows (หรือยูทิลิตี้) เพื่อติดตามการกำหนดค่าหน้าจอโดยรวม (#, ขนาด, ความละเอียด) และจำตำแหน่งที่ windows วางไว้ได้ดังนั้นเมื่อการกำหนดค่าหน้าจอตรงกันอีกครั้ง ?


1
ฉันพบปัญหาเดียวกัน แต่การร้องเรียนของฉันคือเมื่อฉันเปิดแล็ปท็อปในภายหลังและหน้าต่างแอปพลิเคชันยังคงปิดหน้าจอ (ท้ายสุดใช้ปุ่มลูกศรเพื่อเลื่อนกลับไปที่หน้าจอ) ฉันไม่คิดว่าจะมีวิธีแก้ปัญหาในตัวนี้
Brad Patton

คำตอบ:


8

การปฏิเสธความรับผิด: ฉันเป็นผู้สร้างเครื่องมือนี้

ฉันได้สร้างเครื่องมือเล็กน้อยเพื่อจัดเรียงหน้าต่างใหม่ด้วยการคลิกที่ไอคอนถาดบาร์ คุณอาจรวบรวมจากแหล่งที่มาหรือขอให้มี (พกพา) ไบนารีผ่านลิงค์ปัญหา

มันเป็นเจ้าภาพที่ Github: https://github.com/manutalcual/winredock

ฉันยินดีที่จะได้ยินจากคุณถ้าคุณมีข้อเสนอแนะ

แก้ไข: 2018/11/22

มันเป็นไปโดยอัตโนมัติตอนนี้


มันดูดี แต่ฉันกำลังมองหาบางสิ่งที่เป็นอัตโนมัติมากกว่า
Sellorio

3
ฉันได้เพิ่มคุณสมบัติการทำงานอัตโนมัติตามคำขอของผู้ใช้
มานูเอล

โปรดทราบว่าเวอร์ชันใน Master มีปัญหาอย่างน้อยใน Windows 10 ที่มีเดสก์ท็อปเสมือน ใช้สาขาที่เรียกว่าI0010-restoring-position-doesnt-work
HansHarhoff

ฉันได้รวมสาขา I0010- การคืนค่าตำแหน่งไม่ทำงานเป็นหลักดังนั้นตอนนี้เราอาจจะทำงานได้ดีขึ้น
มานูเอล

1
มันยอดเยี่ยมมาก! มันใช้งานได้ดีมากในการลองครั้งแรก! ขอบคุณที่ทำสิ่งนี้!
BT

6

ขณะนี้ฉันใช้ DisplayFusion Pro สำหรับตำแหน่งหน้าต่าง (ไม่เพียง แต่) ฉันไม่ทราบวิธีการทำงานเมื่อคุณตัดการเชื่อมต่อและเชื่อมต่อจอภาพของคุณ - ฉันมีสามเสมอ

ฉันคิดว่าคุณต้องปิดและเปิดแอปของคุณใหม่เพื่อจัดเรียงใหม่

แก้ไข: คุณลักษณะนี้มีเฉพาะในรุ่น Pro เท่านั้น - ข้อมูลจากความคิดเห็น

ภาพหน้าจอของการตั้งค่า

หน้าแรกของDisplayFusion


2
FYI คุณลักษณะตำแหน่งหน้าต่างจะปรากฏขึ้นเพื่อแก้ไขคำขอของฉัน ควรให้คนอื่นเห็นว่านี่เป็นรุ่น PRO ที่ต้องมีใบอนุญาตที่ซื้อ
MADCookie

ดูฟีเจอร์ "บันทึกหรือกู้คืนตำแหน่งหน้าต่างทั้งหมด" ในการเปรียบเทียบคุณสมบัติสำหรับ Free vs. Pro น่าเสียดายทางออกที่ถูกที่สุดคือ $ 25
Chiramisu

1
ใช้งานได้เมื่อคุณมีเดสก์ท็อปเสมือนจริงหลายตัวใน Windows 10 หรือไม่
K Robinson

2

ปัญหาคือแอปพลิเคชัน Windows ไม่เห็นจอภาพหลายจอจริงๆ ตัวจัดการหน้าต่างติดตามตำแหน่งหน้าต่างโดยอ้างอิงจากมุมบนซ้ายหรือจอแสดงผลหลักของคุณ ฉันไม่ได้ตระหนักถึงแอปพลิเคชันเชิงพาณิชย์ที่ทำ แต่คุณสามารถเขียนแอปพลิเคชันใน C # หรือ VB.NET ที่สามารถเขียนค่าเหล่านี้ไปยังไฟล์และเรียกคืนได้ในภายหลัง แต่จะไม่มี "ทริกเกอร์" สำหรับมัน คุณต้องบอกโปรแกรมว่าเมื่อใดที่ต้องจัดเก็บและดึงข้อมูลด้วยตนเอง


2

ลองใช้สคริปต์นี้เขียนขึ้นสำหรับ Excel มันเก็บตำแหน่งหน้าต่างในแผ่นงานและเรียกคืนได้จากที่นั่น คุณอาจมีปุ่มบนแผ่นงานแผ่นหนึ่งเพื่อเรียกใช้ร้านค้าและเรียกคืนแมโครหรือทางลัดไปยังสคริปต์ VBS ที่เรียกใช้แมโคร Excel อาจมีการกำหนดแป้นพิมพ์ลัดให้ วิธีนี้ทำให้เวิร์กบุ๊ก 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

โปรดอธิบายสิ่งที่ควรทำและล้างและจัดรูปแบบบล็อกโค้ดทั้งหมดให้ถูกต้องเนื่องจากอ่านยาก
Pimp Juice IT

และคุณสามารถอธิบายวิธีการมีสคริปต์ VBS ที่เรียกใช้แมโคร Excel ได้หรือไม่ สิ่งที่คล้ายกันสามารถเขียนลงในโปรแกรมรวบรวมได้อย่างไร
G-Man กล่าวว่า 'Reinstate Monica'

นี่เป็นวิธีการที่น่าสนใจ คุณใช้เองหรือไม่ ฉันแน่ใจว่าผู้คนจำนวนมากจะได้รับประโยชน์หากคุณสามารถสร้างตัวอย่างการทำงานแบบครบวงจร
Miserable Variable

1

อันนี้กำลังมองหาสัญญา: https://github.com/adamsmith/WindowsLayoutSnapshot

น่าเสียดายที่ในกรณีของฉันเมื่อบันทึกเลย์เอาต์บนจอภาพ 3x 24 "1920x1200 เปลี่ยนเป็นแล็ปท็อปหนึ่งเครื่อง 1920x1080 จากนั้นกลับไปที่สามและพยายามกู้คืนเลย์เอาต์ Windows ไม่ได้ย้ายไปที่จอภาพอื่นจริง ๆ การตั้งค่าอื่น ๆ มันจะทำงาน


ดูมีแนวโน้ม แต่จะไม่ทำงานบนพีซีของฉัน (Windows 8.1)
Dunc

ยกเลิกไปแล้วโชคไม่ดีและมันจะสูญเสียการตั้งค่าทั้งหมดเมื่อโปรแกรมถูกปิดหรือรีสตาร์ทพีซีซึ่งผู้เขียนไม่ได้วางแผนที่จะแก้ไข
เรน

รุ่นใหม่ที่สามารถใช้ได้ที่นี่ - github.com/nefarius/WindowsLayoutSnapshot ทำงานได้อย่างสมบูรณ์บน win10!
Max Lazar

1

นี่คือแอปพลิเคชั่นคอนโซลเพื่อบันทึกและกู้คืนตำแหน่งหน้าต่างและสถานะบน Windows Desktop หากต้องการบันทึกตำแหน่งหน้าต่างให้ทำงาน:

  winLayout save

เพื่อเรียกคืนตำแหน่งหน้าต่างทำงาน:

  winLayout restore

วางคำสั่งเหล่านี้ลงในทางลัดบนเดสก์ท็อปแล้วปักหมุดที่แถบงานเพื่อความสะดวก

คำเตือน: ฉันเขียนโปรแกรมนี้เพราะเครื่องมืออื่น ๆ ในหน้านี้ไม่ทำงานสำหรับฉัน

Caveat: มันใช้งานได้กับแอปพลิเคชัน แต่ไม่ใช่ explorer windows (ในปัจจุบัน)


0

ฉันเคยใช้ Stardock's Fenceมาก่อนในสถานการณ์ที่คล้ายกัน:

รั้วช่วยให้คุณจัดระเบียบพีซีของคุณโดยวางทางลัดและไอคอนลงในพื้นที่ที่ปรับขนาดได้บนเดสก์ท็อปของคุณที่เรียกว่ารั้ว ฟีเจอร์การปรับแต่งมากมายของมันคือสิ่งที่ทำให้ Fences ได้รับการปรับปรุงเดสก์ท็อป Windows ที่เป็นที่นิยมมากที่สุดในโลก


8
ที่จัดเรียงไอคอน ไม่ใช่หน้าต่าง ปัญหาของฉันคือฉันมี 8 โปรแกรมที่เปิดในสามหน้าจอ เมื่อฉันปิดแล็ปท็อปและเปิดอีกครั้งด้วยสามหน้าจอหน้าต่างแอปพลิเคชันทั้งหมดของฉันจะเปิดในหน้าจอเดียวไม่ได้จัดเรียงอย่างที่ฉันมี
CaffGeek

0

มีผู้ใช้ windows จำนวนมากที่มีปัญหานี้แอปพลิเคชันได้รับการพัฒนาและแบ่งปันภายในฟอรัม windows 7 ดังที่แสดงที่นี่:

http://www.sevenforums.com/free-developer-programs-projects/40916-shellfolderfix-manage-folder-window-positions-size.html#post396744 

มีคำแนะนำในเว็บไซต์ที่ช่วยเหลือและควรแก้ไขปัญหาของคุณ


ฟอรัมบอกว่า "นี่เป็นแอพที่ทำให้ Windows 7 explorer folder windows จดจำขนาดและตำแหน่งของมัน" และ "มันไม่ได้จัดการขนาด / ตำแหน่งหน้าต่างของแอปพลิเคชั่นทั่วไปหากคุณต้องการแอปอื่น ๆ เช่นWindow Managerทำได้" Window Managerมีความหมายอย่างไร คือบริการ Microsoft Windows Manager หรือผลิตภัณฑ์จากลิงค์
MADCookie

ใช่มันเป็นผลิตภัณฑ์จาก DeskSoft
DarkEvE
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.