2009-05-14 2 views
3

그래서 저는이 프로그램을 정말 좋아하며 Applescript를 지원하지 않습니다. 나는 그것을 조금 자동화하고 싶다. 자, 나는 appescript를 사용하여 메뉴에 서브 메뉴에 활성화 또는 어떤 것을 알리라고 지시하도록 프로그램에 지시 할 수 있음을 알았지 만, 어쨌든 솔직히 나는 애플 스크립트를별로 좋아하지 않습니다.다른 프로그램의 기능을 호출 하시겠습니까?

IB에서 NIB 파일을 열면 FirstResponder로 전송되는 메시지를 볼 수 있습니다. 예를 들어 복사 메뉴 항목은 "copy:"을 보냅니다. 이 프로그램을 다른 프로그램에서 직접 호출 할 수있는 방법이 있습니까?

+1

F- 스크립트에 대해 들어 보셨습니까? – user57368

답변

2

아니요. 이유 때문에 보호 메모리라고합니다. 다른 프로그램은 응용 프로그램과 완전히 분리되어 있습니다. 다른 앱에 코드를 넣을 수있는 방법이 있지만 (a) 매우 익숙하지 않습니다. (b) 루트 권한이 필요합니다. 나머지 앱은 철저하고 철저해야합니다. (c) 코드 작성은 흑인 예술입니다. 운영 체제 커널 인터페이스, 가상 메모리 관리, ABI, 링커/로더의 내부, 어셈블러 프로그래밍, 운영 매개 변수 및 응용 프로그램이 실행되는 특정 프로세서의 기타 세부 사항에 대한 지식이 필요합니다.

정말 AppleEvents 및 기타 이러한 IPC 메커니즘이 이유가 있습니다.

당신의 다른 대안들 (모두 솔직히 말하면 약간 해키가 있으며 목표 앱이 원하는/기대하는 상태에 있다는 것을 확실히 보장 할 수있는 상당한 부담을줍니다) 찾고있는 데이터에 액세스하십시오 위치 : 당신은 당신이 직접 필요한 곳에서 텍스트를 잡기 위해 UI 트리를 통과하거나 메뉴 항목을 활성화 할 수있는을 통해 ApplicationServices 프레임 워크에서

  1. 접근성 API는. 그러나 앱에 대한 액세스 권한은 사용자가 명시 적으로 부여해야합니다 (UI 스크립팅의 요구 사항과 거의 동일 함).
  2. CoreGraphics API (ApplicationServices 프레임 워크 내에서 다시)를 사용하여 키보드 이벤트를 대상 응용 프로그램 (또는 시스템에만)으로 직접 보낼 수 있습니다. 이것은 Command-down, C-down, C-up, Command-up의 네 가지 이벤트를 보내는 것을 의미합니다.

이들 중 어느 것도 이상적이지 않습니다. 솔직히 말해서, 가장 좋은 방법은 요구 사항을 살펴보고 뭔가를 직접 잡는 대신 사용자가 입력을 요청하는 등의 방법으로 문제를 해결할 수있는 방법을 파악하는 것입니다.

+0

OS X에서 다른 응용 프로그램으로 코드를 가져 오는 것은 (불행히도 다행히도, 어떻게 보느냐에 따라) 거기에 나열된 것들이 대부분 필요합니다. 예를 들어 사파리 해킹의 대부분은 입력 관리자 또는 타사 부트 스트랩 도구를 기반으로하므로 어셈블리, 커널 프로그래밍 등에 대해 알 필요가 없습니다. 부적절하지는 않습니다 그러나 실제로 그 경로를 가고 싶다면 거의 어렵지 않습니다. 그리고 이것이 이것이 개인적인 용도를위한 도구 일 뿐이라면 안정성/안전성이 문제가되지 않을 수도 있습니다. – smorgan

+0

