Học AutoHotKey bằng cách "trộm" script của tôi
(hillelwayne.com)- Vì AutoHotKey là một công cụ tự động hóa Windows mạnh mẽ nhưng khá khó tiếp cận với người mới, tác giả công khai bộ sưu tập script cá nhân làm tài liệu học tập
- Tài liệu gồm tổng cộng 14 tệp, tập trung vào các ví dụ tự động hóa có thể dùng ngay như mở thư mục, chèn văn bản, hay mở rộng phím tắt theo từng chương trình
- Bao gồm từ nhập nhanh ngày hiện tại, em dash,
¯\_(ツ)_/¯đến hệ thống phím tắt theo chế độ cho người dùng vim và cả demo GUI đơn giản - Cũng có script chuyển đổi timestamp sang UTC và giờ địa phương, cho thấy khả năng tự động hóa quy trình làm việc thực tế vượt ra ngoài các phím tắt đơn thuần
- Mỗi tệp đều có chú thích giải thích mã làm gì, và một số còn nêu rõ vì sao được triển khai theo cách đó, nên rất phù hợp để đọc như một codebase phục vụ học tập
Bộ sưu tập ví dụ AutoHotKey gần với công việc thực tế
- Dành cho những người thấy việc học AutoHotKey khó khăn, tác giả đã công khai phần lớn các script cá nhân mình dùng kèm theo giải thích
- Toàn bộ mã có thể xem trong kho GitHub và gồm tổng cộng 14 tệp
- Các ví dụ chính gồm:
Cách đọc như một codebase phục vụ học tập
- Kho lưu trữ này là một ví dụ về codebase phục vụ học tập được tạo ra để mọi người có thể đọc mã và học theo
- Mỗi tệp đều có nhiều chú thích về việc mã làm gì, và ở một số phần triển khai còn có cả lý do vì sao tác giả chọn cách làm đó
- Phần giải thích riêng về codebase phục vụ học tập được nối tiếp trong bài viết trên newsletter
- Nếu có đoạn nào cần giải thích thêm, bạn có thể yêu cầu qua GitHub Issues
1 bình luận
Ý kiến trên Hacker News
Có vẻ đây là lần đầu tôi có thể đóng góp điều gì đó hữu ích cho một cuộc thảo luận liên quan đến code. Với tư cách người viết, tôi đã tạo sẵn một script AutoHotkey để có thể nhanh chóng mở notepad.exe trống bất cứ lúc nào; nhấn phím
~thì mở, nhấn lại thì đóng, và nếu có nội dung thì hộp thoại lưu sẽ hiện raAHK của tôi chỉ làm có vậy
Khi muốn chuyển nhanh qua lại với cửa sổ trước đó mà không đóng hay thu nhỏ cửa sổ, phím tắt mặc định của Windows Alt + Escape rất hữu ích. Nó chuyển thẳng sang cửa sổ được focus ngay trước đó mà không hiện phần tổng quan cửa sổ như Alt+Tab
Trong AutoHotkey v1, có thể tạo boilerplate dạng switcher/launcher: tìm một mẩu tiêu đề cửa sổ để kích hoạt, nếu nó đã active thì quay lại bằng
send, !{escape}, còn nếu không có thì chạy ứng dụng. Nếu không muốn làm rối thanh tác vụ, cũng có thể dùngWinHide/WinShow, nhưng với một số cửa sổ thì không hợp lắm; để nhận diện cửa sổ, đôi khiahk_exehoặcahk_classphù hợp hơnWinActive("Untitled - Notepad")vàWinExist("*Untitled - Notepad")để đóng hoặc kích hoạt, nếu không có thì chạyRun "Notepad"WinActive()hoặcWinExist()thì có thể gộp nhiều điều kiện tiêu đề bằngor, và nếu cần cũng có thể thêm điều kiện ahk_class như"Untitled - Notepad ahk_class Notepad"AutoHotkey rất tuyệt, nhưng tôi ước ngôn ngữ của nó bình thường hơn một chút. Tôi từng khổ sở khi cố tạo một phiên bản ổn định của Aero Snap theo tỉ lệ vàng; việc xử lý nhiều màn hình và kích thước lẽ ra không khó đến vậy, nhưng cú pháp
Loopkỳ quặc hay việc các lỗi đơn giản âm thầm thất bại đã làm mất hết hứng thú và khiến tôi bỏ cuộcTôi cũng tìm thấy module ahk cho Python, nhưng khi kết hợp với module
keyboardthì nó không hoạt động tốt như AutoHotkey trong vai trò listener phím tắthttps://github.com/idbrii/daveconfig/blob/main/win/autohotke...
https://pypi.org/project/ahk/
Tôi đã dùng AutoHotKey để làm photobooth trong đám cưới của mình. Tôi dùng một phần mềm đơn giản điều khiển chiếc Nikon của vị hôn thê qua USB, cùng với IrfanView trên laptop; IrfanView được thiết lập để theo dõi thư mục và luôn hiển thị ảnh mới nhất
Bằng AutoHotKey, tôi tạo một GUI đơn giản có các nút Preview, Autofocus và “SNAP”; khi nhấn SNAP, nó hiện bộ đếm ngược lớn rồi chụp ảnh, thu nhỏ phần mềm camera và đưa IrfanView lên trước. Vài giây sau nó quay lại GUI nút bấm, khách mời rất thích, còn chúng tôi tiết kiệm được vài trăm euro tiền thuê photobooth và cũng có được những bức ảnh đẹp
Script AutoHotKey này đã thay đổi cuộc chơi đối với tôi. Nó ánh xạ Ctrl + Shift + V thành dán không định dạng: chuyển clipboard thành văn bản, dán vào, chờ một chút rồi khôi phục clipboard ban đầu
https://learn.microsoft.com/en-us/windows/powertoys/
https://stevemiller.net/puretext/
Sẽ rất hay nếu có cả clipboard nhiều giá trị như 5 mục clipboard gần nhất, nhưng có lẽ như vậy là đòi hỏi quá nhiều
AHK là một trong những ứng dụng mình gắn chặt với Windows. Mình dùng nó để thêm các ký tự như äöüß, áóúñ vào bàn phím, điều khiển độ sáng đèn trong phòng và căn hộ, chèn timestamp như
08:39 –,2023-08-22 08:39:46,2023-08-22 — Tuesdaychỉ bằng một hai nút, và bật/tắt nguồn màn hình qua ổ cắm hỗ trợ Tasmota khi bật/tắt phím PauseTuy nhiên mình vẫn muốn có tính năng dùng bàn phím thứ hai như một bảng nút bấm, đồng thời chặn luôn các phím bấm từ bàn phím đó. Vì vậy hiện mình đang nối một bàn phím Bluetooth nhỏ với Raspberry Pi Zero để có thêm nút
https://www.hammerspoon.org/
https://miquelvir.medium.com/secondkeyboard-1c39e52e023b
Cũng có cái này: https://github.com/evilC/AutoHotInterception
https://github.com/autokey/autokey
Mình cũng luôn dùng AutoHotKey. Mình thiết lập 6 loại phím tắt chèn ngày/giờ, launcher PuTTY/SSH cho các host và cổng serial thường dùng, launcher theo trạng thái cho hơn 10 ứng dụng như Outlook, Windows Terminal, Total Commander, dán không định dạng ở mọi nơi, dán sau khi loại bỏ xuống dòng, lớp nhập AltGr cho ký tự đặc biệt và emoji, cùng phím tắt media/âm lượng
https://gist.github.com/raveren/bac5196d2063665d2154
Trên laptop Linux cá nhân, mình đã hoán đổi Caps Lock và Escape với nhau và đã quen như vậy. Khi dual boot sang Windows, mình cấu hình tương tự bằng Powertoys, nhưng ở công ty mình không thể cài Powertoys hay Uncap, nên AutoHotKey là lựa chọn duy nhất
Làm theo câu trả lời trên StackOverflow thì Caps Lock và Escape đều rơi vào trạng thái gửi cả hai phím cùng lúc, nên thỉnh thoảng làm hỏng tin nhắn Teams của mình
https://github.com/microsoft/PowerToys
https://github.com/susam/uncap
https://stackoverflow.com/questions/38558376/how-to-map-caps...
https://github.com/jtroo/kanata
Ví dụ https://github.com/evilC/TapHoldManager triển khai cách này trong AHK. Nếu đặt Shift/Ctrl/Win/Alt dưới
fdsavàjkl;, bạn sẽ ít phải dùng ngón út hơn và các ngón tay có thể ở trên hàng home row lâu hơnCapsLock::Esc,Esc::CapsLockMình cũng đã tổng hợp các cải tiến nhanh khác với AHK, như chạy chương trình bằng phím tắt toàn cục: https://nickjanetakis.com/blog/remap-and-set-global-hotkeys-...
https://superuser.com/questions/550679/where-can-i-find-wind...
https://github.com/hwalinga/dotfiles/blob/master/CapsLockCtr...
Nó cũng triển khai chức năng kép: CapsLock hoạt động như Ctrl khi bấm cùng phím khác, và như Esc khi bấm ngắn
Như nhiều người đã nói, AHK cho phép làm được nhiều việc đáng kinh ngạc trên Windows. Cá nhân tôi có thể nói rằng nhờ AHK tôi đã tiết kiệm hoặc kiếm được hơn 100.000 USD
Nhưng bản thân ngôn ngữ AHK không phải là thứ thú vị nhất để viết. Tôi vẫn thắc mắc vì sao không có công cụ nào mạnh tương tự trong Python hay Lua, và https://github.com/pywinauto/pywinauto trên thực tế cũng không hoạt động tốt bằng AHK. Suy cho cùng bên dưới là WinAPI, nên nếu có một thư viện wrapper tốt thì C# cũng có thể là một lựa chọn. Tôi nghĩ lý do AHK phổ biến là vì tuy xấu xí nhưng nó chạy được
https://www.autohotkey.com/boards/viewtopic.php?f=80&t=77248
AutoHotKey rất tuyệt. Tôi dùng nó để chuyển ứng dụng nhanh hơn, và trong trường hợp của tôi, tôi dùng Right Alt làm phím “kích hoạt phím tắt” để điều khiển mọi thứ
Giữ phím đó rồi nhấn một phím chữ sẽ luân chuyển qua các instance của ứng dụng tương ứng. Ví dụ, Alt+C chuyển sang cửa sổ VS Code, còn nhóm Alt+F mở một instance ứng dụng mới, như cửa sổ Chrome mới với một profile cụ thể. Alt+số có thể được gán cho cửa sổ hiện đang focus, và nếu nhấn nhanh Alt thì chế độ chỉnh sửa sẽ bật, cho phép gán cửa sổ hiện tại vào một phím số. Trong chế độ chỉnh sửa, H/J/K/L trở thành các phím điều hướng lên/xuống/trái/phải, giúp việc chuyển ứng dụng nhanh hơn nhiều
Kịch bản khiến tôi ấn tượng nhất là một script tôi từng tìm được rồi chỉnh sửa khi chơi Diablo 3. Tôi bắt đầu gặp vấn đề chấn thương căng cơ do lặp lại vì tay cầm chuột đè quá mạnh lên mousepad, nên đã tìm cách chơi bằng controller
Script đó bind chuyển động analog vào một vòng tròn nhỏ quanh nhân vật, cho phép chạy mượt theo bất kỳ hướng nào; khi nhấn nút, nó đổi sang phạm vi xa hơn để dùng kỹ năng tầm xa. Chỉ cần tùy biến một chút cho từng class là nó hoạt động tốt đến đáng kinh ngạc