Cách căn giữa bất kỳ cửa sổ nào trên màn hình của bạn với AutoHotKey
Nó không phải là cực kỳ khó chịu khi, ít nhất là trên Windows, bất kỳ cửa sổ nào có thể bật lên ở bất kỳ đâu trên màn hình? Sự ngẫu nhiên hàng ngày đó có làm bạn lo lắng không và bạn muốn có nhiều quyền kiểm soát hơn đối với vị trí trên màn hình của cửa sổ? Giờ thì bạn có thể nhờ AutoHotKey.
Trong hướng dẫn này, chúng tôi sẽ xem cách bạn có thể giải quyết vấn đề này bằng tập lệnh AutoHotKey. Chúng tôi sẽ xây dựng nó để nó di chuyển không tí nào cửa sổ chính giữa màn hình của bạn bằng một lần nhấn phím. Nghe có vẻ ngọt ngào? Hãy xem nó được thực hiện như thế nào!
Mục Lục
Cách thiết lập phím nóng căn giữa cửa sổ với AutoHotKey
Một nửa trận chiến khi tạo một tập lệnh là đến cách nó sẽ hoạt động như thế nào trước khi nhập một ký tự. Vì vậy, hãy lập một kế hoạch hành động bằng tiếng Anh đơn giản để sau đó chúng ta sẽ “biến tấu” thành một kịch bản.
“Vấn đề” Windows có
Windows (như trong “các thứ hình chữ nhật trên màn hình của chúng ta”, không phải hệ điều hành) có xu hướng xuất hiện ở bất kỳ đâu trên màn hình. Nó gây mất tập trung và cũng có thể gây khó chịu khi nó xảy ra liên tục. Đặc biệt là khi xử lý nhiều người yêu cầu xuất hiện ở các vị trí khác nhau, mong đợi đầu vào của người dùng.
Giải pháp cho vấn đề
Ngoài việc gửi các tổ hợp phím và nhấp chuột đến bất kỳ cửa sổ nào, AutoHotKey cũng có thể thao tác chúng. Trước đây, chúng tôi đã thấy cách bạn có thể sử dụng AutoHotKey để ghim cửa sổ “luôn ở trên cùng” bằng cách sử dụng phím tắt. Tuy nhiên, lần này, chúng tôi sẽ tận dụng khả năng thao tác cửa sổ của AutoHotKey để:
- “Đọc” ID của cửa sổ đang hoạt động.
- Đồng thời “đọc” kích thước của nó (chiều rộng và chiều cao).
- “Đọc” kích thước của màn hình.
- Kết hợp kích thước của màn hình và cửa sổ để tính toán tọa độ tối ưu cho việc hiển thị cửa sổ nói trên ở trung tâm màn hình.
- Di chuyển cửa sổ đến các tọa độ đó.
Cuối cùng, chúng tôi sẽ ánh xạ ở trên thành một lối tắt. Bằng cách này, bạn có thể gọi nó là “theo yêu cầu” thay vì áp dụng nó trên tất cả các windows – có thể ảnh hưởng đến các ứng dụng và trò chơi toàn màn hình.
Lưu ý rằng trong hướng dẫn này, chúng ta sẽ đi sâu vào AutoHotKey. Nếu bạn chưa quen với nó và muốn tìm hiểu thêm trước, hãy xem hướng dẫn AutoHotKey nhanh của chúng tôi dành cho người mới bắt đầu.
Đầu tiên, thiết lập HotKey
Chúng tôi đã đề cập đến cách chúng tôi sẽ ánh xạ hàm mà chúng tôi sẽ tạo thành một phím tắt. Tuy nhiên, có lẽ sẽ tốt hơn nếu chúng ta bắt đầu với phần đó để hiểu rõ hơn.
Bắt đầu bằng cách tải xuống trình cài đặt từ trang web chính thức của AutoHotKey. Chuyển sang phiên bản “hiện tại” thay vì phiên bản beta v2 hoặc phiên bản 1.0 không dùng nữa. Sau đó, cài đặt nó trên PC của bạn.
Khởi chạy File Explorer (cách nhanh nhất là sử dụng tổ hợp phím Windows Key + E) và di chuyển đến đường dẫn mà bạn muốn tạo tập lệnh của mình. Với AutoHotKey được cài đặt, bạn sẽ có một số tùy chọn mới xuất hiện trên menu chuột phải. Vì vậy, nhấp chuột phải vào không gian trống của cửa sổ File Explorer và chọn Mới> Tập lệnh AutoHotKey.
Đặt tên cho tệp tập lệnh của bạn, sau đó nhấp chuột phải vào tệp và biên tập nó. Nếu bạn không sử dụng ứng dụng chỉnh sửa văn bản thân thiện với mã, như Visual Studio Code hoặc Notepad ++, hãy sử dụng Windows Notepad. Tránh các trình soạn thảo như Wordpad, có thể thêm cú pháp vô ích (cho mục đích) vào “mã” của bạn.
Khi ở trong trình soạn thảo mà bạn chọn, bạn sẽ thấy tập lệnh AutoHotKey của mình đã có một số dòng được điền sẵn ở trên cùng. Chúng ở đó vì lý do ổn định và tương thích. Chúng có thể điều chỉnh được, nhưng hãy để nguyên như vậy đối với hướng dẫn này.
“Di chuyển” hai hoặc ba dòng bên dưới chúng và nhập phím tắt sẽ khởi chạy chức năng của bạn. Bạn có thể tạo tổ hợp phím bằng cách sử dụng “+” cho Shift, “^” cho CTRL, “!” cho Alt và “#” cho Phím Windows, cũng như bất kỳ phím “bình thường” nào từ bàn phím (chữ cái và số).
Ví dụ: để tổ hợp CTRL + Y khởi chạy tập lệnh của bạn, hãy sử dụng:
^y::
Dấu kép “:” giống như nói, “này, AutoHotKey, vui lòng ánh xạ chuỗi hoặc tổ hợp phím ở bên trái với mọi thứ ở bên phải”.
“Di chuyển” hai hoặc ba dòng bên dưới dòng đó bằng cách nhấn Enter và nhập “return”, thao tác này sẽ đánh dấu sự kết thúc của một hàm cụ thể. Kết quả hoàn chỉnh sẽ giống như sau:
^y::
; This is a comment.
return
Dấu “; Đây là một nhận xét.” chính xác là, một nhận xét trong “mã” của tập lệnh mà AutoHotKey sẽ không thực thi. Nó ở đó cho mục đích tài liệu để đánh dấu vị trí mà chúng tôi sẽ nhập “mã” của tập lệnh trong các bước sau.
Nếu bạn đã làm theo hướng dẫn của chúng tôi về cách tạo phím nóng dành riêng cho ứng dụng với AutoHotKey trước đây, thì trong trường hợp này … đừng làm. Bạn muốn phím nóng căn giữa cửa sổ của mình là “toàn cầu” ở giữa không tí nào cửa sổ từ không tí nào ứng dụng. Nếu bạn “buộc nó” vào một ứng dụng cụ thể, nó sẽ chỉ hoạt động trên cửa sổ của ứng dụng này.
Nhận thông tin chi tiết về cửa sổ hoạt động
Chúng tôi muốn phím tắt của mình hoạt động trên cửa sổ đang hoạt động và chúng tôi cũng cần các kích thước của nó để tính toán. Chúng ta có thể tìm thấy những thông tin chi tiết sau:
WinGetTitle, ActiveWindowTitle, A
WinGetPos,,, Width, Height, %ActiveWindowTitle%
Thay thế dòng nhận xét mà chúng tôi đã thêm vào script trong phần trước bằng hai dòng ở trên. Kết quả?
- Dòng đầu tiên lấy tiêu đề của cửa sổ đang hoạt động.
- Dòng thứ hai đọc chiều rộng và chiều cao của nó và ánh xạ chúng với các từ / biến “Chiều rộng” và “Chiều cao”, chúng tôi sẽ sử dụng tiếp theo cho các tính toán của mình.
Chúng tôi đã có thông tin chi tiết của cửa sổ đang hoạt động, nhưng chúng tôi cũng cần kích thước của vùng hiển thị của màn hình để đạt được mục tiêu của mình. Rất may, việc tìm ra những thứ đó thậm chí còn dễ dàng hơn.
Còn về Khu vực Màn hình Chính?
Chúng tôi không cần thêm lệnh để tìm chiều rộng và chiều cao của màn hình chính. AutoHotKey đi kèm với hai biến đặt trước đã chứa thông tin đó cho chúng tôi: “A_ScreenWidth” và “A_ScreenHeight”.
Vì vậy, khi bạn nhìn thấy chúng trong phần tiếp theo, chúng đã “chứa” chiều rộng và chiều cao của màn hình chính. Không cần thiết để gán các giá trị chính xác cho chúng. Do đó, chúng ta có thể sử dụng chúng trực tiếp trong tính toán của mình.
Thời gian để tính toán vị trí mục tiêu
Chúng tôi có thể đưa các phép tính trực tiếp vào các điểm của tập lệnh mà chúng tôi cần chúng. Tuy nhiên, sẽ dễ dàng hơn và tốt hơn cho khả năng đọc nếu chúng ta ánh xạ chúng thành hai biến và sau đó sử dụng các biến đó trong tập lệnh của chúng tôi.
Vì vậy, hãy chọn “TargetX” là biến sẽ giữ tọa độ ngang và “TargetY” là biến có tọa độ dọc, nơi chúng ta nên di chuyển cửa sổ để nó xuất hiện ở giữa màn hình.
TargetX := (A_ScreenWidth/2)-(Width/2) ; Here we calculate the horizontal window target...
TargetY := (A_ScreenHeight/2)-(Height/2) ; ...and here the vertical one.
Hãy giải mã những dòng đó bằng tiếng Anh đơn giản:
- “TargetX” và “TargetY” là hai biến.
- “: =” thông báo cho AutoHotKey rằng các biến phải bằng với kết quả của các phép tính ở bên phải và những kết quả đó phải được coi là số.
- “(A_ScreenWidth / 2)” chia toàn bộ chiều rộng của màn hình cho hai.
- “(Width / 2)” thực hiện tương tự đối với chiều rộng của cửa sổ đang hoạt động.
Với những điều trên, chúng tôi đang trừ một nửa chiều rộng của cửa sổ đang hoạt động từ một nửa chiều rộng của màn hình. Những gì còn lại là không gian bên trái của cửa sổ – từ phía bên trái của màn hình và lên đến nơi cửa sổ sẽ xuất hiện. Dòng thứ hai làm tương tự nhưng đối với chiều cao.
Bây giờ để đặt lại vị trí của cửa sổ
Được trang bị kiến thức toàn năng có được từ các mệnh lệnh thần bí mà chúng ta đã thấy ở trên, giờ đây chúng ta có thể tạo ra câu thần chú ma thuật của mình để hoàn thành nghi lễ dịch chuyển cửa sổ. Hoặc, bằng tiếng Anh đơn giản, sử dụng lệnh “WinMove” của AutoHotKey để di chuyển các cửa sổ xung quanh màn hình.
WinMove hy vọng chúng ta sẽ “cung cấp” cho nó ít nhất ba phần thông tin để thực hiện hành động của nó: tiêu đề của cửa sổ được nhắm mục tiêu và tọa độ nơi để di chuyển nó. Vì chúng tôi đã ánh xạ những phần thông tin đó thành các biến, nên lệnh đơn giản như sau:
WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY%
Ở trên:
- “WinMove” là lệnh AutoHotKey di chuyển một cửa sổ xung quanh.
- “% ActiveWindowTitle%” là biến nơi tiêu đề của cửa sổ hiện hoạt được ánh xạ.
- “% TargetX%” và “% TargetY%” là tọa độ ngang và dọc nơi di chuyển cửa sổ.
Bạn cũng có thể thay đổi kích thước cửa sổ bằng WinMove, bỏ qua những cửa sổ có dòng chữ cụ thể trong tiêu đề hoặc nội dung của chúng, v.v. Vì những tính năng đó nằm ngoài phạm vi của bài viết này, hãy kiểm tra tài liệu chính thức của AutoHotKey về lệnh WinMove để biết thêm về chúng.
Kịch bản cuối cùng
Cuối cùng, chúng tôi đến phần thử thách nhất trong cuộc hành trình của mình. Hãy chuẩn bị tinh thần cho bước tiếp theo, hy vọng bạn sẽ lưu tập lệnh và … Hãy chạy nó.
Vâng, chỉ có vậy – kịch bản đã hoàn thành, và không thể làm gì hơn ngoài việc dùng thử. Sử dụng phím tắt bạn đã xác định và bất kỳ cửa sổ nào đang hoạt động sẽ di chuyển đến giữa màn hình của bạn.
Tệp tập lệnh cuối cùng, khi được mở trong trình soạn thảo văn bản, sẽ trông giống như sau:
;
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
^y::
WinGetTitle, ActiveWindowTitle, A ; Get the active window's title for "targetting" it/acting on it.
WinGetPos,,, Width, Height, %ActiveWindowTitle% ; Get the active window's position, used for our calculations.
TargetX := (A_ScreenWidth/2)-(Width/2) ; Calculate the horizontal target where we'll move the window.
TargetY := (A_ScreenHeight/2)-(Height/2) ; Calculate the vertical placement of the window. WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; Move the window to the calculated coordinates.
return
Lưu ý rằng bạn có thể sao chép tập lệnh ở trên, dán vào Notepad hoặc một trình soạn thảo văn bản tương tự và lưu nó bằng phần mở rộng AHK. Sau đó, “chạy” nó, với AutoHotKey được cài đặt, để căn giữa bất kỳ cửa sổ nào bất kỳ khi nào bạn nhấn CTRL + Y. Nếu bạn không thích phím tắt đó, hãy chỉnh dòng “^ y ::” thành một tổ hợp phím khác. Ví dụ, !+c:: sẽ ánh xạ chức năng với tổ hợp phím Shift + Alt + C.
Theo dõi tiền thưởng
Để thuận tiện cho bạn, chúng tôi đã quyết định gợi ý và bao gồm một tập lệnh phụ sẽ hữu ích cho những người có thiết lập màn hình kép.
Để giữ cho bài viết này được sắp xếp hợp lý, thay vào đó, chúng tôi đã bao gồm thông tin về cách tập lệnh hoạt động bên trong nó dưới dạng nhận xét. Bạn có thể xóa chúng khỏi lần lặp lại của mình.
Câu chuyện ngắn về cách nó khác với kịch bản ở trên là chúng tôi cũng thêm một biến PositionToggle và một số “logic IF”. Sau đó, chúng tôi sử dụng chúng để “lướt” cửa sổ giữa các màn hình. Chúng tôi cần lưu ý rằng đó là một giải pháp không phù hợp và “hack-y” cho vấn đề. Tuy nhiên, chúng tôi thích nó hơn đối với mã được sắp xếp hợp lý hơn vì cách tiếp cận này dễ hiểu và dễ điều chỉnh hơn cho tất cả những người không quen thuộc với AutoHotKey.
;
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
PositionToggle = 1 ; Use a number as a toggle for marking on which monitor the window should appear.
^y::
WinGetTitle, ActiveWindowTitle, A
WinGetPos,,, Width, Height, %ActiveWindowTitle% If PositionToggle = 1 ; Check the toggle's state and "do what's between the curly brackets" if it's set to 1 for our primary monitor.
{
TargetX := (A_ScreenWidth/2)-(Width/2)
TargetY := (A_ScreenHeight/2)-(Height/2)
PositionToggle = 2 ; "Flick" the toggle so that if we reuse the hotkey, our active window will move to the second monitor.
}
Else If PositionToggle = 2 ; Have we used the hotkey before, "flicking" the toggle number to the second monitor? Then the script should instead do what's between the following curly brackets instead of the ones above.
{
SysGet, Mon2, Monitor, 2 ; Get the second monitor's details
Mon2Width := Mon2Right - Mon2Left ; Calculate the second monitor's actual width.
Mon2Height := Mon2Bottom - Mon2Top ; Calculate the second monitor's actual height.
TargetX := (Mon2Width/2)-(Width/2)+A_ScreenWidth ; Calculate where to move the window. Notice that we also add the primary monitor's width since AutoHotKey can't move windows on individual monitors but across their combined "surface".
TargetY := (Mon2Height/2)-(Height/2)+Mon2Top ; Calculate the optimal vertical target for moving the window on the second monitor. Like above, the second monitor's vertical details are detected in relation to the primary monitor. Thus, we have to get creative to get an optimal target by acknowledging how the second monitor's top isn't equal to 0 (like the primary one's).
PositionToggle = 1 ; Flick the toggle back so that if we reuse the hotkey, the window will move back to the primary monitor.
}
WinMove, %ActiveWindowTitle%,, %TargetX%, %TargetY% ; The actual action, moving the active window to our calculated coordinates.
return
Căn giữa cửa sổ bằng chìa khóa, cách dễ dàng
Và bây giờ bạn đã hoàn thành! Nếu mọi thứ hoạt động tốt, bây giờ bạn có thể sử dụng phím nóng mới được thiết lập để căn giữa cửa sổ bất cứ lúc nào.
Đọc tiếp