Я пытаюсь создать приложение OSX, которое будет копией экранной клавиатуры. Можно ли вставить какой-либо текст в позицию курсора другого активного приложения? Заранее спасибо!Как вставить текст в позицию курсора другого приложения в приложении Mac OSX (например, OSK)?
2
A
ответ
1
Не уверен, если это поможет, но в Applescript вы можете сделать что-то вроде
tell application "System Events"
keystroke "Stuff here"
end tell
Так может быть, вы можете попробовать позвонить, что в какао с использованием NSApplescript
или с помощью NSTask
и запустить
osascript -e 'tell application "System Events" to keystroke "Stuff here"'
+0
Это тоже не работает в Mac App Store, поэтому вам лучше всего это разъяснить. – SevenBits
5
Это возможное. Доступность позволяет изменять контент других приложений, но ваше приложение не может быть изолировано и, следовательно, недоступно через AppStore.
CFTypeRef focusedUI;
AXUIElementCopyAttributeValue(AXUIElementCreateSystemWide(), kAXFocusedUIElementAttribute, &focusedUI);
if (focusedUI) {
CFTypeRef textValue, textRange;
// get text content and range
AXUIElementCopyAttributeValue(focusedUI, kAXValueAttribute, &textValue);
AXUIElementCopyAttributeValue(focusedUI, kAXSelectedTextRangeAttribute, &textRange);
NSRange range;
AXValueGetValue(textRange, kAXValueCFRangeType, &range);
// replace current range with new text
NSString *newTextValue = [(__bridge NSString *)textValue stringByReplacingCharactersInRange:range withString:newText];
AXUIElementSetAttributeValue(focusedUI, kAXValueAttribute, (__bridge CFStringRef)newTextValue);
// set cursor to correct position
range.length = 0;
range.location += text.length;
AXValueRef valueRef = AXValueCreate(kAXValueCFRangeType, (const void *)&range);
AXUIElementSetAttributeValue(focusedUI, kAXSelectedTextRangeAttribute, valueRef);
CFRelease(textValue);
CFRelease(textRange);
CFRelease(focusedUI);
}
Этот код не проверяет наличие ошибок и делает предположение, что сфокусированный элемент является текстовой областью.
FYI, на всякий случай: ответ (независимо от деталей, извините, что я не знаю их из рук в руки) является * квалифицированным * да - как, например, как работает вспомогательное программное обеспечение. * Однако * под песочницей и, следовательно, в App Store, общий ответ, безусловно, нет - ввод в другое приложение потенциально является серьезной проблемой безопасности. Конечно, если ваше приложение не будет в песочнице, тогда его ограничения не будут иметь значения. – CRD
@CRD Что вы подразумеваете под песочницей. Вы имеете в виду, что если я отправлю приложение в appstore, он не будет работать? Но как разработчик Apple, я мог бы запустить это приложение в своей системе? Не могли бы вы рассказать ... Спасибо. – Selvin
App Sandbox - это система безопасности, которая ограничивает возможности приложения - какие файлы он может получить, может ли он делать сетевые подключения и т. Д. И т. Д. Все приложения для iOS изолированы, а для OS X они являются необязательными. Однако все приложения, которые будут продаваться в Mac App Store, должны быть изолированы. Посмотрите приложение Sandbox в документах Apple для деталей. – CRD