CoreGraphics(CGEventPost
)では可能ですが、C API(Cocoa-AppleScriptでは動作しません)ですが、AppleScriptから実行可能ファイルを呼び出すことは可能です。
Xcode(バージョン8.3.3)で実行可能ファイルを作成する方法は次のとおりです。
自分で行う(App StoreからXcodeをダウンロードする)か、信頼できる人に実行可能ファイルの作成を依頼することができます。
1- Xcodeを開き、メニュー「ファイル」->「新規」->「プロジェクト ...」を
選択します
2- macOSとコマンドラインツールを選択し、[ 次へ ]ボタンをクリックします。
3-名前を付けてTypeCharacters
、言語としてObjective-Cを選択し、「次へ」ボタンをクリックします。
4-プロジェクトを目的のフォルダーに保存します。
5- Xcodeのウィンドウで、main.m
アイコンを選択し、ウィンドウ内のテキストをクリアして、次の2つのコードのいずれかを貼り付けます:
バグ、CGEventKeyboardSetUnicodeString()
メソッドが20文字を超える文字列を切り捨てる、または制限(ドキュメント化されていない)のため、コードにループが必要です。
このコードはループを使用して、各反復で文字のリストを入力します。リストには1〜20文字を含めることができます。(私のコンピューターのTextEditの文書に2400文字を入力するのに1秒かかります。)
#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;
}
このコードはループを使用して、各反復で1文字を入力します(最初のコードよりも遅いです)。
#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;
}
注:このコードはmacOS Sierraで動作し、El Capitan では動作するはずですが、古いOSでは動作しません。
6- [メニュー] [ 製品 ] -> [ ビルド ]を選択します。
7- 製品フォルダのTypeCharacters
アイコンを選択し、右クリックして、コンテキストメニューの[ Finderに表示]メニューを選択します。
8- Finderから「TypeCharacters」ファイルを目的のフォルダーに移動し、Xcodeを終了します。
AppleScriptから、次のように実行可能ファイルを呼び出します
set myString to "ùéèà ² ³ é ½ ₭ "
do shell script "'/full path/of/TypeCharacters' " & quoted form of myString