É possível com CoreGraphics ( CGEventPost
), é um C API (não funciona em um Cocoa-AppleScript), mas é possível chamar um executável de um AppleScript.
Aqui está o método para criar o executável com o Xcode (versão 8.3.3):
Você pode fazer isso sozinho (você pode baixar Xcode de Loja de aplicativos ), ou peça a uma pessoa de confiança para criar o executável.
1- Abra o Xcode, selecione o menu " Arquivo "- & gt;" Novo "- & gt;" Projeto ... "
2- Selecione Mac OS e Ferramenta de linha de comando , Clique no " Próximo "botão.
3- Diga TypeCharacters
selecione Objetivo-C como idioma, clique no botão " Próximo "botão.
4- Salve o projeto na pasta desejada.
5- Na janela do Xcode, selecione o main.m
ícone, limpe o texto na janela e cole um desses dois códigos:
O código precisa de um loop por causa de um bug, o CGEventKeyboardSetUnicodeString()
método trunca uma string que excede vinte caracteres, ou é um limite (não documentado).
Este código usa um loop para digitar uma lista de caracteres em cada iteração, a lista pode conter de um a vinte caracteres. (É rápido, 1 segundo para digitar 2400 caracteres em um documento do TextEdit no meu computador.)
#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;
}
Este código usa um loop para digitar um caractere em cada iteração (é mais lento que o primeiro código).
#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;
}
Nota : Este código funciona em MacOS Sierra e deve trabalhar em o capitão , mas não em um mais antigo OS .
6- Selecione o menu " produtos "- & gt;" Construir ".
7- Selecione os TypeCharacters
ícone no produtos pasta, clique com o botão direito do mouse e selecione a opção " Mostrar no Finder "menu no menu contextual.
8- Do Finder, mova o " TypeCharacters "arquivo para a pasta desejada, saia Xcode , Isso é tudo.
De um AppleScript , chame o executável, assim
set myString to "ùéèà ² ³ é ½ ₭ "
do shell script "'/full path/of/TypeCharacters' " & quoted form of myString