2009-06-05 30 views
5

Tôi đang cố gắng viết một vài tập lệnh AutoHotkey đơn giản để di chuyển các cửa sổ xung quanh và tôi gặp sự cố khi nhận các giá trị kích thước màn hình chính xác.Nhận diện tích màn hình có sẵn trong autohotkey

Tôi đang cố gắng lấy kích thước của khu vực có thể sử dụng trên màn hình (thường là độ phân giải toàn màn hình trừ thanh tác vụ và có thể bất kỳ cửa sổ được gắn nào khác như thanh bên trong Vista). Cả hai phương pháp tôi đã tìm thấy để có chiều rộng màn hình dường như không hoạt động.

Không có phương pháp nào trong số 3 phương pháp tôi tìm thấy để có kích thước màn hình cho tôi giá trị phù hợp. Đây là tập lệnh thử nghiệm mà tôi đang sử dụng (chạy trên XP bằng thanh tác vụ ở dưới cùng ở kích thước mặc định của nó):

#7:: 
WinMove A,,0,0,A_ScreenWidth,A_ScreenHeight 
return 

#8:: 
;SM_CXMAXIMIZED and SM_CYMAXIMIZED 
SysGet, ScreenWidth, 61 
SysGet, ScreenHeight, 62 
WinMove A,,0,0,ScreenWidth,ScreenHeight 
return 

#9:: 
;SM_CXFULLSCREEN and SM_CYFULLSCREEN 
SysGet, ScreenWidth, 16 
SysGet, ScreenHeight, 17 
WinMove A,,0,0,ScreenWidth,ScreenHeight 
return 

# 7 làm cửa sổ chiếm toàn bộ độ phân giải, để chồng lên thanh tác vụ.

# 8 làm cho chiều rộng lớn hơn độ phân giải (tôi thấy cạnh phải của cửa sổ hiển thị trên màn hình phụ của tôi) và chiều cao hơi quá lớn, do đó cửa sổ chồng lên nhau một phần diện tích thanh tác vụ. Có vẻ như điều này là chính xác, ngoại trừ việc không tính đến các trang trí cửa sổ ở các cạnh.

# 9 dường như có chiều rộng chính xác nhưng chiều cao quá ngắn. Có vẻ như nó trừ đi chiều cao của thanh tác vụ từ chiều cao của độ phân giải, nhưng sau đó trừ đi 30 pixel khác từ nó.

Tôi chỉ có thể sử dụng những gì tôi có ở # 9 và thêm 30 vào chiều cao mà tôi nhận được, nhưng điều đó cảm thấy quá giống như một hack sẽ phá vỡ trong các cấu hình khác. Có vẻ như phải có một cách để có được kích thước màn hình có sẵn đúng cách, nhưng tôi không thể tìm thấy nó trong AutoHotkey.

Để tham khảo, điều này dường như để cho tôi những gì tôi cần trong Java:

Toolkit.getDefaultToolkit().getScreenSize(); 

Trả lời

4

tôi có một cái gì đó làm việc trong XP. Nó hiện chỉ xem xét thanh tác vụ, vì vậy nó có thể sẽ không làm điều đúng trong Vista khi thanh bên được hiển thị. Tuy nhiên, nó hoạt động bất kể thanh công cụ ở đâu.

Dưới đây là các phương pháp tôi tạo ra, cùng với một phương pháp đơn giản ResizeAndCenter cho thấy việc sử dụng chúng:

; Gets the edge that the taskbar is docked to. Returns: 
; "top" 
; "right" 
; "bottom" 
; "left" 
GetTaskbarEdge() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 

    if (TW = A_ScreenWidth) { ; Vertical Taskbar 
    if (TY = 0) { 
     return "top" 
    } else { 
     return "bottom" 
    } 
    } else { ; Horizontal Taskbar 
    if (TX = 0) { 
     return "left" 
    } else { 
     return "right" 
    } 
    } 
} 

GetScreenTop() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "top") { 
    return TH 
    } else { 
    return 0 
    } 
} 

GetScreenLeft() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "left") { 
    return TW 
    } else { 
    return 0 
    } 
} 

GetScreenWidth() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "top" or TaskbarEdge = "bottom") { 
    return A_ScreenWidth 
    } else { 
    return A_ScreenWidth - TW 
    } 
} 

GetScreenHeight() { 
    WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,, 
    TaskbarEdge := GetTaskbarEdge() 

    if (TaskbarEdge = "top" or TaskbarEdge = "bottom") { 
    return A_ScreenHeight - TH 
    } else { 
    return A_ScreenHeight 
    } 
} 

ResizeAndCenter(w, h) 
{ 
    ScreenX := GetScreenLeft() 
    ScreenY := GetScreenTop() 
    ScreenWidth := GetScreenWidth() 
    ScreenHeight := GetScreenHeight() 

    WinMove A,,ScreenX + (ScreenWidth/2)-(w/2),ScreenY + (ScreenHeight/2)-(h/2),w,h 
} 
+0

Các chức năng này rất hữu ích. Chỉ cần sử dụng chúng trong Windows 7 và chúng hoạt động rất tốt. Cảm ơn. Chúc mừng! –

Các vấn đề liên quan