KR100965708B1 - 사용자 인터페이스 정보로의 액세스를 제공하는 시스템 및방법 - Google Patents

사용자 인터페이스 정보로의 액세스를 제공하는 시스템 및방법 Download PDF

Info

Publication number
KR100965708B1
KR100965708B1 KR1020057002094A KR20057002094A KR100965708B1 KR 100965708 B1 KR100965708 B1 KR 100965708B1 KR 1020057002094 A KR1020057002094 A KR 1020057002094A KR 20057002094 A KR20057002094 A KR 20057002094A KR 100965708 B1 KR100965708 B1 KR 100965708B1
Authority
KR
South Korea
Prior art keywords
client
user interface
information
server
event
Prior art date
Application number
KR1020057002094A
Other languages
English (en)
Other versions
KR20050056191A (ko
Inventor
로버트 신클레어
퍼트리셔 엠. 와고너
브렌단 맥케온
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20050056191A publication Critical patent/KR20050056191A/ko
Application granted granted Critical
Publication of KR100965708B1 publication Critical patent/KR100965708B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/133Protocols for remote procedure calls [RPC]
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Information Transfer Between Computers (AREA)
  • User Interface Of Digital Computer (AREA)
  • Computer And Data Communications (AREA)

Abstract

클라이언트에게 사용자 인터페이스 정보를 제공하는 방법 및 시스템이 기술된다. 사용자 인터페이스 정보를 클라이언트에게 제공하는 액세스 가능 시스템이 개시된다. 액세스 가능 시스템은 사용자 인터페이스 자동화 서비스 및 API를 포함하는 액세스 가능 시스템 코어를 포함한다. 사용자 인터페이스 자동화 툴은 사용자 인터페이스 정보가 클라이언트에게 관심이 있는지 여부에 근거하여 정보를 필터링한다. 액세스 가능 시스템은 클라이언트에 관심이 있는 사용자 인터페이스 정보를 알리며, 클라이언트에게 관심이 없는 사용자 인터페이스 정보를 숨기는 논리 트리를 포함하는 클라이언트측 인터페이스를 추가적으로 포함한다. 액세스 가능 시스템은 서버측 기술에 관계없이 서버측으로부터의 정보 전송에 조력하는 서버측 인터페이스 또한 포함한다.
액세스 가능 시스템, 사용자 인터페이스, 논리 트리

Description

사용자 인터페이스 정보로의 액세스를 제공하는 시스템 및 방법{SYSTEM AND METHOD FOR PROVIDING ACCESS TO USER INTERFACE INFORMATION}
본 발명은 보조 공학 및 자동화된 테스팅 제품과, 이들 제품들과 사용자 인터페이스 정보와의 상호작용의 분야에 관한 것이다.
보조 공학(AT)은 컴퓨터 소프트웨어에 포함되고 그에 의해서 제공되는 정보의 습득, 통신 및 액세스 영역에 있어서 도움이 필요한 컴퓨터 사용자를 돕기 위하여 존재한다. 이들 제품들은 컴퓨터 인터페이스와 관련된 정보에 대한 필요성을 가진다. 유사하게, 기존의 자동화된 테스팅 제품들 및 사용자 인터페이스 커맨딩 유틸리티 또한 사용자 인터페이스에 관한 정보에 대한 필요성을 가진다. 현재, 이들 제품들은 사용자 인터페이스(UI) 정보에 대한 충분한 소스를 가지고 있지 못하다. 이들 3가지 타입의 제품들(클라이언트들)은 다른 곳으로부터 그들이 (1) 애플리케이션의 사용자 인터페이스에 대한 정보를 수집하고, (2) UI를 구축하는 데에 이용된 기술에 관계없이 UI 요소를 프로그램적으로 발견하여 문의하고, (3) 키보드 및 포인터 입력을 생성하고, (4) 어떠한 타입의 동작 또는 기능이 현재 이용가능한지를 이해하는 데에 필요한 지원을 가질 것이 요구된다. AT 제품에 이러한 능력 모두를 제공하는 단일 기술은 현재 이용가능하지 않다. 더욱이, 현재의 AT 제품들 은 모든 그래픽 오퍼레이팅 시스템(OS) 기술과 호환가능한 것은 아니며, 과잉의 또는 오해를 일으키는 통지를 집중 방식으로 필터링하고 조정하는 능력이 부족하다. 추가적인 단점은 현재의 자동화 및 액세스 가능 기본 구조가 확장가능하지 않으며, 따라서 새로운 기능을 추가하기 위하여 OS 레벨 변경을 요구한다는 점이다.
더욱이, 현재 애플리케이션의 사용자 인터페이스에 관한 정보를 수집하기 위하여, AT 제품은 사용자를 위한 정보를 획득하기 위한 애플리케이션 특정 코드를 기록하여야 한다. 이러한 애플리케이션 특정 코드를 기록하는 프로세스는 시간이 많이 소요되며 계속적인 유지를 요구한다. 현재 자동화 기본 구조는 과잉의 또는 오해를 일으키는 이벤트 통지를 일관된 방식으로 필터링하고 조정하는 능력 또한 부족하다. 따라서, 이벤트 소비자는 정보를 독립적으로 필터링할 것이 요구된다.
현재의 시스템은 AT 제품이 3가지 세분화된 레벨에서 즉, (1) 데스트탑 상의 모든 것에서, (2) 특정 프로세스에서, (3) 특정 프로세스 내의 스레드에서 이벤트 통지를 요청하는 것을 허용한다. 현재, 클라이언트가 이벤트를 수신하는 경우에는 이벤트가 발생한 특정 윈도우를 위한 윈도우 핸들(window handle) 및 이벤트가 어디에서 발생하였는지를 지시하는 기타 정보 비트를 수신한다. 클라이언트는 이벤트와 관련된 UI 객체를 검색하는 상호 프로세스를 호출할 수 있다. 이러한 객체를 가지고서, 클라이언트는 이러한 객체에 대한 정보를 요청하기 위하여 추가적인 상호 프로세스를 호출할 수 있다. 클라이언트가 5가지의 정보를 요구하는 경우에는, 클라이언트는 5개의 상호 프로세스를 호출하여야 한다. 상호 프로세스 호출은 매우 느리며, 따라서 현재의 액세스 가능 기본 구조를 이용하여 UI 정보를 수집하는 성능 비용은 매우 높아지게 된다. 이러한 타입의 공지된 시나리오가 도 8에 도시되어 있다. 서버 애플리케이션(12)은 이벤트(6)를 유발한다. 커널(kernel)(14)은 어느 클라이언트가 통지를 받아야 하는지를 결정하여 관련 클라이언트(10)에게 이벤트 통지(18)를 전송한다. 클라이언트(10)는 서버 애플리케이션(12)으로부터 프로세스 경계(2)를 넘어서 이벤트 통지(18)와 관련된 객체를 요청한다(16). 서버 애플리케이션(12)은 객체(20)를 반환하고, 그 후에 클라이언트(10)는 이벤트를 유발한 UI 제어에 관한 정보에 대한 요청(16)의 전송을 개시할 수 있게 된다. 서버 애플리케이션(12)은 프로세스 경계(2)를 넘어 클라이언트(10)에게 요청된 정보(20)를 반환한다.
다른 현재 옵션은 클라이언트 코드가 프로세스 내에서 동적 연결 라이브러리(.DLL)로서 로딩되는 것을 허용한다. 이러한 옵션은 몇몇 단점을 가진다. 먼저, 프로세스 내로 클라이언트 코드를 로딩하는 데에 시스템으로부터 협력을 요구한다. 둘째로, 일단 클라이언트 코드가 애플리케이션의 프로세스 내로 로딩된다면, 수집한 정보를 제한하는 것이 어렵기 때문에 보안 문제를 초래한다. 세째로, 클라이언트에게 효과적인 기술이 되기 위해서, 시스템 상의 모든 프로세스 내로 로딩되어야 한다. 가장 바람직하게는, 신뢰된 클라이언트들만이 다른 애플리케이션의 프로세스 내로 로딩되어야 한다.
더욱이, 클라이언트에게 어떠한 이벤트 통지를 수신하기를 원하는지를 특정하는 능력을 부여하는 시스템이 요구된다. 공지된 시스템에서, 클라이언트는 많은 상호 프로세스를 호출하고, 그 후에 그 이벤트에 관심이 있는지를 판정하기 위하여 정보를 분석할 필요가 있을 수도 있다. 이러한 이벤트 필터링을 보다 효율적인 방식으로 수행할 수 있으며, 새로운 시스템 또는 애플리케이션 이벤트를 지원하도록 용이하게 갱신될 수 있는 메커니즘이 필요하다. 더욱이, 보안 문제를 경감하기 위하여 신뢰된 컴포넌트만을 이용하는 시스템이 요구된다.
현재, 사용자 인터페이스에 관한 정보를 검색할 때에, 특정 UI 프레임워크에 특유한 트리에 액세스하는 데에는 AT 제품이 요구된다. 따라서, 다수의 UI 프레임워크에 대한 사용자 인터페이스 정보를 운반하는 데에 다수의 트리가 요구된다. 이들 상이한 트리들은 사용자들이 관심을 가지지 않거나, 최종 사용자에 의해서 조작되는 가시적인 UI 제어를 관리하는 숨겨진 컨테이너 객체와 같이 사용자에게 보이지 않는 정보를 포함할 수 있을 것이다. 따라서, 사용자에게 관심이 있는 노드들만을 가지는 단일의 통합된 트리에 대한 요구가 존재하게 된다.
AT 제품, 자동화된 테스팅 툴 및 커맨딩 유틸리티에 대한 요구를 충족시키는 솔루션이 요구된다. 이러한 솔루션은 모든 그래픽 OS 기술에 의해서 사용가능하여야 하며, 모든 형태의 UI 및 UI 컴포넌트가 액세스 가능하도록 하여야 한다.
본 발명은 클라이언트에게 사용자 인터페이스 정보를 제공하는 방법 및 컴퓨터 애플리케이션에 관한 것이다. 본 발명의 한 특징에서, 사용자 인터페이스 정보를 클라이언트에게 제공하는 액세스 가능 시스템이 제공된다. 액세스 가능 시스템은 클라이언트가 사용자 인터페이스 정보에 관심을 가지는지 여부에 근거하여 정보를 필터링하는 사용자 인터페이스 자동화 서비스를 포함하는 액세스 가능 시스템 코어를 포함한다. 액세스 가능 시스템은 클라이언트가 관심을 가지는 사용자 인터페이스 정보를 알리며, 클라이언트가 관심을 가지지 않는 사용자 인터페이스 정보를 숨기는 논리 트리를 포함하는 클라이언트측 인터페이스를 추가적으로 포함한다. 액세스 가능 시스템은 애플리케이션을 구축하는 데에 이용된 사용자 인터페이스 엔진에 관계없이 서버측 애플리케이션으로부터 정보 전송을 돕는 서버측 인터페이스 또한 포함한다.
본 발명의 또 다른 특징에서, 사용자 인터페이스 정보를 클라이언트에 제공하는 컴퓨터 실행 방법이 제공된다. 이러한 방법은 액세스 가능 시스템 자동화 서비스를 가지는 사용자 인터페이스 정보를 모니터링하는 단계와, 서버측 기술에 관계없이 서버측 인터페이스를 통해 사용자 인터페이스 정보를 전송하는 단계를 포함한다. 이러한 방법은 클라이언트측 인터페이스의 일부를 형성하는 논리 요소 트리를 사용하여 클라이언트가 관심을 가지는 특정 사용자 인터페이스 정보를 결정하는 단계를 더 포함한다.
본 발명의 추가적인 장점들 및 신규한 특질들이 아래에서 기술될 것이며, 부분적으로는 아래의 설명을 읽는 본 발명의 기술 분야의 당업자들에게 자명하거나, 본 발명의 실시에 의해서 습득하게 될 것이다.
본 발명은 첨부된 도면을 참조하여 아래에서 보다 상세히 설명될 것이다.
도 1은 본 발명을 실시하는 데에 적절한 컴퓨팅 시스템 환경의 블럭도.
도 2는 액세스 가능 시스템, 클라이언트 환경 및 서버 환경 사이의 상호 작 용을 나타내는 도면.
도 3은 액세스 가능 시스템 코어의 컴포넌트들을 도시하는 블럭도.
도 4a 내지 도 4d는 고유 요소로부터의 논리 트리의 생성을 도시하는 도면.
도 5는 논리 트리를 구축하는 절차들의 시퀀스를 도시하는 흐름도.
도 6은 논리 요소를 형성하는 대화 박스 및 그 컴포넌트들을 도시하는 도면.
도 7은 본 발명의 이벤트 메커니즘을 활성화시키는 데에 관련된 절차들을 도시하는 흐름도.
도 8은 이벤트 통지에 대하여 공지된 시스템을 도시하는 도면.
예시적인 오퍼레이팅 환경
도 1은 본 발명이 실시될 수 있는 적절한 컴퓨팅 시스템 환경(100)을 도시한다. 이러한 컴퓨팅 시스템 환경(100)은 적절한 컴퓨팅 환경의 단지 일 예일 뿐이며, 본 발명의 이용 또는 기능성의 범위에 관한 어떠한 제한을 암시하는 것은 아니다. 또한 컴퓨팅 환경(100)은 예시적인 오퍼레이팅 환경(100)에서 나타난 컴포넌트 또는 컴포넌트의 조합과 관련하여 어떠한 의존성 또는 요건을 가지는 것으로 해석되어서는 안된다.
본 발명은 컴퓨터에 의해서 실행되는 프로그램 모듈과 같은 컴퓨터 실행가능 명령들의 통상적인 컨텍스트로 기술될 수 있을 것이다. 통상적으로, 프로그램 모듈은 특정 업무를 수행하거나 특정한 추상적인 데이터 타입을 실행하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 더욱이, 본 발명의 기술 분야 의 당업자는 본 발명이 핸드핼드 디바이스, 멀티프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능 소비자 전자제품, 미니 컴퓨터, 메인프레임 컴퓨터 등을 포함하는 다른 컴퓨터 시스템 구성에서도 실시될 수 있음을 이해할 것이다. 본 발명은 또한 통신 네트워크를 통해서 연결된 원격 처리 디바이스에 의해서 업무가 수행되는 분산 컴퓨팅 환경에서도 실시될 수 있을 것이다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 메모리 저장 디바이스를 포함하는 로컬 및 원격 컴퓨터 저장 매체 모두에 위치될 수 있을 것이다.
도 1을 참조하면, 본 발명을 실행하는 예시적인 시스템(100)은 프로세싱 유닛(120), 시스템 메모리(130) 및 시스템 메모리를 포함하는 다양한 시스템 컴포넌트들을 프로세싱 유닛(120)에 결합시키는 시스템 버스(121)를 포함하는 컴퓨터(110) 형태의 범용 컴퓨팅 디바이스를 포함한다.
컴퓨터(110)는 전형적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 제한적인 것이 아니라 예시적으로, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있을 것이다. 시스템 메모리(130)는 ROM(131) 및 RAM(132)과 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 가령, 시동 중에 컴퓨터(110) 내의 요소들 사이의 정보 전송을 돕는 기본 루틴들을 포함하는 BIOS(133)는 전형적으로 ROM(131) 내에 저장된다. RAM(132)은 전형적으로 즉각 액세스 가능하며/액세스 가능하거나 프로세싱 유닛(120)에 의해서 작동되는 데이터 및/또는 프로그램 모듈들을 포함한다. 제한적인 것이 아니라 예시적으로, 도 1은 오퍼레이팅 시스템(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈 (136) 및 프로그램 데이터(137)를 도시한다.
컴퓨터(110)는 기타 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체 또한 포함할 수 있을 것이다. 예를 들면, 도 1은 비분리형, 비휘발성 자기 매체, 자기 디스크 드라이브((151)로부터 판독하거나 이에 기록하는 하드 디스크 드라이브(141) 및 CD ROM 또는 기타 광 매체와 같은 분리형, 비휘발성 광 디스크로부터 판독하거나 이에 기록하는 광 디스크 드라이브(155)를 도시한다. 예시적인 오퍼레이팅 환경에서 이용될 수 있는 기타 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래쉬 메모리 카드, DVD(digital versatile disk), 디지털 비디오 테이프, 반도체 RAM, 반도체 ROM 등을 포함하지만, 이에 한정되는 것은 아니다. 하드 디스크 드라이브(141)는 전형적으로 인터페이스(140)와 같은 비분리형 메모리 인터페이스를 통해서 시스템 버스(121)에 접속되며, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 전형적으로 인터페이스(150)와 같은 분리형 메모리 인터페이스에 의해서 시스템 버스에 접속된다.
상기되고 도 1에 도시된 드라이브 및 그들의 관련 컴퓨터 저장 매체는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 및 컴퓨터(110)를 위한 기타 데이터의 저장 공간을 제공한다. 예를 들어, 도 1에서 하드 디스크 드라이브(141)는 오퍼레이팅 시스템(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 이들 컴포넌트들은 오퍼레이팅 시스템(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)와 동일하거나 또는 상이할 수 있음에 주목하여야 한다. 오퍼레이팅 시스템(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(1466) 및 프로그램 데이터(147)에는 상이한 참조 부호가 부여되는데, 이는 이들이 최소 상이한 복사본임을 나타내기 위한 것이다. 사용자는 키보드(162) 및 통상적으로 마우스, 트랙볼 또는 터치패드라고 불리는 포인팅 디바이스(161)와 같은 입력 디바이스를 통해서 컴퓨터(110)에 커맨드 및 정보를 입력할 수 있을 것이다. 기타 입력 디바이스(도시되지 않음)는 마이크로폰, 조이스틱, 게임 패드, 위성 수신용 안테나, 스캐너 등을 포함할 수 있을 것이다. 이들 및 기타 입력 디바이스는 종종 사용자 입력 인터페이스(160)를 통해서 시스템 버스에 결합된 프로세싱 유닛(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus)와 같은 다른 인터페이스 및 버스 구조에 의해서 접속될 수 있을 것이다. 모니터(191) 또는 다른 타입의 디스플레이 디바이스 또한 비디오 인터페이스(190)와 같은 인터페이스를 통해서 시스템 버스(121)에 접속될 수 있다. 모니터에 추가하여, 컴퓨터는 출력 주변 인터페이스(195)를 통해서 접속될 수 있는 스피커(197) 및 프린터(196)와 같은 기타 주변 출력 장치 또한 포함할 수 있을 것이다.
본 발명에서의 컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터에의 논리적 접속을 이용하여 네트워킹된 환경에서 동작할 수 있을 것이다. 원격 컴퓨터(180)는 퍼스널 컴퓨터일 수 있으며, 비록 도 1에는 메모리 저장 장치(181)만이 도시되어 있지만 전형적으로 컴퓨터(110)와 관련하여 상기된 요소의 많은 부분 또는 모두를 포함한다. 도 1에 도시된 논리 접속은 LAN(171) 및 WAN(173)을 포함하지만, 다른 네트워크 또한 포함할 수 있을 것이다.
LAN 네트워킹 환경에서 이용되는 경우에, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해서 LAN(171)에 접속된다. WAN 네트워크 환경에서 이용되는 경우에, 컴퓨터(110)는 전형적으로 모뎀(172) 또는 인터넷과 같이 WAN을 통해서 통신을 확립하기 위한 기타 수단을 포함한다. 내장형 또는 내장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 다른 적절한 메커니즘을 통해서 시스템 버스(121)에 접속될 수 있을 것이다. 네트워킹된 환경에서, 컴퓨터(110)와 관련하여 도시된 프로그램 모듈 또는 그 일부는 원격 메모리 저장 디바이스 내에 저장될 수 있을 것이다. 예를 들어, 도 1은 메모리 디바이스(181)에 상주하는 원격 애플리케이션 프로그램(185)을 도시하지만, 이에 한정되는 것은 아니다. 도시된 네트워크 접속은 예시적이며, 컴퓨터들 사이의 통신 접속을 확립하는 다른 수단이 이용될 수 있을 것이다.
비록 컴퓨터(110)의 많은 다른 내부 컴포넌트들이 도시되지 않았지만, 본 발명의 기술 분야의 당업자는 이러한 컴포넌트들 및 상호 접속이 공지되어 있음을 이해할 것이다. 따라서, 컴퓨터(110)의 내부 구성과 관련된 추가적인 세부 사항은 본 발명과 관련하여 개시될 필요가 없을 것이다.
액세스 가능 시스템 구조
도 2에 도시된 바와 같이, 액세스 가능 시스템(200)은 클라이언트 환경(300) 및 서버 환경(400)과 상호작용한다. 액세스 가능 시스템(200)은 도 1과 관련하여 상기된 컴퓨터 환경(100)에서 실시될 수 있을 것이다. 액세스 가능 시스템(200)은 클라이언트(300)와의 상호작용을 돕는 클라이언트측 액세스 가능 인터페이스(220), 서버측(400)과의 상호작용을 돕는 서버측 액세스 가능 인터페이스(230) 및 액세스 가능 시스템 코어(201)를 포함한다. 본 발명의 액세스 가능 시스템(200)은 새로운 애플리케이션 프로그램 인터페이스(API), 인터페이스 및 사용자 인터페이스(UI)에 프로그래밍적으로 액세스하는 메타퍼(metaphor)를 제공한다. 액세스 가능 시스템(200)은 애플리케이션이 자신들과 자신이 사용하는 임의의 컴포넌트들이 액세스 가능토록 한다.
클라이언트 환경(300)은 바람직하게 보조 공학(AT) 제품 또는 자동화된 UI 테스팅 툴을 포함한다. 서버측(400)은 도 2에 도시된 바와 같은 다양한 상이한 기술들을 실시할 수 있을 것이다. 서버 시스템(410)은 제 1 타입의 UI에서 발견될 수 있는 어댑터(412) 및 코어(414)를 포함한다. 서버 시스템(420)은 미국 워싱턴 레드몬드 소재의 마이크로소프트사로부터의 마이크로소프트 오퍼레이팅 시스템 제품으로부터 얻을 수 있는 Win32 UI와 같은 제 2 타입의 UI에서 발견될 수 있는 프록시 컴포넌트(422) 및 제어부(424)를 포함한다. 서버 시스템(430)은 대안이 되는 제 3 타입의 UI로부터 발견할 수 있는 어댑터(432) 및 내부 OM(434)을 포함한다.
도 3에 도시된 바와 같이, 액세스 가능 시스템(200) 내에 포함된 이벤트 메커니즘(210)은 클라이언트 환경(300)과 서버 환경(400)과의 상호작용을 돕는 데에 UI 자동화 클라이언트(202) 및 UI 자동화 서버(204)에 의존한다. UI 자동화 클라이언트(202) 및 UI 자동화 서버(204)는 본 발명의 이벤트 메커니즘(210)을 참조하여 아래에서 보다 상세히 설명된다. 본 발명의 액세스 가능 시스템은 클라이언트(AT 제품)(300)에게 (1) 애플리케이션의 사용자 인터페이스에 관한 정보를 수집하 고, (2) UI를 구축하는 데에 이용된 기술에 관계없이 UI 요소를 프로그램적으로 발견하여 문의하며, (3) 키보드 및 포인터 입력을 생성하고,(4) 어떠한 타입의 동작 또는 기능이 현재 이용가능한지를 이해하는 능력을 제공한다. 액세스 가능 시스템(200)은 애플리케이션이 그들 자신 및 그들의 컴포넌트들을 액세스 가능하도록 한다. 도 2 및 도 3에 도시된 구조는 (1) 논리 UI 트리, (2) 제어 패턴, (3) 이벤트 메커니즘, (4) 입력 API(본 명세서에는 포함되지 않음) 및 (5) 속성을 포함하는 액세스 가능 시스템(200)의 5가지 주된 특징을 가능하게 한다.
UI 액세스 논리 트리(222)
액세스 가능 시스템(200)의 필수 컴포넌트는 도 4d에 도시된 예와 같은 논리 트리(222)이다. 트리(222)는 클라이언트측 액세스 가능 인터페이스(220)에 포함된다.
논리 트리(222)는 제어 또는 애플리케이션 개발자에 의해서 실시되어야 하는 별도의 트리가 아닌 UI 요소의 기초 구조의 계층의 필터링된 모습이다. 대신에, 몇몇 잘 규정된 특성들을 관심을 가지는 것과 관심을 가지지 않는 것으로 키 오프(key off)하는데, 이는 구조적인 요소가 논리 트리(222)에서 노출되어야하는지 여부를 나타낸다. 액세스 가능 시스템 코어(201)는 AT 제품 또는 테스트 스크립에 제공되는 필터링된 UI 논리 트리(222)를 생성하는 데에 이러한 정보를 소비한다.
논리 트리(222)는 요소의 트리이며, 이러한 요소는 각기 제어, 제어 상태에 있는 아이템 또는 다이얼로그, 페인(pane) 또는 프레임일 수 있는 그룹핑 구조를 나타낸다. 논리 트리(222)의 구조는 (상이한 기초 구조를 이용하여 제어가 실제로 실행된 경우라도)사용자에 의해서 인식된 대로의 애플리케이션의 UI를 나타내어야 한다. 트리는 시간이 지나더라도 안정적이어야 한다. 애플리케이션이 사용자에게 동일한 것으로 보이는 한, 애플리케이션의 실행 세부 사항이 변경된 경우라도 그러한 애플리케이션을 나타내는 논리 트리(222)는 동일한 상태로 남아야 한다. 마이크로소프트 OS 제품의 쉘의 "ShDocView" 윈도우와 같이 구조적 이유 및 실시상의 이유로 존재하는 고유 요소는 이러한 트리에 나타나서는 안되는데, 이는 사용자가 이들을 인식할 수 없기 때문이다.
논리 트리(222)는 다수의 상이한 프로세스들을 통합하여 이들이 클라이언트에게는 동일하게끔 할 수 있는 다수의 단편(fragment)들로부터 구축된 단일의 트리이다. 논리 트리(222)는 대량 검색을 가능하게하며, 속성의 리스트에 대한 값을 획득할 수 있도록 한다. 사용자가 통상적으로 상기 값들을 요청하는 상호 프로세스 호출을 호출하였을 시간까지, 액세스 가능 시스템(200)은 논리 트리(222)의 사용을 통해서 이들을 패치(fetch)할 것이다.
공지된 시스템에서 알려진 바와 같이 한 단계로 구성되는 대신에, 논리 트리(222)는 원시 트리를 구축하는 데에 이용되는 단편들로부터 구성된다. 도 5에 도시된 바와 같이, 3가지의 주 절차가 논리 트리(222)를 구축한다. 절차 72에서, 액세스 가능 시스템(200)은 기초 기술의 고유 요소의 위치를 파악하여 도 4a에 도시된 원시 트리에 도달한다. 단계 74에서, 액세스 가능 시스템(200)은 원시 요소를 결합하여 도 4b에 도시된 바와 같은 원시 트리(20)를 형성한다. 마지막으로, 절차 76에서, 논리 트리(222)가 관심이 없는 컴포넌트들을 도 4d에 도시된 바와 같이 원 시 트리(20)에서 숨김으로써 획득된다.
도 4a는 2개의 고유 트리(10 및 14)를 도시하는데, 이들은 Win32 UI 또는 다른 이용가능한 UI와 같은 기초 기술의 고유 요소로부터 구성된다. 원시 트리(10)는 부모 노드(11) 및 서로간에 다양한 관계를 가지는 다수의 자손 노드(12)를 포함한다. 유사하게, 고유 트리(14)는 다수의 자식 노드(16)를 가지는 부모 노드(15)를 포함한다. 자식 노드(16)는 서로간에 형제로서 기술될 수 있을 것이다.
도 4b에 도시된 바와 같이, 고유 트리(10 및 14)는 결합되어 원시 트리를 형성할 수 있을 것이다. 원시 트리(20)는 2개의 자식 노드(22 및 30)를 가지는 부모 노드(21)를 포함한다. 자식 노드(22)는 자손(23-29)을 가지며, 자식 노드(30)는 자손(31-33)을 가진다. 이러한 원시 트리(20)는 고유 트리들(10 및 14)의 결합이며, 여기서 고유 트리(10)의 노드는 노드(22-29)를 형성하며, 고유 트리(14)의 노드는 노드(30-33)를 형성한다.
도 4c 및 4d에 대략적으로 도시된 방법을 통해서, 원시 트리(20)는 논리 트리(222)로 변환된다. 원시 트리(20)로부터 논리 트리(222)로 진행하기 위하여, 개발자는 원시 트리에 힌트를 삽입할 수 있다. 개발자는 원시 트리(20) 내에 "자신을 숨김" 또는 "자신과 자식 노드를 숨김" 또는 "노드의 자식 노드를 숨김" 등으로 표시할 수 있다. 개발자는 노드들을 옆으로 이동시키거나 노드들을 자식 노드 앞에 둘 수도 있다. 이러한 "힌트" 및 원시 트리(20)에서의 변형은 논리 트리(222)를 형성하는 데에 이용된다. 예를 들어, 도 4c에서 개발자는 원시 트리(20)의 노드(24-26 및 33)를 블럭(40 및 41)에 의해서 나타난 것과 같이 관심이 없는 것으로 표시하였다. 전형적으로, 사용자에게 보이지 않을 요소들을 포함하는 노드들은 관심이 없는 것으로 표시된다. 가시적인 UI와 관련된 노드들은 전형적으로 관심이 있는 것으로 간주되며, AT 클라이언트(300)에 의해서 이용되기 위하여 논리 트리(222)에 포함될 것이다. 도 4d에 도시된 바와 같이, 관심이 없는 것으로 표시된 노드들은 논리 트리(222)에 포함되지 않을 것이다.
액세스 가능 시스템(200)은 이벤트에 관한 정보, 시스템의 상태, 객체들의 위치 및 제어에 관한 정보을 찾는 데에 논리 트리를 이용한다. 공지된 시스템들은 그들의 트리 내에서 범위를 정하는 능력을 가지지 못하였다. 논리 트리(222)는 클라이언트(300)의 선호도에 근거하여 검색될 수 있으며, 사용중인 서버측 애플리케이션에 관계없이 정보를 제공할 수 있다.
동작시에, 클라이언트(300)가 사용자를 위하여 애플리케이션에 대한 정보를 획득할 필요가 있는 경우에는, 클라이언트(300)는 버튼을 찾아서 누르고 버튼 상의 텍스트를 관찰한다. 클라이언트(300)는 API "요소 찾기"를 호출할 것이다. 이러한 API는 클라이언트측 인터페이스(220)의 논리 트리(222) 내의 위치에 참조되는 값을 반환할 것이다. 논리 트리(222)를 통해서, 액세스 가능 시스템(200)은 사용중인 애플리케이션에 관계없이 클라이언트(300)에게 UI의 추상적인 조망을 제공한다. 추상적인 모델은 리스트 박스, 버튼 또는 기타 UI 컴포넌트가 서로간에 공통으로 가질 것으로 기대할 수 있는 구조, 속성, 이벤트 및 기능을 포함한다.
논리 트리(222)는 UI의 논리 표현인 단일의 통합 트리이며, 단지 클라이언트(300)에게 관심이 있는 요소만을 포함하는 모양으로 형성된다. 따라서, AT 제품이 UI 요소의 구조적인 계층을 필터링하도록 강제하고 최종 사용자에 제공되는 모델을 추측하는 대신에, 논리 트리(222)는 최종 사용자에게 제공되는 구조에 근접하게 맵핑되는 계층을 나타낸다. 이것은 UI를 사용자에게 기술하는 AT 제품의 업무를 매우 단순화시키며, 사용자가 애플리케이션과 상호작용하는 것을 돕는다.
이러한 논리 UI 트리(222)는 액세스 가능 시스템(200)의 기본적인 부분이기 때문에, 액세스 가능 시스템(200)의 다른 모든 컴포넌트들은 논리 트리(222)로부터 작업하도록 설계된다. 예를 들어, 도 6은 매우 간단한 구조를 가지는 것으로 나타나는 간단한 다이얼로그 박스(60)를 도시한다. 그러나, 현재 이용가능한 액세스 가능 기술로 보았을 때에, 이러한 다이얼로그 박스(60)는 매우 복잡한 것이다. 이는 최종 사용자에게 의미 있는 것들을 발견하기 위하여 AT 제품이 필터링하여야 할 264개의 객체를 포함한다. 액세스 가능 시스템(200) 및 논리 UI 트리(222)를 위한 지원으로 인하여, 이러한 다이얼로그 박스(60)를 소유하는 개발자는 도 6에 도시된 아래의 구조를 AT 제품(300)에 제공하도록 몇몇 속성을 설정할 수 있다.
도 6에 도시된 바와 같이, "런(Run)" 다이얼로그를 위하여, 개발자는 플라잉 윈도우 그래픽(62) 및 참조부호 63의 "프로그램, 폴더, 문서 또는 인터넷 자원의 명칭을 타이핑하면 윈도우는 이를 열것입니다"에 관심이 있는 것으로 나타낼 수 있다. 개발자는 노트패드, 워드, 계산기 등을 포함하는 콤보 박스(64), OK(65), 취소(66) 및 찾아보기(67) 버튼에 관심이 있는 것으로도 나타낼 수 있다. 이것은 개발자에게 그들의 요소 계층을 태깅(tagging)하고 이로 인하여 그들의 애플리케이션의 UI의 논리 표시를 UI 액세스 가능 시스템(200)을 통해서 생성하는 저비용의 매 커니즘을 제공한다. 나타난 각각의 특질은 논리 트리(222) 내의 노드 서로간에 특정 관계를 가지는 노드에 의해서 나타날 수 있을 것이다. 이러한 논리 표현은 테스팅 팀 및 AT 제품 또는 클라이언트(300)에게 직접적인 이익을 제공한다.
API의 세트는 클라이언트(300)가 트리에 도달하는 것을 허용한다. 기능은 (1) 포인트간 논리 요소, (2) 이벤트로부터의 논리 요소 및 (3) 현재 집중된 논리 요소를 포함한다. 상기된 바와 같이, 논리 요소는 UI 컴포넌트를, 가능하게는 제어, 제어의 일부, 또는 컨테이너 또는 논리 그룹핑(즉, 다이얼로그, 페인 또는 프레임)을 나타낸다. 제어는 그들의 기능에 관하여 상당히 변화할 수 있다. 따라서, 특정 타입의 제어들과 관련된 기능을 나타내는 데에 상이한 인터페이스가 이용된다. 이들 제어 특정 인터페이스들은 모든 제어들에 공통되는 기능을 나타내는 공통 기본 인터페이스로부터 유래한다. 공통 기본 인터페이스는 (1) 논리 트리(222)를 검색하는 방법, (2) 속성 값을 획득하는 일반적인 방법 및 (3) 지원된 제어 특정 인터페이스에 액세스하는 방법을 포함한다. 논리 트리(222)를 검색하는 경우에, 각각의 기초 애플리케이션 UI 기술은 자신의 검색 기술을 제공할 것이다.
비록 논리 트리(222)가 사용자에게 매우 관심이 있는 것이기는 하지만, 원시 요소 트리(20) 또한 다소 중요한 기능을 수행한다. 논리 트리(222)가 사용자가 관련할 수 있는 트리만 포함하는 반면에, 원시 요소 트리(20)는 기초 프레임워크의 실시 구조를 나타내는 참조부호 22와 같은 노드들을 포함한다. 예를 들어 Win32 UI 단편에 대하여, 이러한 트리는 HWND를 나타내는 노드들을 포함할 것이다. 몇몇 관점에서,원시 요소 트리(20)는 논리 요소 트리(222)와 기초 프레임워크 자신의 고 유 요소 트리 사이의 '중간 하우스(half-way house)'이다. 원시 요소 트리(20)는 논리 요소 트리(222)를 구축하는 기초로 이용되며, 이는 고유 요소가 첫번째로 시스템에 플러그 인 하는 곳이다.
원시 요소 트리(20)는 디버깅 및 테스팅에 이용될 수도 있다. 특정의 문제가 되는 노드가 어디인지를 정확히 지적하거나 기술하는 것이 유용하다. 기본 원시 노드는 원시 요소 트리를 검색하는 방법, (존재하는 경우에)대응 논리 요소로 건너뛰는 방법, 이러한 요소를 위한 '디버그 스트링(debug string)'- 예를 들어, HWND 노드들을 위한 "HWND 0x483FE" -을 포함하는 속성 및 기타 '막후의 기초구조' 방법들을 포함한다. 이들 기타 방법들은 테스팅 및 위치, 이벤트 및 프레임워크가 용이하게 제공할 수 있는 특성을 노출시키는 것을 가능하게 한다(예를 들어, 집중, 인에이블).
원시 요소 트리(20)는 다양한 렌더링 엔진으로부터의 요소들을 나타내는 노드(22-23)들을 포함한다. 원시 요소 트리는 자신들을 액세스 가능 시스템(200)에 플러그 인하도록 엔진을 렌더링하는 개시점으로 이용되며, Win32로부터의 HWND와 같은 고유 요소를 통합 논리 트리(222)로 바꾸는 경량의 어댑터 객체들로부터 구축된다. 이는 하나의 기술이 다른 기술을 호스팅하는 호스팅 천이를 조작하는 데에 추가적으로 이용된다. 원시 요소 트리(20)는 논리 트리(222)가 구축되는 기초이므로, 논리 트리(222)가 완전하며, 접속되었는지를 검사하는 데에 이용될 수 있으며, 설명되지 않은 요소들을 검사하는 데에 이용될 수 있다. 원시 요소 트리(20)는 몇몇 기본 요소 ID의 제공 및 포스드(forced), 인에이블(enabled) 및 로케이션 (location)와 같은 몇몇 기본 프레임워크가 제공된 요소 속성의 제공과 같은 기타 기초구조 유사 업무에도 이용될 수 있다.
원시 요소 트리(20)는 AT 제품 또는 클라이언트(300)에 대한 주된 정보 소스는 아니며, 논리 검색에 이용되지 않으며, 최종 사용자에게 노출되지 않는다. 또한 원시 요소 트리(20)는 시간상 장래의 어떤 지점에서 반환되도록 트리내의 요소의 위치를 캡쳐링하는 데에 이용될 수 없다. 논리 요소 트리(222)는 이러한 모든 기능을 수행한다.
원시 요소 트리(20)는 전형적으로 표현된 논리 요소를 알지 못하고도 기초 렌더링 기술의 원시 요소(HWND, 요소)로부터 기계적으로 구축될 수 있다. 따라서, 이는 논리 트리(222)에서 설명되지 않은 원시 요소를 찾는 데에 이용될 수 있다. 원시 요소 트리(20)는 캡쳐링될 노드의 위치의 '스택 덤프(stack dump)' 유사 기술을 허용하므로 유용한 디버깅 및 진단 툴이다. 더욱이, 공지된 시스템은 그들의 트리를 코드 특정 기준에 근거를 두며, 다양한 기술로 실시하기 어렵다. 본 발명의 접근 방식은 일반적인 추상 "원시 요소" 타입을 이용하는데, 이는 임의의 기초 렌더링 기술에 의해서 또는 이를 위하여 실시될 수 있다.
원시 요소 트리를 획득하기 위하여, 원시 요소 루트를 호출하면 데스크탑 요소를 획득할 것이며, 그 조상은 NULL이며, 모든 다른 노드들은 그들의 최종 조상으로 이것을 가짐을 확실히 함으로써 증명된다. 다른 요소들을 획득하기 위하여, 특정 지점으로부터 원시 요소를 획득하도록 메서드를 호출하면 유효 스크린 좌표를 이용하여 요소를 반환할 것이다. 원시 요소 트리를 획득한 후에, 요소들(부모, 형 제 및 자손)을 검사함으로써 이것이 검사될 수 있다.
동작시에, 클라이언트(300)는 부모, 다음 형제, 이전 형제, 제 1 손자, 최종 손자 등과 같은 관계들을 이용하여 원시 요소 트리(20)를 검색할 수 있다. 그 후에, 클라이언트(300)는 원시 요소로부터 논리 트리(222) 내의 상응하는 논리 요소로 점프할 수 있다.
이벤트 메커니즘
클라이언트(300)가 이벤트에 대하여 계속 통지를 받기를 원하는 경우에, 도 3에 도시된 바와 같이 정보를 획득하기 위하여 클라이언트(300)는 UI 자동화 클라이언트(202)를 통해서 등록할 수 있다. 클라이언트(300)는 수신하고자 하는 객체 정보, 이러한 정보가 보내어져야 할 장소 및 되돌려 받고자 하는 속성의 목록을 특정한다. 클라이언트 요청은 UI 자동화 클라이언트(202)로 보내어진다. UI 자동화 클라이언트(202)는 데스크탑 상의 임의의 프로세스를 모니터링할 수 있다. UI 자동화 서버(204)는 어느 클라이언트(300)가 청취하고 있는지를 추적하며, 어떻게 UI 자동화 클라이언트(202)에 되돌아갈 것인지를 알고 있다. UI 자동화 클라이언트(202)는 클라이언트가 관심을 가지는 UI 엔진(206)에 어드바이스하며, 따라서 UI 엔진(206)은 언제 UI 자동화 서버(204)에 이벤트를 알릴지를 알게된다. UI 엔진은 클라이언트 어드바이스를 이용할 필요는 없으며, 그 대신에 항상 UI 자동화 서버에 이벤트를 통지하거나 클라이언트가 임의의 이벤트를 청취하는 경우에만 UI 자동화 서버에 통지하는 것을 선택할 것이다. 이벤트를 청취하는 클라이언트가 존재하는 경우에만 UI 엔진이 UI 자동화 서버 통지를 턴온하기를 원하는 경우에는 이러한 어 드바이스는 유용하다. UI 엔진은 가능한 UI의 스피드의 저하를 회피하고, 필요하지 않을 수 있는 코드 모듈의 로딩을 피하기 위하여 이것을 수행할 것이다.
그 후에, UI 엔진(206)은 UI 자동화 서버(204)에 UI 이벤트를 알린다. UI 자동화 서버(204)는 요청된 논리 요소를 클라이언트(300)에 반환하고, 클라이언트에 클라이언트(300)가 요청한 이벤트의 속성을 포함하는 정보를 전송한다. UI 자동화 서버(204)는 어떠한 정보가 클라이언트 요청의 범위 내에 놓이는지를 결정하며, 정보에 관심이 있는 경우에는 논리 요소를 형성한다. 논리 요소의 형성은 UI 자동화 서버측 상에의 클라이언트가 이벤트를 처리할 때에 사용할 것으로 지시한 속성의 세트의 프리패칭(pre-fetching)을 포함한다. 예를 들어, UI 자동화 서버(204)는 콤보 박스를 위한 논리 요소를 발견할 수 있다. 그 범위는 콤보 박스 또는 그 자손일 것이다. 클라이언트(300)는 자손/부모/부양가족에 등록 단계 동안에 범위를 정의할 것을 요청할 수 있다.
UI 자동화 서버(204)가 정보가 요청된 범위 내에 존재하는지 여부를 결정한 후에, 논리 요소를 구축한다. UI 자동화 클라이언트(202)는 UI 자동화 서버(204)로부터 요청된 정보를 수신하는 타겟 애플리케이션과 통신하고 객체들을 클라이언트(300) 상의 적절한 공간에 라우팅함으로써 클라이언트(300)에 서브(serve)한다.
UI 자동화 서버(204)는 클라이언트(300)가 이벤트 통지를 수신하기를 등록하는 경우에 생성된다. 예를 들어, UI 엔진(206)은 Micorsoft Word 워드 프로세싱 애플리케이션을 실행중이다. 클라이언트(300)는 명칭 속성 변경을 등록하였다. 클라이언트의 등록은 UI 자동화 서버(204)가 생성되도록 한다. 또한, 클라이언트 의 등록은 UI 엔진(206)에게 UI 자동화 서버(204)에 명칭 속성을 통지하는 것을 개시하도록 어드바이스한다. UI 엔진(206)은 범위 정보를 획득하지는 않는다. UI 엔진(206)은 서버측에 대한 API들 중 하나를 호출한다. UI 엔진(206)은 (1) 어떠한 속성이 변경되었는지, (2) 속성의 새로운 값 및 (3) 아마도 예전의 값을 특정한다. UI 자동화 서버(204)는 클라이언트(300)에게 관심이 있는 이벤트들에 근거하여 생성되며, 따라서 관심이 있는 이벤트, 속성, 클라이언트 및 범위를 알게 되어, 임의의 클라이언트(300)가 생성된 논리 요소에 관심이 있는지 여부를 알게 된다. 하나를 초과하는 클라이언트(300)가 특정 UI 자동화 서버(204)를 가지고 이벤트에 대하여 등록하고, 클라이언트(300)가 동일한 이벤트에 대하여 등록하고 속성이 반환된 논리 요소와 함께 대량 패칭될 것을 요청한 경우에, UI 자동화 서버(204)가 클라이언트에게 이벤트를 재전송하는 경우에, 각각의 클라이언트(300)는 논리 요소와 함께 반환된 요청 대량 패치 속성의 결합을 획득할 것이다.
각 클라이언트(300)의 청취에 대해, UI 자동화 서버(204)는 클라이언트(300)에게 이벤트와 관련된 논리 요소를 전달하는 것을 통지한다. UI 자동화 서버(204)는 단 하나의 논리 요소만을 생성한다. 이것은, 각각의 클라이언트(300)가 이벤트의 소스인 객체에 대한 그들 자신의 사본을 요청해야 하는 현재의 기술에 대한 개량이다.
클라이언트들이 이벤트에 등록할 때 UI 엔진(206)이 UI 자동화 클라이언트의 통지를 이용하지 못하는 경우, UI 엔진(206)은 임의의 액세스 가능 클라이언트(300) 청취가 존재하는지를 UI 자동화 서버(204)에 물을 수 있으며, 아무도 청취하 고 있지 않은 경우, 정보를 생성하고 정보를 UI 자동화 서버(204)로 전송하는 작업을 피할 수 있다. 예를 들어, 스크린 판독기가 클라이언트(300)이며, 정보를 보내고 싶은 곳, 이벤트를 수신하는 포커스 변경 객체 및 관련 특정 속성 리스트를 지정한다. UI 엔진(206)은 이벤트를 UI 자동화 서버(204)로 전송해야 한다는 것을 통지를 받아 알게 된다. 포커스 변경의 검출시, UI 엔진(206)은 UI 자동화 서버(204)에 통지한다. UI 자동화 서버(204)는 잘 알려진 인터페이스로 변환하여 이벤트 및 객체를 UI 자동화 클라이언트(202)로 전송한다. UI 자동화 클라이언트(202)는 객체를 클라이언트(300) 상의 적당한 공간으로 라우팅한다.
전술한 컴포넌트들은 이벤트들에 대한 커널 내의 중앙 저장소를 제거함으로써 공지 시스템을 개량한다. 대신, UI 자동화 서버(204)는 서버의 동작 컨텍스트에 대한 정보를 얻고자 하는 모든 클라이언트(300)를 안다. 커널 저장소의 제거는 또한 보다 많은 피어 투 피어 상호작용을 생성하게 되는데, 이는 UI 자동화 서버(204)가 커널에서 이전에 수행된 기능을 수행하기 때문이다. 본 발명의 액세스 가능 시스템(200)은 클라이언트(300)에게 보고 싶은 것을 지정할 수 있는 능력을 제공하며, 따라서 UI 자동화 서버(204)를 이용하여 서버 측에서 필터링이 이루어질 수 있게 된다.
도 7은 이벤트 등록 및 통지 방법에 수반되는 프로시져를 나타내는 흐름도이다. 단계 80에서, 클라이언트(300)는 이벤트 통지를 요구한다. 단계 82에서, UI 자동화 클라이언트(202)는 요구를 UI 자동화 서버(204)로 전달한다. 단계 84에서, UI 자동화 클라이언트는 통지를 원한다는 것을 UI 엔진(206)에게 알린다. 단계 86 에서, UI 자동화 서버(204)는 UI 엔진(206)으로부터 통지를 수신한다. 단계 88에서, UI 자동화 서버(204)는 수신된 정보를 필터링한다. 단계 90에서, 수신된 정보가 사용자에게 관심 없는 것이라는 것이 밝혀지면, UI 자동화 서버(204)는 정보를 폐기하고 단계 92에서 계속 통지를 기다린다. 대안으로, 단계 90에서 정보가 관심 있는 것인 것으로 밝혀지면, UI 자동화 서버(204)는 단계 94에서 논리 요소를 생성하여 UI 자동화 클라이언트(202)로 전송한다. 단계 96에서, UI 자동화 클라이언트(202)는 수신된 정보를 클라이언트(300) 상의 적당한 장소에 넣는다.
액세스 가능 시스템(200)의 이벤트 메커니즘(210)은 클라이언트(300)가 UI 내의 속성 변경, 제어의 구조 내의 트리 변경, 멀티미디어 이벤트 및 관련 정보에 대한 이벤트 통지를 수신하도록 등록되는 것을 가능하게 한다. 이러한 능력이 없다면, 클라이언트(300)는 어떤 정보, 구조 또는 상태가 변경되었는지를 확인하기 위하여 시스템 내의 모든 UI 요소를 계속적으로 폴링(polling)해야 한다. 액세스 가능 시스템(200)의 이벤트 메커니즘(210)은 또한 클라이언트(300)가 이벤트를 프로세스 밖에서 수신하고, 속성들의 집합이 이벤트 통지와 함께 반환되는 것을 요구하고 다수의 요소들 상에 이벤트를 등록하도록 허용한다.
이벤트 메커니즘(210)은 AT 제품 또는 테스트 애플리케이션이 이벤트를 등록하기 위해 사용하는 인터페이스, AT 제품이 이벤트 통지를 수신하는 데 사용되는 객체 상에 구현하는 인터페이스 및 제어 구현기가 이벤트 엔진에게 UI 이벤트를 통지하는 데 사용하는 인터페이스를 표시한다. 이벤트 메커니즘(210)은 AT 제품 및 테스트 애플리케이션이 UI를 렌더링하는 데 사용되는 UI 엔진에 무관하게 이벤트를 수신하는 것을 허용하고, AT 제품 및 테스트 애플리케이션이 기초 기술에 관계 없이 최상위 레벨의 애플리케이션 윈도우 및 포커스를 추적하는 것을 허용하도록 사용된다.
도 2는 클라이언트(300)가 어떻게 액세스 가능 시스템(200)과 상호작용하는지를 보여주고 있다. 프로세스들의 이벤트들의 전체적인 관리가 존재하지 않는다. 대신, 각각의 액세스 가능 시스템 클라이언트(300) 또는 서버(400)는 그 자신의 컨텍스트를 갖는다. 클라이언트 애플리케이션은 액세스 가능 시스템(200)을 지원하는 애플리케이션에 대한 이벤트만을 수신한다. 애플리케이션에서 액세스 가능 시스템 이벤트의 사용을 시작하기 위하여, 클라이언트(300)는 (1) "AddTopLevelWindowListener" API를 이용하여 데스크탑 상에 나타나는 새로운 UI를 발견하고 상기 이벤트에 대한 핸들러에 다른 이벤트를 등록하고 이러한 수단에 의해 임의의 프로세스로부터 이벤트를 수신하는 동작, (2) Find API들 중 하나를 이용하여 관련 UI를 찾아 UI의 특정 부분을 목적으로 하는 동작, (3) 소정의 다른 수단을 이용하여, 스크린 상에서 윈도우 핸들 또는 포인트를 찾는 것과 같은 관련 UI를 찾고, 상기 핸들 또는 포인트를 이용하여 이벤트의 청취를 위한 기준으로 사용할 논리 요소를 취득하는 동작 또는 (4) "AddFocusChangedListener" API를 이용하여 입력 포커스를 추적하고 현재 포커스를 가진 UI 상에 이벤트를 등록하는 동작 중 하나를 행할 수 있다.
최상위 레벨 윈도우는 부모가 데스크탑인 윈도우이다. "개방(opened)"이라는 용어의 사용은 새로운 최상위 레벨 윈도우가 사용자에게 나타났다는 것을 지시 한다. "폐쇄(closed)"라는 용어의 사용은 최상위 레벨 윈도우가 파괴되었다는 것을 지시한다.
액세스 가능 시스템 서버측 인터페이스(230)는 액세스 가능 시스템(200)에게 추가되고 제거되는 이벤트를 통지하기 위한 2개의 API를 포함한다. UI 자동화 클라이언트는 클라이언트들이 이벤트를 등록하거나 말소할 때 이들 API를 호출한다. 이것은 UI 엔진(206)이 어떤 액세스 가능 이벤트들이 그의 컨텍스트에서 요구되고 있는지에 대한 정보를 얻을 수 있게 한다.
이용 가능한 경우, 이벤트들은 애플리케이션의 논리 요소 트리(222)로부터의 논리 요소들과 관련된다. 논리 요소들이 이용 가능하지 않은 경우, 이벤트는 이벤트의 소스를 나타내는 인간 판독 가능 스트링 또는 다른 공지 객체와 연관된다. 이벤트 메커니즘(210)은 이벤트 등록 동안 사용자 제공 선호도에 기초하여 필터링을 제공한다. 이벤트 관련 데이타를 생성하고 이 데이타를 프로세스를 통해 클라이언트에게 전송하기 전에, 서버에서 클라이언트의 필터링 선호도를 이용함으로써 이벤트 메커니즘(210)은 상호 프로세스 호출의 수를 줄임으로써 프로세스외(out-of-process) 성능을 본질적으로 향상시킨다. 이벤트 메커니즘(210)은 이벤트 등록 동안 이벤트에 관련된 논리 요소의 속성들을 지정하는 방법을 제공한다. 이것은 상호 프로세스 호출의 수를 더 감소시킨다. 이벤트 메커니즘(210)은 큰 운영 체제(OS) 변경 없이 확장 가능하다. 이벤트 메커니즘(210)이 관리 코드를 이용하여 구현될 수 있지만, 비관리 애플리케이션은 COM 연동성을 통해 이벤트 메커니즘에 액세스할 수 있다.
AT 클라이언트(300)가 이벤트를 처리하기 위하여 행하는 2개의 작업, 즉 (1) 이벤트 등록 및 (2) 역호출에서의 이벤트 처리가 있다. 어느 작업에 대한 중요한 요건도 관리 및 비관리 코드 양자에서 사용 가능해야 한다. 본 발명의 일 실시예에서, 클라이언트(300)는 이벤트 등록시에 인터페이스를 전달할 수 있다. 클라이언트(300)는 등록시에 공지 인터페이스들을 구현하는 객체들을 전달하며, UI 엔진(206)은 청취자에게 통지하기 위하여 이들 인터페이스들을 역호출한다. 논리 요소 트리(222)에 소스 객체가 존재하는 경우, 역호출 각각은 소스 요소 및 추가 파라미터를 수신한다.
AT 제품에 의해 구현되는 공지 인터페이스들은 이벤트를 반환하는 방법으로 사용된다. 아래의 섹션들은 소정 타입의 이벤트, 등록이 어떠한 모습인지, 이벤트가 어떻게 수신되는지를 설명한다.
1. 최상위 레벨 윈도우 이벤트
최상위 레벨 윈도우 이벤트는 메뉴 및 콤보 박스 드롭다운 또는 데스크탑을 부모로서 갖는 임의의 기능과 관련된 이벤트를 포함한다. 본 발명의 일 실시예에서, 개방/폐쇄되고 있는 최상위 레벨 윈도우에 대한 통지를 수신하기 위하여 AddTopLevelWindowListener 메서드가 사용된다. AddTopLevelWindowListener의 호출은 현재의 데스크탑에서 열리는 새로운 최상위 레벨 윈도우 또는 닫히는 최상위 레벨 윈도우에 대한 통지를 얻는다. RemoveTopLevelWindowListener 메서드는 데스크탑 상에 열리거나 닫히는 최상위 레벨 윈도우에 대한 통지의 수신을 중지하기 위한 메커니즘을 제공한다. 이 메서드는 역호출 객체를 이용하여 청취자를 식별한 다. 따라서, RemoveTopLevelWindowListener 메서드로 전달되는 객체는 AddTopLevelWindowListener로 전달되는 객체와 동일하다. 열리는 각각의 새로운 최상위 레벨 윈도우에 대해 한번씩 액세스 가능 시스템(200)에 의해 OnTopLevelWindowOpened 메서드가 호출된다. 마찬가지로, 최상위 레벨 윈도우가 닫힐 때 한번씩 액세스 가능 시스템(200)에 의해 OnTopLevelWindowClosed 메서드가 호출될 수 있다. 이러한 통지를 수신하기 위하여, 클라이언트(300)는 AddTopLevelWindowListener 메서드를 호출한다.
2. 포커스 이벤트
클라이언트(300)는 종종 포커스를 추적하는 방법을 요구한다. 마이크로소프트 윈도우 OS에서 이것을 행하는 것은 어렵다. 예를 들어, 메뉴가 드롭다운될 때(예를 들어 마이크로소프트 워드의 파일 메뉴), 메뉴 내의 항목들은 사용자가 커서를 각 항목의 아래로 이동함에 따라 포커스된다. 메뉴가 닫힐 때(예를 들어 사용자가 ESC 키를 누를 때), 어떠한 포커스 이벤트도 전송되지 않는다. 대신, 포커스 변경에 관련된 클라이언트는 다수의 이벤트를 청취하고, 이들 중 어느 것이 포커스 변경을 논리적으로 나타내는지를 알아야 한다. 본 발명의 일 실시예에서, 청취자에게 포커스 변경 이벤트를 통지하기 위해 AddFocusChangedListener 메서드가 사용될 수 있다. 클라이언트(300)는 반환될 일련의 속성을 지정할 수 있다. 논리 요소와 함께 반환될 속성을 지정하는 이러한 기능은 모든 이벤트 등록 API의 일부이다. 클라이언트(300)는 포커스 변경에 대한 통지의 수신을 중지하기 위해 RemoveFocusChangedListener 메서드를 호출할 수 있다. 이 메서드는 청취자를 식 별하기 위한 역호출 객체를 사용할 수도 있고 이 경우에 RemoveFocusChangedListener 메서드로 전달된 객체들은 AddFocusChangedListener 프로시저로 전달된 것과 동일할 것이다. 액세스 가능 시스템(200)은 포커스가 변경되었을 때 OnFocusChanged 메서드를 요구한다. OnFocusChanged 메서드에 사용된 FocusEventArgs 파라미터는 포커스 변경에 관련된 정보를 노출한다. 최근에 포커스된 논리 요소에 대한 정보가 이용가능하다면, 이 요소는 OnFocusChanged 요소에서 사용된 이벤트 독립 변수(args) 파라미터로 이용가능할 것이다. 임의의 요소에 명확한 포커스를 둘 때까지는 포커스된 UI 요소가 없는 경우들도 있다.
3. 속성 변경 이벤트
논리 요소들의 속성이 변경될 때 속성 변경 이벤트들이 파이어(fire)된다. 본 발명의 실시예에서, 클라이언트(300)는 속성 변경에 대한 통지를 수신하기 위한 AddPropertyChangedListener 메서드를 요구한다. OnPropertyChanged 메서드는, 속성의 값이 AddPropertyChangedListener에서 규정된 논리 요소 트리 내의 논리 요소에서 변경되는 경우 액세스 가능 시스템(200)에 의해 요구된다. 범위 파라미터(scope parameter)는 이벤트가 파이어되어야 하는 임의의 요소들을 지시한다. 예를 들어, 윈도우의 루트 논리 요소를 전달하고 자손들을 요구하는 것은 그 윈도우에 대한 특성 변경 역호출을 제한한다. 범위 파라미터가 트리 내의 모든 요소들로 설정된다면, 그 범위는 무시되고 데스크 톱에서 발생하는 지정된 속성들에 대한 어떠한 변화도 전송된다. 클라이언트(300)는 다른 세트의 속성 및/또는 다른 역호출 객체와 함께 AddPropertyChangedListener를 여러번 요구할 수 있다. 액세스 가능 시스템(200)에 의해 제공된 통지는 변경된 속성, 새로운 속성값, 및 이용가능한 경우에는 예전의 속성값을 나타낸다.
클라이언트(300)는 속성 변경에 대한 통지 수신을 중단하기 위해 RemovePropertyChangedListener 메서드를 요구할 수 있다. 이 메서드는 이 청취자를 식별하기 위해 범위 요소와 역호출 객체를 사용할 수 있고 이러한 경우에 전달된 객체들은 AddPropertyChangedListener로 전달된 것과 동일해야만 한다.
4. 제어 패턴들로부터의 이벤트들
제어 패턴들로부터 파이어된 이벤트들은 확장될 필요가 있고 따라서 이러한 이벤트들은 GUID에 의해 식별된다. 어떤 GUID 값은 등록시 승인된다. 어떤 새로운 제어 패턴에 대해, 이 새로운 제어 패턴이 증명한 이벤트들은 고유 GUID일 필요가 있다. AT 제품들은 새로운 제어 패턴 이벤트들에 대해 청취하도록 수정될 필요가 있다. 청취자는 또한 이들 이벤트들을 검진할 수 있다. 예를 들어, 지시된 테스팅은 이들 이벤트들을 특정 애플리케이션 또는 애플리케이션 내의 제어로 제한하기를 원할 수도 있다. 제어 패턴들은 스코어가 얼마인지 규정하고 이벤트 소비자들은 소스 요소와 이벤트 논의 객체를 어떻게 사용하는지 알기 위해 문헌의 특정 부분을 언급할 필요가 있을 것이다.
AddEventListener 메서드는 클라이언트(300)로 하여금 제어용 이벤트들을 수신할 수 있게 할 것이다. 범위 파라미터는 어떤 요소들이 이벤들을 파이어할 것인지 나타내기 위해 사용될 수 있다. 예를들어, 윈도우의 루트 논리 요소를 전달하고 후손들을 요구하는 것은 이벤트들을 그 윈도우로 제한할 것이다. 만약 트리 내 의 모든 요소들을 원한다면, 테스크 톱 위의 모든 이벤트들이 보내질 것이다. RemoveEventListener 방법은 제어용 이벤트 수신을 중단하기 위해 사용될 수 있다. 이 방법은 범위 요소, 역호출 객체 및 청취자를 식별하기 위한 이벤트 식별자를 사용할 수 있다. 이 경우에, 전달된 객체들은 AddEventListener로 전달된 것과 동일해야 한다.
애플리케이션이 AddEventListener 메서드를 실시한 경우, OnEvent 메서드는 제어 특정 이벤트가 파이어되고 이벤트의 소스가 AddEventListener 내에 특정된 논리 요소 트리 내의 논리 요소인 경우 액세스 가능 시스템(200)에 의해 요구된다. 제어용 이벤트들이 파이어되면 종종 이벤트 특정 정보가 이용가능하다.
RemoveAllListeners 메서드는 어떤 이벤트 수신을 중단하기 위해 요구될 수도 있다. 이것은 클라이언트 애플리케이션이 셧 다운(shut down)하기 이전에 정리하기 위한 빠른 방법이다. 제거 방법은 애플리케이션을 종료할 때 최적으로 사용될 수도 있다.
5. 논리 구조 변경 이벤트
논리 구조 변경 이벤트들은 논리 요소 트리 구조가 변경될 때 파이어된다. AddLogicalStructureChangedListener 메서드는 논리 요소 트리에서 구조적 변경에 대한 통지를 수신하기 위해 구현될 수 있다. 논리 요소들이 추가, 제거 또는 무효로 되면, 지정된 역호출 객체에 대한 메서드들이 요구된다. 범위 파라미터는 위에서 설명한 바와 같이 요소들을 제한할 수 있다. RemoveLogicalStructurChangedListener 메서드는 논리 요소 트리 변경에 대한 이벤 트 수신을 중단하기 위해 요구될 수 있다. 이 방법은 역호출 객체 및 범위 요소를 사용하여 청취자를 식별할 수 있고 이 경우에 전달된 객체들은 AddEventListener에 전달된 것들과 동일해야 한다.
OnChildAdded 메서드는 자손 요소가 부가되고 부모가 AddLogicalStructureChangedListener 내에 규정된 논리 요소 트리(222) 내의 논리 요소일 때 액세스 가능 시스템(200)에 의해 요구될 수 있다. OnChildRemove 메서드는 자손 요소가 제거되고 오래된 부모가 AddLogicalStructureChangedListener 내에 규정된 논리 요소 내의 논리 요소인 경우 액세스 가능 시스템(200)에 의해 요구된다.
OnChildrenBulkAdded 메서드는 짧은 시간 내에 다수의 자손들(예를들어, 20개 이상의 자손)이 추가될 때 액세스 가능 시스템에 의해 요구된다. OnChildrenBulkAdded 메서드는 다수의 자손들이 짧은 시간 내에 제거될 때 액세스 가능 시스템에 의해 요구된다. OnChildrenInvalidated 메서드는 다수의 자손들(예를들어, 20명 이상의 자손)이 추가되고 짧은 시간 이내에 제거되는 경우에 액세스 가능 시스템에 의해 요구된다.
6. 멀티미디어 이벤트
다른 종류의 이벤트는 멀티미디어 이벤트이다. 멀티미디어는 사운드, 비디오, 애니메이션을 포함할 수 있다. 이 방법은 멀티미디어 이벤트를 지지할 것이고 "정지", "일시 정지", "빠르게 감기", "되감기", 및 "묵음"을 포함하는 액션들을 클라이언트에 통지할 것이다. 상술한 것과 유사한 방법들이 멀티미디어 청취자들 을 추가하고 제거하기 위해 구현될 수 있다.
7. 간단한 사운드 이벤트
간단한 사운드 이벤트들이 멀티미디어 이벤트들로부터 개별적으로 취급될 수 있다. 간단한 사운드 이벤트들은 간단하고, 단기간의, 사운드 그 자체라기 보다는 어떤 이벤트를 사용자에게 전달하기 위해 존재하는 사운드를 나타낸다. 간단한 사운드 이벤트들은 새로운 메일이 도착했을 때 알리는 사운드, 랩탑용 배터리가 소모되었을 때 발생하는 사운드 또는 메시지 박스가 IconExclamation 타입으로 표시될 때 재생되는 사운드를 포함할 수 있다. AddSoundListener 메서드는 재생되는 간단한 사운드 통지를 수신하기 위해 요구될 수 있고 RemoveSoundListener 메서드는 간단한 사운드 이벤트들에 대한 통지 수신을 중단하기 위해 구현될 수 있다.
OnSound 메서드는 간단한 사운드가 재생될 때 액세스 용이 시스템(200)에 의해 요구된다. 이러한 통지를 수신하기 위해, 청취하고 있는 애플리케이션은 AddSoundListener를 요구한다. OnSound 메서드는 다음의 정보 즉, 사운드 명칭, 사운드 소스, 및 사용자에게 사운드의 중요도를 나타내는 경보 레벨 값을 복원한다. 가능한 경보 레벨들은 중요도를 모르는 경우 나타내는 'unknown', 정보가 제공됨을 나타내는 'informational', 경고 상태를 나타내는 'warning', 사용자 응답이 요구됨을 나타내는 'question', 중요할 수는 있지만 결정적이지는 않는 'exclamation' 및 결정적인 이벤트의 발생을 나타내는 'critical'을 포함한다.
8. 소프트 포커스 이벤트
소프트 포커스 이벤트들은 데스크 톱에서는 보이지만 배경에 머무른다. 소 프트 포커스 이벤트들의 어떤 예들로 통지 영역에서 "새롭게 갱신된 것들이 이용가능함"을 나타내는 벌룬 헬프 윈도우(balloon help window), 포커스되기를 원하는 배경 애플리케이션에 대한 태스크 바에서의 플래싱 아이콘 및 인쇄 시작 및 종료시 통지 트레이로부터 나타났다가 사라지는 프린터 아이콘들이다. 이러한 이벤트들은 다른 이벤트 카테고리들과 다소 중첩된 것으로 보일 수 있다(멀티미디어는 소프트 포커스에서와 같이 애니메이션 이벤트들을 포함할 수 있다). 그러나, 이벤트는 어떻게 전달되느냐 보다는 무엇을 사용자에게 전달하느냐에 기초하여 카테고리화될 것이다.
AddSoftFocusListener 메서드는 입력 포커스를 취하지 않고 사용자의 주위를 얻기 위한 이벤들의 통지를 수신하기 위해 구현될 수 있다. RemoveSoftFocusListener 메서드는 통지를 중단한다. 이 메서드는 청취자를 식별하기 위해 역호출 객체를 사용할 수 있고 이에 따라 전달된 객체는 AddSoftFocusListener에게로 전달되는 것과 동일해야 한다.
OnSoftFocus 메서드는 소프트 포커스 이벤트가 발생하면 액세스 가능 시스템(200)에 의해 요구될 수 있다. 이 통지를 수신하기 위해, 청취 애플리케이션 또는 클라이언트(300)는 AddSoftFocusListener를 요구한다. 이용가능하다면, 이벤트에 대한 정보를 얻기 위해 소스 요소를 사용할 수 있다. 소스 요소의 일 예로 시스템 트레이에서 통지 애플리케이션들 중 하나에 의해 사용된 벌룬 헬프 윈도우의 논리 루트 요소가 있을 것이다. OnSoftFocus 메서드는 이벤트 명칭, 이벤트 소스 및 사용자에 대한 중요도를 나타내는 경보 레벨을 반환한다.

이하의 차트는, 클라이언트(300)가 AddTopLevelWindowListener API를 사용하여 특정 process.Client로부터 이벤트들을 청취할 때, 클라이언트(300) 및 액세스 가능 시스템(200)의 동작들을 나타낸다.

액세스 가능 시스템 및 타겟 UI 윈도우

AddTopLevelWindowListener 호출

. 액세스 가능 시스템 클라이언트는 스레드를 개시하여 최상부 레벨 애플리케이션 윈도우들이 생성되고 소멸되는 것을 감시한다.
. 새로운 UI가 나타나고, 액세스 가능 시스템 클라이언트는 클라이언트의 OnTopLevelWindowOpened 메서드를 호출한다.

OnTopLevelWindowOpened 메서드로부터 다른 API들을 호출하여 타깃 UI 윈도우에 발생하는 부가적인 이벤트들에 대하여 등록한다.

. 액세스 가능 시스템 클라이언트는 이벤트 Id를 타겟 UI 윈도우에 통신하고, 이는 이벤트의 통지에 있어 선택적일 수 있다.
. 액세스 가능 시스템 클라이언트는 이벤트 Id 및 필터링 정보를 액세스 가능 시스템 서버에 통신하고, 이는 또한 이벤트들을 더욱 필터링할 수 있다.
. 타겟 UI 윈도우는 액세스 가능 시스템 서버 API를 사용하여 관심 이벤트들의 액세스 가능 시스템 서버측에 통지한다.

역호출 객체에서의 "Handels" 이벤트

.액세스 가능 시스템 서버는 이벤트들을 다시 액세스 가능 시스템 클라이언트에게 통신한다.

. 액세스 가능 시스템 클라이언트는 등록에 의해 클라이언트 애플리케이션에 제공하였던 객체들에 대하여 다시 호출(역호출)한다.

RemoveListener API를 호출하여 이벤트 수신을 중지함

. 액세스 가능 시스템 클라이언트는 더 이상 관심의 대상이 아닌 이벤트들을 액세스 가능 시스템 서버 및 타겟 UI 윈도우에 통신한다.

. 타겟 애플리케이션은 액세스 가능 시스템 서버에게 이벤트들을 통지하는 것을 중지한다.
이벤트 통지
대응 이벤트 통지 메서드들이 서버(400) 또는 기초 UI 엔진에 의해 사용되어 위에 열거된 액세스 가능 시스템 이벤트들을 지원한다. UI 자동 서버 API는 서버 또는 기초 UI 엔진이 이러한 것을 달성하기 위해 호출하는 메서드들을 포함한다. 예를 들어, 특정 속성이 논리 요소들에 대하여 변화할 때를 통지하기 위해 서버가 호출하는 NotifyPropertyChanged 메서드가 있다. 적절한 파라미터들을 생성하고 UI가 변화할 때 이러한 메서드들을 호출하는 것은 서버(400) 또는 기초 UI 엔진이 담당한다.
서버 메서드
UI 자동 클라이언트에 의해 AdvisedEventAdded 및 AdviseEventRemoved 메서드가 호출되어 서버(400)에게 클라이언트(300)가 이벤트들을 요청중인 때를 통지한다. 이는 관심의 대상이 없을 때 서버(400)가 액세스 가능 시스템(200)에 이벤트들을 전달하지 않게 해준다. 서버는 이러한 통지를 사용하여 이벤트들을 사용하는 클라이언트들이 존재하는지 여부에 의존하는 실시(performance)을 이룰 수 있다.
제어 패턴
액세스 가능 모델은 특정 UI 요소 또는 제어에 의해 지원되는 기능성을 분류하고 드러내는 고유한 접근 방식을 제공한다. 종래 기술에서와 같이 (예를 들어, 버튼, 편집 상자 또는 목록 상자 등), 기능성을 특정 제어 타입에 연관시키는 대신, 액세스 가능 모델은 각각 UI 동작의 일 양상을 규정하는 공통 제어 패턴 세트를 규정한다. 이들 패턴은 각각 독립적이기 때문에, 조합되어 특정 UI 요소에 의해 지원되는 풀 세트를 나타낼 수 있다.
예를 들어, Button 등 그 클래스 명칭의 표현으로 요소를 나타내는 대신, 액세스 가능 시스템(200)은 호출가능한 제어 패턴을 지원하는 것으로서 이를 나타낸다. 제어 패턴은 요소에 의해 지원되는 구조, 속성, 이벤트 및 메서드 등을 규정한다. 따라서, 이들 패턴은 클라이언트가 제어 동작을 질의할 수 있게 할 뿐만 아니라, 특정 패턴에 대해 설계된 인터페이스들을 사용하여 제어를 프로그램적으로 조작할 수 있게 한다. 예를 들어, SelectionContainer 패턴은 선택된 아이템들에 대해 질의하는 메서드를 제공하여, 특정 아이템을 선택하거나 선택 해제하게 하거나, 또는 제어가 단일 선택 모드를 지원하는지 또는 복수 선택 모드를 지원하는지 결정할 수 있게 한다.
액세스 가능 시스템(300)에 대해 현재 규정된 제어 패턴들은 (1) 셀렉션컨테이너(Selection Container), (2) 계층(Hierachy), (3) 호출가능한(Invokable), (4) 단순 그리드(Simple Grid), (5) 텍스트(Text), (6) 값(Value), (7) 객체 표현(Represents Object), (8) 스크롤러블(Scrollable), (9) 소터블(Sortable), (10) 드로잉(Drawing) 및 (11) 기타 컨테이너(Other Container)를 포함한다.
이러한 기술은 제어 개발자들이 그 동작을 AT 제품들 및 테스트 스크립트에 드러내도록 하는 잘 설계된 접근 방식을 여전히 가지면서도 새로운 타입인 제어를 구현할 수 있게 한다. 새로운 타입의 동작이 도입되면, 새로운 제어 패턴이 규정되어 요구되는 기능성을 표현할 수 있다.
보조 기술 제품들 및 테스트 스크립트가 기입되어 각각의 UI 제어 대신에 각 패턴과 동작하는 방식을 이해할 수 있다. 제어 클래스들보다 훨씬 적은 제어 패턴 들이 존재하기 때문에, 이러한 기술은 필요한 코드를 최소화한다. 이러한 접근 방식은 또한 (종래의 제어 패턴들을 지원할 수 있다면) 새로운 제어들을 효과적으로 문의하고 조작할 수 있는 보다 융통성있는 구조를 촉진한다.
아래 표는 공통 제어 및 이들이 지원할 패턴들의 몇몇 예들을 제공한다.
제어(Control) 관련제어패턴들(Relevant Control Patterns)
버튼(Button) 호출가능한(Invokable)
체크박스,무선버튼(Checkbox, Radiobutton) 값(Value)
리스트박스(Listbox) 셀렉션컨테이너,스크롤러블 (SelectionContainer, Scrollable)
콤보박스(Combobox) 셀렉션컨테이너,스크롤러블,값
( SelectionContainer, Scrollable, Value)
트리뷰(Treeview) 셀렉션컨테이너,스크롤러블,계층
(SelectionContainer,Scrollable,Hierarchy)
리스트뷰(ListView) 셀렉션컨테이너,스크롤러블,소터블
(SelectionContainer, Scrollable, Sortable)
텍스트박스(Textbox)
(Value, Text, Scrollable)
보다 구체적인 인터페이스들이 사용되어 공통 제어 패턴들과 관련된 기능성을 드러낼 수 있다. 이들 패턴의 예로는 (1) 선택 관리 컨테이너(selection managing containers); (2) 그리드 레이아웃 컨테이너(grid layout container); (3) 값들을 포함하는 UI 요소; (4) 객체들(파일, 이메일 등)을 나타내는 아이콘 및 (5) 연상될 수 있는 UI 요소 등이 포함된다. 일반적으로, 이들 패턴이 특정 제어에 강하게 한정되는 것은 아니고, 이와는 다른 제어가 동일한 패턴들을 구현할 수 있다. 예를 들어, 리스트박스(listbox), 콤보 박스(combo box) 및 트리뷰(treeview) 등 모두 '셀렉션 관리 컨테이너(selection managing container)' 패턴을 구현할 수 있다. 적절하다면 몇몇 제어는 다중 패턴들을 구현할 수 있다: 선택 그리드는 '그리드 레이아웃 컨테이너(Grid layout container)' 패턴 및 '셀렉션 관리 패턴(Selection managing pattern)' 양자 모두를 구현할 수 있다.
기존 애플리케이션에서는 단일 '역할(role)'이 없다. 그 대신, 2개의 개별 메커니즘이 사용된다. 제어 패턴들은 사용가능한 기능성의 제어를 결정하고, 인간이 판독할 수 있는 로컬화 가능한 속성(human-readable localizable property)은 '버튼(button)', '리스트박스(list box)' 등 사용자가 이해할 수 있는 제어 타입 명칭을 제공한다.
속성
액세스 가능 시스템(200)은 일반적인 GetProperty 메서드의 특징을 나타낼 것이다. 속성들이 바람직하게는 GUID에 의해 표현되고, 이는 (파일들을 스크립트하고 구성하기에 유용한) 로컬화 할 수 없는 기억 형태로 및 로컬화 할 수 없는 기억 형태로부터 변환하기 위해 유틸리티 메서드들이 사용된다. 개별 메서드들 대신 일반적인 GetProperty 메서드의 2가지 주요한 이점은, (a) 인터페이스를 변경하지 않고도 시간에 대해 새로운 속성들이 부가될 수 있다는 점과, (b) 개별 메서드들을 사용할 때는 불가능한 구현 기술들- 어레이 유발 벌크 속성 패칭(array-driven bulk property fetching) 등 -을 허용한다는 점이다. 각각의 속성은 명확하게 규정되는 의도를 가져야 한다. 속성이 인간용인지 또는 머신용인지 여부에 따라, 속성이 로컬화되어야 하는지 여부 등도 명확하게 규정되어야 한다.
본 발명은 특정 실시예에 관련하여 설명되었으나, 이는 모두 예시적인 것으로 제한적인 것은 아니다. 본 발명이 속하는 기술의 당업자에게는 본 발명의 사상을 벗어나지 않고도 대안적인 실시예들이 명백할 것이다.
지금까지, 본 발명은 상기 시스템 및 메서드들에 자명하고 고유한 기타 이점들과 함께 상술된 목적들을 달성하기 위해 본 발명이 잘 적용된다는 것이 이해될 것이다. 특정 특징들 및 하위 조합들이 유용하고 기타 특징들 및 하위 조합들을 참조하지 않고도 채택될 수 있다는 것이 이해될 것이다. 이러한 것도 이하 청구범위의 기술 사상에 고려되는 것이다.

Claims (18)

  1. 클라이언트에게 사용자 인터페이스 정보를 제공하기 위한 액세스 가능 시스템으로서,
    상기 액세스 가능 시스템은,
    상기 사용자 인터페이스 정보가 상기 클라이언트에게 관심이 있는지 여부에 근거하여 사용자 인터페이스 정보를 필터링하기 위한 사용자 인터페이스 자동화 서비스들을 포함하는 액세스 가능 시스템 코어와,
    상기 클라이언트에게 관심이 있는 사용자 인터페이스 정보를 알리고, 상기 클라이언트에게 관심이 없는 사용자 인터페이스 정보를 숨기는 논리 트리를 포함하는 클라이언트측 인터페이스와,
    서버측 애플리케이션을 구축하는 데에 이용되는 사용자 인터페이스 엔진에 관계없이 상기 서버측 애플리케이션으로부터의 정보 전송을 돕는 서버측 인터페이스
    를 포함하는 액세스 가능 시스템.
  2. 제 1 항에 있어서,
    상기 사용자 인터페이스 자동화 서비스들은 상기 클라이언트측 인터페이스에 걸쳐 동작하는 사용자 인터페이스 자동화 클라이언트 및 상기 서버측 인터페이스에 걸쳐 동작하는 사용자 인터페이스 자동화 서버를 포함하는 이벤트 메커니즘을 형성하는 액세스 가능 시스템.
  3. 제 2 항에 있어서,
    상기 사용자 인터페이스 자동화 클라이언트는 상기 클라이언트로부터 이벤트 등록 요청을 수신하고, 상기 사용자 인터페이스 자동화 서버에 상기 이벤트 등록 요청을 알리도록 동작하는 액세스 가능 시스템.
  4. 제 3 항에 있어서,
    상기 사용자 인터페이스 자동화 서버는 상기 서버측의 사용자 인터페이스 엔진으로부터 이벤트 정보를 탐색하고, 상기 이벤트 정보를 필터링하여 상기 이벤트 등록 요청 범위밖의 정보를 폐기하는 액세스 가능 시스템.
  5. 제 1 항에 있어서,
    상기 논리 트리는 복수의 요소를 포함하고, 상기 요소들은 각각 제어, 제어 중인 아이템 또는 그룹핑 구조 중 하나를 나타내는 액세스 가능 시스템.
  6. 삭제
  7. 제 1 항에 있어서,
    상기 논리 트리는 상이한 애플리케이션들로부터의 사용자 인터페이스들을 통합하는 액세스 가능 시스템.
  8. 제 1 항에 있어서,
    제어 패턴들과 관련된 기능을 노출시키기 위한 인터페이스들을 더 포함하는 액세스 가능 시스템.
  9. 제 8 항에 있어서,
    논리 트리 위치를 반환하여 상기 클라이언트에 애플리케이션과 관련된 정보를 제공하는 액세스 가능 시스템 API를 더 포함하는 액세스 가능 시스템.
  10. 클라이언트에게 사용자 인터페이스 정보를 제공하기 위한 컴퓨터 실행 방법으로서,
    상기 방법은,
    액세스 가능 시스템 자동화 서비스들로 사용자 인터페이스 정보를 모니터링하는 단계와,
    서버측 기술에 관계없이 서버측 인터페이스를 통해서 사용자 인터페이스 정보를 전달하는 단계와,
    클라이언트측 인터페이스의 일부를 형성하는 논리 요소 트리를 이용하여 상기 클라이언트에 관심이 있는 특정 사용자 인터페이스 정보를 결정하는 단계
    를 포함하는 컴퓨터 실행 방법.
  11. 제 10 항에 있어서,
    상기 클라이언트측 인터페이스에 걸쳐 동작하는 사용자 인터페이스 자동화 클라이언트 및 상기 서버측 인터페이스에 걸쳐 동작하는 사용자 인터페이스 자동화 서버를 제공하는 단계를 더 포함하는 컴퓨터 실행 방법.
  12. 제 11 항에 있어서,
    상기 사용자 인터페이스 자동화 클라이언트에서 상기 클라이언트로부터 이벤트 등록 요청을 수신하고, 상기 사용자 인터페이스 자동화 서버에 상기 이벤트 등록 요청을 알리는 단계를 더 포함하는 컴퓨터 실행 방법.
  13. 제 12 항에 있어서,
    상기 서버측의 사용자 인터페이스 엔진으로부터 이벤트 정보를 탐색하고, 이벤트 등록 요청의 범위밖의 정보를 폐기하기 위해 상기 이벤트 정보를 필터링하는 단계를 더 포함하는 컴퓨터 실행 방법.
  14. 제 10 항에 있어서,
    상기 논리 트리 내의 각각의 요소로 제어, 제어 중인 아이템 또는 그룹핑 구조 중 하나를 나타내는 단계를 더 포함하는 컴퓨터 실행 방법.
  15. 삭제
  16. 제 10 항에 있어서,
    상기 논리 트리에서 상이한 애플리케이션들로부터의 사용자 인터페이스들을 통합하는 단계를 더 포함하는 컴퓨터 실행 방법.
  17. 제 10 항에 있어서,
    제어 패턴들과 관련된 기능을 노출시키기 위한 인터페이스들을 제공하는 단계를 더 포함하는 컴퓨터 실행 방법.
  18. 제 10 항에 있어서,
    액세스 가능 시스템을 이용하여 논리 트리 위치를 반환하여 상기 클라이언트에게 애플리케이션에 관련된 정보를 제공하는 단계를 더 포함하는 컴퓨터 실행 방법.
KR1020057002094A 2002-09-30 2003-05-16 사용자 인터페이스 정보로의 액세스를 제공하는 시스템 및방법 KR100965708B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US41533902P 2002-09-30 2002-09-30
US60/415,339 2002-09-30
US10/367,226 2003-02-14
US10/367,226 US7434167B2 (en) 2002-09-30 2003-02-14 Accessibility system and method

Publications (2)

Publication Number Publication Date
KR20050056191A KR20050056191A (ko) 2005-06-14
KR100965708B1 true KR100965708B1 (ko) 2010-06-24

Family

ID=32033352

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057002094A KR100965708B1 (ko) 2002-09-30 2003-05-16 사용자 인터페이스 정보로의 액세스를 제공하는 시스템 및방법

Country Status (7)

Country Link
US (1) US7434167B2 (ko)
EP (1) EP1546871A1 (ko)
JP (2) JP4942932B2 (ko)
KR (1) KR100965708B1 (ko)
CN (1) CN1678994B (ko)
AU (1) AU2003299163A1 (ko)
WO (1) WO2004031947A1 (ko)

Families Citing this family (151)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8645137B2 (en) 2000-03-16 2014-02-04 Apple Inc. Fast, language-independent method for user authentication by voice
US20050108648A1 (en) * 2003-02-28 2005-05-19 Olander Daryl B. Method for propagating look and feel in a graphical user interface
US20040230328A1 (en) * 2003-03-21 2004-11-18 Steve Armstrong Remote data visualization within an asset data system for a process plant
US7644367B2 (en) 2003-05-16 2010-01-05 Microsoft Corporation User interface automation framework classes and interfaces
US8127252B2 (en) * 2003-11-07 2012-02-28 Microsoft Corporation Method and system for presenting user interface (UI) information
US7818664B2 (en) * 2004-03-16 2010-10-19 Freedom Scientific, Inc. Multimodal XML delivery system and method
US8744852B1 (en) 2004-10-01 2014-06-03 Apple Inc. Spoken interfaces
US7818755B1 (en) * 2004-12-22 2010-10-19 Apple Inc. Window server event taps
US7676549B2 (en) * 2005-05-27 2010-03-09 Microsoft Corporation Techniques for providing accessibility options in remote terminal sessions
US8677377B2 (en) 2005-09-08 2014-03-18 Apple Inc. Method and apparatus for building an intelligent automated assistant
US8863010B2 (en) * 2005-12-27 2014-10-14 Sap Ag Linking user interface design environment and application development environment
US9318108B2 (en) 2010-01-18 2016-04-19 Apple Inc. Intelligent automated assistant
JP5172156B2 (ja) * 2007-01-15 2013-03-27 富士通株式会社 情報処理装置,表示方法および表示プログラム
US8977255B2 (en) 2007-04-03 2015-03-10 Apple Inc. Method and system for operating a multi-function portable electronic device using voice-activation
US20090106764A1 (en) * 2007-10-22 2009-04-23 Microsoft Corporation Support for globalization in test automation
US8407605B2 (en) * 2009-04-03 2013-03-26 Social Communications Company Application sharing
US7769806B2 (en) 2007-10-24 2010-08-03 Social Communications Company Automated real-time data stream switching in a shared virtual area communication environment
US8397168B2 (en) 2008-04-05 2013-03-12 Social Communications Company Interfacing with a spatial virtual communication environment
US9330720B2 (en) 2008-01-03 2016-05-03 Apple Inc. Methods and apparatus for altering audio output signals
US8996376B2 (en) 2008-04-05 2015-03-31 Apple Inc. Intelligent text-to-speech conversion
WO2009146130A2 (en) 2008-04-05 2009-12-03 Social Communications Company Shared virtual area communication environment based apparatus and methods
US10496753B2 (en) 2010-01-18 2019-12-03 Apple Inc. Automatically adapting user interfaces for hands-free interaction
WO2009143301A1 (en) * 2008-05-20 2009-11-26 The Feedroom, Inc. Systems and methods for realtime creation and modification of a disabled user compliant video player
US20100030549A1 (en) 2008-07-31 2010-02-04 Lee Michael M Mobile device having human language translation capability with positional feedback
US20100082733A1 (en) * 2008-09-30 2010-04-01 Microsoft Corporation Extensible remote programmatic access to user interface
EP2377031A4 (en) 2008-12-05 2012-11-21 Social Communications Co REAL TIME CORE
WO2010067118A1 (en) 2008-12-11 2010-06-17 Novauris Technologies Limited Speech recognition involving a mobile device
US9853922B2 (en) 2012-02-24 2017-12-26 Sococo, Inc. Virtual area communications
EP2224331A1 (en) * 2009-02-27 2010-09-01 Research In Motion Limited Mobile wireless communications system providing device icon notification indicia framing and related methods
US9241062B2 (en) * 2009-05-20 2016-01-19 Citrix Systems, Inc. Methods and systems for using external display devices with a mobile computing device
US10706373B2 (en) 2011-06-03 2020-07-07 Apple Inc. Performing actions associated with task items that represent tasks to perform
US9858925B2 (en) 2009-06-05 2018-01-02 Apple Inc. Using context information to facilitate processing of commands in a virtual assistant
US10241644B2 (en) 2011-06-03 2019-03-26 Apple Inc. Actionable reminder entries
US10241752B2 (en) 2011-09-30 2019-03-26 Apple Inc. Interface for a virtual digital assistant
US9431006B2 (en) 2009-07-02 2016-08-30 Apple Inc. Methods and apparatuses for automatic speech recognition
US10553209B2 (en) 2010-01-18 2020-02-04 Apple Inc. Systems and methods for hands-free notification summaries
US10679605B2 (en) 2010-01-18 2020-06-09 Apple Inc. Hands-free list-reading by intelligent automated assistant
US10276170B2 (en) 2010-01-18 2019-04-30 Apple Inc. Intelligent automated assistant
US10705794B2 (en) 2010-01-18 2020-07-07 Apple Inc. Automatically adapting user interfaces for hands-free interaction
DE202011111062U1 (de) 2010-01-25 2019-02-19 Newvaluexchange Ltd. Vorrichtung und System für eine Digitalkonversationsmanagementplattform
US8682667B2 (en) 2010-02-25 2014-03-25 Apple Inc. User profiling for selecting user specific voice input processing information
US8433828B2 (en) 2010-02-26 2013-04-30 Apple Inc. Accessory protocol for touch screen device accessibility
US20110307831A1 (en) * 2010-06-10 2011-12-15 Microsoft Corporation User-Controlled Application Access to Resources
US8966447B2 (en) * 2010-06-21 2015-02-24 Apple Inc. Capturing and displaying state of automated user-level testing of a graphical user interface application
US10762293B2 (en) 2010-12-22 2020-09-01 Apple Inc. Using parts-of-speech tagging and named entity recognition for spelling correction
WO2012118917A2 (en) 2011-03-03 2012-09-07 Social Communications Company Realtime communications and network browsing client
US9262612B2 (en) 2011-03-21 2016-02-16 Apple Inc. Device access using voice authentication
US10057736B2 (en) 2011-06-03 2018-08-21 Apple Inc. Active transport based notifications
US8994660B2 (en) 2011-08-29 2015-03-31 Apple Inc. Text correction processing
US8607251B1 (en) * 2011-09-21 2013-12-10 Google Inc. Dynamic accessibility behavior
WO2013119802A1 (en) 2012-02-11 2013-08-15 Social Communications Company Routing virtual area based communications
US10134385B2 (en) 2012-03-02 2018-11-20 Apple Inc. Systems and methods for name pronunciation
US9483461B2 (en) 2012-03-06 2016-11-01 Apple Inc. Handling speech synthesis of content for multiple languages
US9280610B2 (en) 2012-05-14 2016-03-08 Apple Inc. Crowd sourcing information to fulfill user requests
WO2013181026A1 (en) 2012-06-02 2013-12-05 Social Communications Company Interfacing with a spatial virtual communications environment
US9721563B2 (en) 2012-06-08 2017-08-01 Apple Inc. Name recognition system
US9495129B2 (en) 2012-06-29 2016-11-15 Apple Inc. Device, method, and user interface for voice-activated navigation and browsing of a document
US9576574B2 (en) 2012-09-10 2017-02-21 Apple Inc. Context-sensitive handling of interruptions by intelligent digital assistant
US9547647B2 (en) 2012-09-19 2017-01-17 Apple Inc. Voice-based media searching
KR102516577B1 (ko) 2013-02-07 2023-04-03 애플 인크. 디지털 어시스턴트를 위한 음성 트리거
US9368114B2 (en) 2013-03-14 2016-06-14 Apple Inc. Context-sensitive handling of interruptions
WO2014144949A2 (en) 2013-03-15 2014-09-18 Apple Inc. Training an at least partial voice command system
WO2014144579A1 (en) 2013-03-15 2014-09-18 Apple Inc. System and method for updating an adaptive speech recognition model
US9582608B2 (en) 2013-06-07 2017-02-28 Apple Inc. Unified ranking with entropy-weighted information for phrase-based semantic auto-completion
WO2014197334A2 (en) 2013-06-07 2014-12-11 Apple Inc. System and method for user-specified pronunciation of words for speech synthesis and recognition
WO2014197336A1 (en) 2013-06-07 2014-12-11 Apple Inc. System and method for detecting errors in interactions with a voice-based digital assistant
WO2014197335A1 (en) 2013-06-08 2014-12-11 Apple Inc. Interpreting and acting upon commands that involve sharing information with remote devices
US10176167B2 (en) 2013-06-09 2019-01-08 Apple Inc. System and method for inferring user intent from speech inputs
KR101922663B1 (ko) 2013-06-09 2018-11-28 애플 인크. 디지털 어시스턴트의 둘 이상의 인스턴스들에 걸친 대화 지속성을 가능하게 하기 위한 디바이스, 방법 및 그래픽 사용자 인터페이스
EP3008964B1 (en) 2013-06-13 2019-09-25 Apple Inc. System and method for emergency calls initiated by voice command
US9979638B2 (en) * 2013-06-19 2018-05-22 Hcl Technologies Limited Systems and methods to construct engineering environment supporting API enablement for software defined networking
WO2015020942A1 (en) 2013-08-06 2015-02-12 Apple Inc. Auto-activating smart responses based on activities from remote devices
US9703684B1 (en) * 2013-10-01 2017-07-11 Amazon Technologies, Inc. Unified user element information provisioning
US9620105B2 (en) 2014-05-15 2017-04-11 Apple Inc. Analyzing audio input for efficient speech and music recognition
US10592095B2 (en) 2014-05-23 2020-03-17 Apple Inc. Instantaneous speaking of content on touch devices
US9502031B2 (en) 2014-05-27 2016-11-22 Apple Inc. Method for supporting dynamic grammars in WFST-based ASR
US10078631B2 (en) 2014-05-30 2018-09-18 Apple Inc. Entropy-guided text prediction using combined word and character n-gram language models
US10170123B2 (en) 2014-05-30 2019-01-01 Apple Inc. Intelligent assistant for home automation
US9785630B2 (en) 2014-05-30 2017-10-10 Apple Inc. Text prediction using combined word N-gram and unigram language models
US9633004B2 (en) 2014-05-30 2017-04-25 Apple Inc. Better resolution when referencing to concepts
WO2015184186A1 (en) 2014-05-30 2015-12-03 Apple Inc. Multi-command single utterance input method
US9734193B2 (en) 2014-05-30 2017-08-15 Apple Inc. Determining domain salience ranking from ambiguous words in natural speech
US9842101B2 (en) 2014-05-30 2017-12-12 Apple Inc. Predictive conversion of language input
US9430463B2 (en) 2014-05-30 2016-08-30 Apple Inc. Exemplar-based natural language processing
US9715875B2 (en) 2014-05-30 2017-07-25 Apple Inc. Reducing the need for manual start/end-pointing and trigger phrases
US10289433B2 (en) 2014-05-30 2019-05-14 Apple Inc. Domain specific language for encoding assistant dialog
US9760559B2 (en) 2014-05-30 2017-09-12 Apple Inc. Predictive text input
US10659851B2 (en) 2014-06-30 2020-05-19 Apple Inc. Real-time digital assistant knowledge updates
US9338493B2 (en) 2014-06-30 2016-05-10 Apple Inc. Intelligent automated assistant for TV user interactions
US10140102B2 (en) * 2014-08-21 2018-11-27 International Business Machines Corporation Evaluating accessibility compliance of a hybrid user interface design
US10446141B2 (en) 2014-08-28 2019-10-15 Apple Inc. Automatic speech recognition based on user feedback
US9818400B2 (en) 2014-09-11 2017-11-14 Apple Inc. Method and apparatus for discovering trending terms in speech requests
US10789041B2 (en) 2014-09-12 2020-09-29 Apple Inc. Dynamic thresholds for always listening speech trigger
US10127911B2 (en) 2014-09-30 2018-11-13 Apple Inc. Speaker identification and unsupervised speaker adaptation techniques
US9668121B2 (en) 2014-09-30 2017-05-30 Apple Inc. Social reminders
US10074360B2 (en) 2014-09-30 2018-09-11 Apple Inc. Providing an indication of the suitability of speech recognition
US9646609B2 (en) 2014-09-30 2017-05-09 Apple Inc. Caching apparatus for serving phonetic pronunciations
US9886432B2 (en) 2014-09-30 2018-02-06 Apple Inc. Parsimonious handling of word inflection via categorical stem + suffix N-gram language models
US10552013B2 (en) 2014-12-02 2020-02-04 Apple Inc. Data detection
US9711141B2 (en) 2014-12-09 2017-07-18 Apple Inc. Disambiguating heteronyms in speech synthesis
US10268333B2 (en) 2015-03-03 2019-04-23 Soroco Private Limited Software robots for programmatically controlling computer programs to perform tasks
US9865280B2 (en) 2015-03-06 2018-01-09 Apple Inc. Structured dictation using intelligent automated assistants
US10567477B2 (en) 2015-03-08 2020-02-18 Apple Inc. Virtual assistant continuity
US9721566B2 (en) 2015-03-08 2017-08-01 Apple Inc. Competing devices responding to voice triggers
US9886953B2 (en) 2015-03-08 2018-02-06 Apple Inc. Virtual assistant activation
US9899019B2 (en) 2015-03-18 2018-02-20 Apple Inc. Systems and methods for structured stem and suffix language models
US9842105B2 (en) 2015-04-16 2017-12-12 Apple Inc. Parsimonious continuous-space phrase representations for natural language processing
US10083688B2 (en) 2015-05-27 2018-09-25 Apple Inc. Device voice control for selecting a displayed affordance
US10127220B2 (en) 2015-06-04 2018-11-13 Apple Inc. Language identification from short strings
US10101822B2 (en) 2015-06-05 2018-10-16 Apple Inc. Language input correction
US9578173B2 (en) 2015-06-05 2017-02-21 Apple Inc. Virtual assistant aided communication with 3rd party service in a communication session
US10186254B2 (en) 2015-06-07 2019-01-22 Apple Inc. Context-based endpoint detection
US11025565B2 (en) 2015-06-07 2021-06-01 Apple Inc. Personalized prediction of responses for instant messaging
US10255907B2 (en) 2015-06-07 2019-04-09 Apple Inc. Automatic accent detection using acoustic models
US10459600B2 (en) 2015-06-24 2019-10-29 Microsoft Technology Licensing, Llc Conversion of platform-independent accessibility logic into platform-specific accessibility functionality
US9734312B1 (en) * 2015-08-12 2017-08-15 Symantec Corporation Systems and methods for detecting when users are uninstalling applications
US10747498B2 (en) 2015-09-08 2020-08-18 Apple Inc. Zero latency digital assistant
US10671428B2 (en) 2015-09-08 2020-06-02 Apple Inc. Distributed personal assistant
US9697820B2 (en) 2015-09-24 2017-07-04 Apple Inc. Unit-selection text-to-speech synthesis using concatenation-sensitive neural networks
US11010550B2 (en) 2015-09-29 2021-05-18 Apple Inc. Unified language modeling framework for word prediction, auto-completion and auto-correction
US10366158B2 (en) 2015-09-29 2019-07-30 Apple Inc. Efficient word encoding for recurrent neural network language models
US11587559B2 (en) 2015-09-30 2023-02-21 Apple Inc. Intelligent device identification
US10691473B2 (en) 2015-11-06 2020-06-23 Apple Inc. Intelligent automated assistant in a messaging environment
US10049668B2 (en) 2015-12-02 2018-08-14 Apple Inc. Applying neural network language models to weighted finite state transducers for automatic speech recognition
US10223066B2 (en) 2015-12-23 2019-03-05 Apple Inc. Proactive assistance based on dialog communication between devices
US10446143B2 (en) 2016-03-14 2019-10-15 Apple Inc. Identification of voice inputs providing credentials
US9934775B2 (en) 2016-05-26 2018-04-03 Apple Inc. Unit-selection text-to-speech synthesis based on predicted concatenation parameters
US9972304B2 (en) 2016-06-03 2018-05-15 Apple Inc. Privacy preserving distributed evaluation framework for embedded personalized systems
US10249300B2 (en) 2016-06-06 2019-04-02 Apple Inc. Intelligent list reading
US10049663B2 (en) 2016-06-08 2018-08-14 Apple, Inc. Intelligent automated assistant for media exploration
DK179588B1 (en) 2016-06-09 2019-02-22 Apple Inc. INTELLIGENT AUTOMATED ASSISTANT IN A HOME ENVIRONMENT
US10192552B2 (en) 2016-06-10 2019-01-29 Apple Inc. Digital assistant providing whispered speech
US10067938B2 (en) 2016-06-10 2018-09-04 Apple Inc. Multilingual word prediction
US10490187B2 (en) 2016-06-10 2019-11-26 Apple Inc. Digital assistant providing automated status report
US10586535B2 (en) 2016-06-10 2020-03-10 Apple Inc. Intelligent digital assistant in a multi-tasking environment
US10509862B2 (en) 2016-06-10 2019-12-17 Apple Inc. Dynamic phrase expansion of language input
DK179415B1 (en) 2016-06-11 2018-06-14 Apple Inc Intelligent device arbitration and control
DK179343B1 (en) 2016-06-11 2018-05-14 Apple Inc Intelligent task discovery
DK201670540A1 (en) 2016-06-11 2018-01-08 Apple Inc Application integration with a digital assistant
DK179049B1 (en) 2016-06-11 2017-09-18 Apple Inc Data driven natural language event detection and classification
US10043516B2 (en) 2016-09-23 2018-08-07 Apple Inc. Intelligent automated assistant
US10593346B2 (en) 2016-12-22 2020-03-17 Apple Inc. Rank-reduced token representation for automatic speech recognition
EP3340072B1 (de) * 2016-12-23 2021-02-17 Solute GmbH Verfahren zur durchführung einer selbsttätigen datenabfrage und programmprodukt
DK201770439A1 (en) 2017-05-11 2018-12-13 Apple Inc. Offline personal assistant
DK179496B1 (en) 2017-05-12 2019-01-15 Apple Inc. USER-SPECIFIC Acoustic Models
DK179745B1 (en) 2017-05-12 2019-05-01 Apple Inc. SYNCHRONIZATION AND TASK DELEGATION OF A DIGITAL ASSISTANT
DK201770432A1 (en) 2017-05-15 2018-12-21 Apple Inc. Hierarchical belief states for digital assistants
DK201770431A1 (en) 2017-05-15 2018-12-20 Apple Inc. Optimizing dialogue policy decisions for digital assistants using implicit feedback
DK179560B1 (en) 2017-05-16 2019-02-18 Apple Inc. FAR-FIELD EXTENSION FOR DIGITAL ASSISTANT SERVICES
CN109542644B (zh) * 2018-11-19 2022-12-09 北京小米移动软件有限公司 应用程序编程接口调用方法及装置
US11520687B2 (en) 2020-11-20 2022-12-06 Bank Of America Corporation System and method for automated testing of an accessibility feature of a user device by emulating actions of users

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010082529A (ko) * 1998-11-19 2001-08-30 추후제출 통합형 컴퓨팅 및 통신 아키텍쳐(ucca)

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5327529A (en) * 1990-09-24 1994-07-05 Geoworks Process of designing user's interfaces for application programs
US5613122A (en) 1994-11-14 1997-03-18 Object Technology Licensing Corp. Object-oriented operating system
WO1997016796A1 (en) 1995-10-31 1997-05-09 Herz Frederick S M System for customized electronic identification of desirable objects
US6161126A (en) 1995-12-13 2000-12-12 Immersion Corporation Implementing force feedback over the World Wide Web and other computer networks
AU2759297A (en) * 1996-05-20 1997-12-09 Cognos Incorporated Application services builder
CH690875A5 (de) 1996-05-21 2001-02-15 Hts High Technology Systems Ag Heim- und Gebäudeautomationssystem.
US5923328A (en) 1996-08-07 1999-07-13 Microsoft Corporation Method and system for displaying a hierarchical sub-tree by selection of a user interface element in a sub-tree bar control
US6144377A (en) * 1997-03-11 2000-11-07 Microsoft Corporation Providing access to user interface elements of legacy application programs
US6341280B1 (en) 1998-10-30 2002-01-22 Netscape Communications Corporation Inline tree filters
EP1069500A1 (en) * 1999-07-12 2001-01-17 International Business Machines Corporation Downloadable user-interface
US6532023B1 (en) * 1999-08-12 2003-03-11 International Business Machines Corporation Recording selected applet events of a user interaction sequence
US7367043B2 (en) 2000-11-16 2008-04-29 Meevee, Inc. System and method for generating metadata for programming events

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010082529A (ko) * 1998-11-19 2001-08-30 추후제출 통합형 컴퓨팅 및 통신 아키텍쳐(ucca)

Also Published As

Publication number Publication date
EP1546871A1 (en) 2005-06-29
AU2003299163A1 (en) 2004-04-23
CN1678994A (zh) 2005-10-05
JP2006501566A (ja) 2006-01-12
JP4942932B2 (ja) 2012-05-30
US20040064593A1 (en) 2004-04-01
WO2004031947A8 (en) 2004-07-08
WO2004031947A1 (en) 2004-04-15
CN1678994B (zh) 2010-05-26
KR20050056191A (ko) 2005-06-14
US7434167B2 (en) 2008-10-07
JP2009199618A (ja) 2009-09-03

Similar Documents

Publication Publication Date Title
KR100965708B1 (ko) 사용자 인터페이스 정보로의 액세스를 제공하는 시스템 및방법
US7644367B2 (en) User interface automation framework classes and interfaces
KR100986415B1 (ko) 커맨드 바인딩을 수행하기 위한 데이터-바인딩 매카니즘의 애플리케이션
KR101219856B1 (ko) 데이터 프로세싱을 자동화하기 위한 방법 및 시스템
US20110154226A1 (en) Chip model of an extensible plug-in architecture for enterprise mashups
US20010056457A1 (en) Method and system of processing a plurality of data processing requests, and method and system of executing a program
US20080098309A1 (en) Managing virtual machines and hosts by property
AU2003201954B2 (en) Accessibility system events mechanism and method
JPH1091447A (ja) 分散オブジェクトシステムにおいて分散オブジェクトの再利用を促進するカタログ装置
US20040061714A1 (en) Logical element tree and method
US7412667B2 (en) Web service visualizer and display service
RU2316043C2 (ru) Механизм и способ предоставления информации событий в системе доступа
NZ524858A (en) Receiving user interface information from server for keeping track of changes to user interface depending on client's registration
KR20080106188A (ko) 객체지향 애플리케이션의 탐색 방법, 통신 방법 및 컴퓨터 판독가능 매체
JP2021179903A (ja) ユーザーインターフェイスの操作パターンを生成するプログラムおよび操作パターン生成装置
JP5650877B2 (ja) 複数のコンピューティング機能ソースを用意するための装置及び方法
CN114564403A (zh) 信息展示方法和计算设备
Gerber et al. More SDK Tools

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130521

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140516

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20150515

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20160517

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20170522

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 9