Có thể với CoreGraphics ( CGEventPost
), đó là API C (nó không hoạt động trong Cacao-AppleScript), nhưng có thể gọi một tệp thực thi từ AppleScript.
Đây là phương pháp để tạo tệp thực thi với Xcode (Phiên bản 8.3.3):
Bạn có thể tự làm điều đó (bạn có thể tải xuống Xcode từ App Store ) hoặc nhờ một người đáng tin cậy tạo ra tệp thực thi.
1- Mở Xcode, chọn menu " Tệp " -> " Mới " -> " Dự án ..."
2- Chọn macOS và Công cụ dòng lệnh , nhấp vào nút " Tiếp theo ".
3- Đặt tên cho nó TypeCharacters
, chọn Objective-C làm Ngôn ngữ, nhấp vào nút " Tiếp theo ".
4- Lưu dự án vào thư mục mong muốn.
5- Trong cửa sổ Xcode, chọn main.m
biểu tượng, xóa văn bản trong cửa sổ và dán một trong hai mã sau:
Mã cần một vòng lặp vì một lỗi, CGEventKeyboardSetUnicodeString()
phương thức cắt một chuỗi vượt quá hai mươi ký tự hoặc đó là một giới hạn (không được ghi lại).
Mã này sử dụng một vòng lặp để nhập danh sách các ký tự ở mỗi lần lặp, danh sách có thể chứa một đến hai mươi ký tự. (Thật nhanh, 1 giây để nhập 2400 ký tự trong tài liệu của TextEdit trên máy tính của tôi.)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
if (argc > 1) {
NSString *theString = [NSString stringWithUTF8String:argv[1]];
NSUInteger len = [theString length];
NSUInteger n, i = 0;
CGEventRef keyEvent = CGEventCreateKeyboardEvent(nil, 0, true);
unichar uChars[20];
while (i < len) {
n = i + 20;
if (n>len){n=len;}
[theString getCharacters:uChars range:NSMakeRange(i, n-i)];
CGEventKeyboardSetUnicodeString(keyEvent, n-i, uChars);
CGEventPost(kCGHIDEventTap, keyEvent); // key down
CGEventSetType(keyEvent, kCGEventKeyUp);
CGEventPost(kCGHIDEventTap, keyEvent); // key up (type 20 characters maximum)
CGEventSetType(keyEvent, kCGEventKeyDown);
i = n;
[NSThread sleepForTimeInterval:0.004]; // wait 4/1000 of second, 0.002 it's OK on my computer, I use 0.004 to be safe, increase it If you still have issues
}
CFRelease(keyEvent);
}
}
return 0;
}
Mã này sử dụng một vòng lặp để nhập một ký tự ở mỗi lần lặp (Nó chậm hơn mã đầu tiên).
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
if (argc > 1) {
NSString *theString = [NSString stringWithUTF8String:argv[1]];
UniChar uChar;
CGEventRef keyEvent = CGEventCreateKeyboardEvent(nil, 0, true);
for (int i = 0; i < [theString length]; i++)
{
uChar = [theString characterAtIndex:i];
CGEventKeyboardSetUnicodeString(keyEvent, 1, &uChar);
CGEventPost(kCGHIDEventTap, keyEvent); // key down
CGEventSetType(keyEvent, kCGEventKeyUp);
CGEventPost(kCGHIDEventTap, keyEvent); // key up (type the character)
CGEventSetType(keyEvent, kCGEventKeyDown);
[NSThread sleepForTimeInterval:0.001]; // wait 1/1000 of second, no need of this line on my computer, I use 0.001 to be safe, increase it If you still have issues
}
CFRelease(keyEvent);
}
}
return 0;
}
Lưu ý : Mã này hoạt động trên macOS Sierra và sẽ hoạt động trên El Capitan , nhưng không hoạt động trên hệ điều hành cũ .
6- Chọn menu " Sản phẩm " -> " Xây dựng ".
7- Chọn TypeCharacters
biểu tượng trong thư mục Sản phẩm , nhấp chuột phải và chọn menu " Hiển thị trong Trình tìm kiếm " trong menu ngữ cảnh.
8- Từ Finder, di chuyển tệp " TypeChar character " vào thư mục mong muốn, thoát Xcode , chỉ vậy thôi.
Từ một AppleScript , hãy gọi tệp thực thi, như thế này
set myString to "ùéèà ² ³ é ½ ₭ "
do shell script "'/full path/of/TypeCharacters' " & quoted form of myString