Tổ hợp phím AppleScript bỏ qua số


6

Một AppleScript rất đơn giản như thế này:

tell application "System Events"
    keystroke "abc 123"
end tell

kết quả chỉ là abc abc Cảnh được gõ. Tài nguyên trực tuyến cho thấy điều này không nên là trường hợp. Thêm một độ trễ giữa các lần nhấn phím không giúp được gì.

Điều gì có thể gây ra điều này hoặc làm thế nào tôi có thể xác định những gì có thể gây ra điều này?

Câu hỏi phụ: trong thuật ngữ AppleScript, tổ hợp phím là gì? Một chức năng, lệnh, cái gì khác?


bạn có loại bàn phím nào Điều duy nhất tôi có thể nghĩ là một cái gì đó giống như khóa số (mặc dù tôi sẽ ngạc nhiên nếu ngay cả khi bạn có nó trên nó sẽ ảnh hưởng đến lệnh gõ phím)
markhunte

Tôi đang dùng MacBook Pro, không có numlock. Ngoài ra, tôi đã quên đề cập rằng trong một thời gian dài, tôi đã có một AppleScript, đó là "số phím".
Praxeolitic

Câu trả lời:


6

Có một cái nhìn https://stackoverflow.com/questions/18136567/applescript-keystroke-not-behaving-as- ngạc nhiên & amp; danh sách mã ANSI tại Làm cách nào để tự động hóa một phím bấm trong AppleScript?

Có vẻ như bạn không phải là người duy nhất gặp vấn đề. Một giải pháp trên đó là sử dụng mã khóa thay thế ...

tell application "System Events"
    key code {18} using {command down}

Nó có thể phụ thuộc vào ứng dụng nào bạn đang cố gắng gửi tổ hợp phím đến - Tôi vừa thử nghiệm với một tài liệu trống đã mở trong Chỉnh sửa văn bản bằng cách sử dụng

tell application "TextEdit" to activate
tell application "System Events"
    keystroke "abc 123"
end tell

& amp; nó làm việc như mong đợi

Một tổ hợp phím là tương đương theo kịch bản của việc thực sự nhấn phím đó / các phím đó [s]

Làm thế nào về...

tell application "TextEdit" to activate
tell application "System Events"
    keystroke "abc"
    keystroke space
    keystroke "123"
end tell

Bắt tốt câu hỏi đó, nó có liên quan đến âm thanh. Tôi có thể lấy mã khóa để gửi số nhưng ngay cả AppleScript chính xác mà bạn đã đăng cũng không nhập số.
Praxeolitic

Nếu bạn gửi 'mã khóa {83}' 'mã khóa {84}' 'mã khóa {85}' là các phím num-pad, hoặc 18 19 20, là các số ở trên các chữ cái.
Tetsujin

Tôi nghĩ đó là những gì tôi đã làm sau khi đọc câu trả lời của bạn và các liên kết nhưng thật lòng vào thời điểm này tôi quên mất. Đó là một chút khó xử nhưng nó đã làm việc.
Praxeolitic

tbh, tôi khá thích nghiên cứu - & amp; Bây giờ tôi có một ứng dụng nhỏ sẽ cho tôi biết các mã khóa ;-)
Tetsujin

3

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 OFFvà 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 :)


1

Khi @ user271866, tôi gặp vấn đề này và phát hiện ra rằng đó là "Kích hoạt phím chuột" đang được kiểm tra trong Tùy chọn hệ thống đang ảnh hưởng đến hành vi của tổ hợp phím.

Tôi đã có một dịch vụ tự động hóa mà tôi đã sử dụng để nhập cụm từ tìm kiếm vào tiêu điểm và sao chép & amp; dán kết quả. Khi tôi có một máy tính mới, tôi đã cài đặt dịch vụ. Tôi cũng nhớ bật phím chuột trong quá trình thiết lập và may mắn là có nó, trước khi tôi chạy dịch vụ lần đầu tiên trên máy tính mới này, pin Magic Mouse 2 của tôi đã chết và tôi đã sử dụng các phím chuột để kết nối Chuột Magic cũ của mình. Sau đó tôi đã gặp phải hành vi thất thường từ dịch vụ khi tôi thử nó. Trong một linh cảm, tôi đã thử vô hiệu hóa các phím chuột và chạy dịch vụ và nó đã hoạt động! Nó dán các số cùng với phần còn lại của chuỗi.

Một điều cần lưu ý là, nó không chỉ là những con số. Các ký tự khác trên bàn phím số (nhưng không phải tất cả) cũng sẽ không bị "gõ" bởi keystroke. ./ cũng sẽ không hoạt động trong một chuỗi được cung cấp cho tổ hợp phím. Do đó, tôi đã sửa đổi mã của @ Insomniac_Software để tạo một trình thay thế / trình bao bọc hoạt động cho chức năng gõ phím:

--This is a replacement for the keystroke function, which fails when "Enable Mouse Keys" is checked in System Preferences -> Accessibility -> Mouse & Trackpad.  Keystroke will not "type out" any numbers, a dot ('.') or a slash ('/') that are in the supplied string when this option is enabled in System preferences.  This method is safe to use whether that setting is checked or not.  Call like this: my keystrokeForMouseKeys("your string")
on keystrokeForMouseKeys(theString)
    tell application "System Events"
        repeat with theChar in (every character of theString)
            set theCode to id of theChar
            if theCode is 44 then
                key code 44
                --Not sure why 46 (m) is what you get when you call id on "." but key code 47 types a "." and key code 46 types an 'm'...
            else if theCode is 46 then
                key code 47
            else if ((theCode ≥ 48) and (theCode ≤ 57)) then
                key code {item (theCode - 47) of {29, 18, 19, 20, 21, 23, 22, 26, 28, 25}}
            else
                keystroke theChar
            end if
        end repeat
    end tell
end keystrokeForMouseKeys

Bây giờ, nếu bạn gọi my keystrokeForMouseKeys("./0123456789"), bạn lấy:

./0123456789

Đã thử nghiệm trên macOS High Sierra 10.13.6.


Ồ vâng, tôi cũng khuyến khích mọi người gửi phản hồi cho Apple về lỗi trong tổ hợp phím khi bật Phím chuột được chọn. Tôi đã làm. Càng nhiều người phàn nàn, họ càng có nhiều khả năng sẽ sửa nó.
hepcat72

0

bạn đã kiểm tra xem Phím chuột có được bật chưa (Tùy chọn hệ thống - & gt; Khả năng truy cập - & gt; Chuột & amp; Bàn di chuột - & gt; Bật phím chuột)?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.