* shrugs * 위의 모든 것을 수행하고 몇 년 동안 OS X 운영 체제의 명령 및 제어를 담당 했으므로 필자도 노를 넣을 수도 있다고 생각했습니다. 또한 입력 관리자가 사라지는 것을 기억하십시오. 빠르며, 처음에는 Cocoa 응용 프로그램에만 영향을 미칩니다. –

+0

이 답변이 왜 투표되었는지 확실하지 않습니다. 그게 내 의견으로 인해 분명히 해두겠습니다 : 저는 전반적인 대답에 동의하지 않았습니다. 질문에 대한 대답은 분명히 "아니오"입니다. 응용 프로그램에서 메소드를 호출하려는 경우 (IPC 기반 액세스를 허용하는 DO가없는 경우) 해당 프로세스에 코드를 가져와야합니다. – smorgan

0

짐 (Jim)은 약간의 요점을 과장할지 모른다. 그는 틀리지는 않지만 오해의 소지가있는 것처럼 보입니다. 코코아 프로그램이 자신 만의 코드를 실행할 수있게하는 많은 방법이 있습니다 (Carbon은 더 어렵습니다). 접근성 API는이 방법으로 매우 일반적으로 사용됩니다 (일반적으로 API를 다시 용도로 사용하기를 기대합니다). Fscript은 다른 코코아 프로그램의 내부에 모든 종류의 액세스 권한을 부여 할 수 있습니다. 입력 관리자가 어떤 시점에서 장면을 빠져 나갈 수는 있지만, 오늘 SIMBL은 여전히 ​​이런 종류의 작업을 수행하고 있습니다.

AppleScript를 좋아하든 원하지 않든간에 Apple 이벤트는 Apple이 프로그램 간 제어를 위해 제공하는 주요 방법입니다. Script Editor의 Open Library 함수를 두 번 확인하여 프로그램에 실제로 AppleScript 지원 기능이 있는지 확인하십시오. 요즘에는 Leopard의 Scripting Bridge를 사용하여 Objective-C에서 Apple Events 전체를 코딩 할 수 있습니다. 당신이 원한다면 나는 tutorial을 썼다. (여전히 애플에 의해 문서화되어있다.)

코코아는 리버스 엔지니어링의 꿈입니다. SIMBL을 호스트하는 사람들은 좋은 intro to the subject을 가지고 있습니다. "Wolf"도 이에 대한 유용한 정보를 많이 씁니다.

짐의 권리. 이러한 접근 방식 중 많은 부분이 잘못 수행되면 시스템을 완전히 불안정하게 만들 수 있습니다. 나는 제작 시스템에서이 일을별로하지 않는다. 나는 그들에게 일해야한다. 그러나 Mac 응용 프로그램을 만들 수있는 많은 것들이 있습니다. 모든 조각이 실제로 어떻게 작동 하는지를 이해하는 Mac 개발자의 교육 중 좋은 부분입니다.

+0

하지만 질문은 매우 구체적이었습니다. "다른 프로그램에서 직접 [개체의 임의의 메시지]를 호출 할 수있는 방법이 있습니까?" 예, 프로세스 간 호출을 위해 설계된 Apple Events 및 DO와 같은 것들이 있습니다. 그렇습니다. 코드를 해킹 할 수는 있지만 요청 된 내용을 구체적으로 처리 할 방법이 없습니다. – smorgan

1

SIMBL 또는 mach_inject에 관심이있을 수 있습니다. SIMBL은 당신을 위해 주입을하는 데몬입니다 (mach_inject를 기반으로 한 포크에서, ScriptingAdditions 해킹을 통한 주입에 기반한 원래 버전에서). 그래서 여러분은 코드가있는 번들을 SIMBL 디렉토리에 넣고 SIMBL이 주입 할 필요가 있습니다 그것은 당신을 위해 대상 응용 프로그램에. 또는 mach_inject를 통해 직접 그렇게 할 수 있습니다. 또는 좀더 편리하게, mach_inject_framework는 어떤 프레임 워크를로드하는 코드를 주입하고 실행합니다.

관련 문제