É 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
myString
excede 20 caracteres, a seqüência será truncada. Ou seja, qualquer texto que segue o vigésimo caractere não será digitado. Você sabe como consertar isso?#import <Foundation/Foundation.h>
linha do seu código na sua edição, mas essa linha ainda é necessária para uma compilação bem-sucedida. Eu sei que esta linha de código está lá por padrão, mas existe alguma ambiguidade porque suas instruções dizem para "limpe o texto na janela."= 278,932
mas a seguinte string foi digitada:=2 78,93
.Uma solução alternativa (com a área de transferência):
1 - Você pode usar um método de cacau de um shell:
2 - Ou um applet Cocoa-AppleScript:
fonte
A fim de
keystroke
um caractere, esse caractere precisa ser mapeado para uma tecla real no teclado selecionado.Por exemplo, eu posso
keystroke
é e ² muito bem, porque eu estou usando o Francês - PC layout de teclado. No entanto, um teclado QWERTY americano padrão não possui essas teclas e não será capaz dekeystroke
eles.fonte
Você pode definir todos os seus conjuntos de caracteres especiais como variáveis, como este
Alguns caracteres especiais são pressionados corretamente quando você os define como variáveis. Qualquer um dos caracteres especiais que você definir como variáveis que não digitam corretamente, você pode adicionar “substituições de texto” nas preferências do sistema para o seu teclado.
Certifique-se de selecionar todos os itens e arrastá-los para sua área de trabalho ou qualquer outro lugar. Isso criará um arquivo .plist que será um backup das configurações originais. Você pode arrastar esse arquivo de volta a qualquer momento.
Em seguida, no ScriptEditor, certifique-se de ter as substituições de texto ativadas no submenu "substituições" do menu de edição.
fonte