Một số thông tin khác về vấn đề này mà tôi đã phát hiện ra là khi sử dụng keystroke
với các số, Sự kiện hệ thống luôn gửi chúng dưới dạng ANSI_Keypad#
ký tự (mã 82-92) thay vì những gì bạn có thể mong đợi như ANSI_#
ký tự (mã 18-29).
Đối với hầu hết các ứng dụng Mac, điều này không quan trọng vì bản thân OS X không quan tâm (sử dụng, hỗ trợ, v.v.) NUMLOCK
chức năng trên Bàn phím, do đó, số Bàn phím được xem giống như số bàn phím. Tuy nhiên, nó sẽ vượt qua NUMLOCK
nhấn phím cho ứng dụng nếu bạn có bàn phím / bàn phím có phím này.
Có một vài ứng dụng theo dõi NUMLOCK
khóa (ví dụ: ứng dụng VMware Fusion khi chạy Windows VM) và sẽ thay đổi hành vi dựa trên NUMLOCK
tiểu bang.
Vì vậy, ví dụ, nếu AppleScript gửi keystroke "456"
đến một NUMLOCK
ứng dụng nhận thức.
- Nếu
NUMLOCK
nhà nước là ON
, các số "456" sẽ xuất hiện.
- Nếu
NUMLOCK
nhà nước là OFF
, các khóa tương đương nhận được là Left Arrow
5
Right Arrow
Trong câu hỏi ban đầu, AppleScript đã gửi abc 123
nhưng rất có thể ứng dụng của anh ấy (không được đề cập) đã biết về NUMLOCK
tiểu bang, hiện đang OFF
và do đó thực thi các khóa như abc
[space]
End
Down Arrow
Page Down
Tôi kết hợp một hàm AppleScript nhỏ lặp lại qua chuỗi gửi đã cho key code
lệnh cho bất kỳ số nào và keystroke
lệnh cho bất kỳ nhân vật khác.
on numberAsKeycode(theString)
tell application "System Events"
repeat with currentChar in (every character of theString)
set cID to id of currentChar
if ((cID ≥ 48) and (cID ≤ 57)) then
key code {item (cID - 47) of {29, 18, 19, 20, 21, 23, 22, 26, 28, 25}}
else
keystroke currentChar
end if
end repeat
end tell
end numberAsKeycode
set myString to "abc 123"
numberAsKeycode(myString)
Mà thực hiện như sau
tell application "System Events"
keystroke "a"
keystroke "b"
keystroke "c"
keystroke " "
key code {18}
key code {19}
key code {20}
end tell
Hi vọng điêu nay co ich :)