KR20090027624A - 로컬 모듈과 원격 모듈 간의 객체의 드래그 앤 드롭 - Google Patents

로컬 모듈과 원격 모듈 간의 객체의 드래그 앤 드롭 Download PDF

Info

Publication number
KR20090027624A
KR20090027624A KR1020087029934A KR20087029934A KR20090027624A KR 20090027624 A KR20090027624 A KR 20090027624A KR 1020087029934 A KR1020087029934 A KR 1020087029934A KR 20087029934 A KR20087029934 A KR 20087029934A KR 20090027624 A KR20090027624 A KR 20090027624A
Authority
KR
South Korea
Prior art keywords
drop
drag
application
computer system
server
Prior art date
Application number
KR1020087029934A
Other languages
English (en)
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 KR20090027624A publication Critical patent/KR20090027624A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/048Interaction techniques based on graphical user interfaces [GUI]
    • G06F3/0484Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
    • G06F3/0486Drag-and-drop
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
    • 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/08Protocols specially adapted for terminal emulation, e.g. Telnet

Landscapes

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

Abstract

본 발명은 로컬 모듈과 원격 모듈 간에 객체를 드래그 앤 드롭하는 방법, 시스템 및 컴퓨터 프로그램 제품으로 확장된다. 터미널 서버 컴포넌트는 로컬 모듈과 원격 모듈 간의 객체의 드래그 앤 드롭을 용이하게 해주기 위해 드래그 앤 드롭 동작에의 참여자들의 기능을 시뮬레이트한다. 터미널 서버 컴포넌트들은 드래그 앤 드롭 동작에 참여하는 모듈들과 통신을 하기 위해 로컬적으로 상호작용한다. 터미널 서버 컴포넌트는 또한 적절한 드래그 앤 드롭 정보를 터미널 서버 세션의 다른쪽 단부에 있는 대응하는 터미널 서버 컴포넌트에 중계하기 위해 터미널 서버 세션을 통해 메시지를 전송한다.
Figure P1020087029934
드래그 앤 드롭, 터미널 서버, 드롭 타겟, 드롭 소스, 프록시

Description

로컬 모듈과 원격 모듈 간의 객체의 드래그 앤 드롭{DRAGGING AND DROPPING OBJECTS BETWEEN LOCAL AND REMOTE MODULES}
컴퓨터 시스템 및 관련 기술은 사회의 많은 측면들에 영향을 주고 있다. 실제로, 컴퓨터 시스템의 정보 처리 능력은 우리가 살아가고 일하는 방식을 변화시켰다. 이제, 컴퓨터 시스템은 흔히 컴퓨터 시스템의 등장 이전에 수작업으로 수행되었던 다양한 작업들(예를 들어, 워드 프로세싱, 스케쥴링 및 데이터베이스 관리)을 수행한다. 통상적으로, 이들 다양한 작업을 수행하기 위해, 컴퓨터 시스템은 다수의 대응하는 애플리케이션을 포함한다. 예를 들어, 워드 프로세싱을 수행하기 위해, 컴퓨터 시스템은 워드 프로세싱 애플리케이션을 포함할 수 있고, 스프레드쉬트를 처리하기 위해, 컴퓨터 시스템은 스프레드쉬트 애플리케이션을 포함할 수 있으며, 이하 마찬가지이다.
독립형 컴퓨팅 환경에서, 컴퓨터 시스템에서 서로 다른 작업을 수행하는 애플리케이션들 간에 객체를 이동시킬 수 있는 것은 종종 유용하다. 예를 들어, 워드 프로세싱 애플리케이션에서 발생된 텍스트의 일부분을 사진 또는 도면에 대한 설명 텍스트로서 프리젠테이션 프로그램으로 이동시키는 것이 유용할 수 있다. 애플리케이션들 간의 객체의 이동을 가능하게 해주기 위해, 어떤 컴퓨터 시스템은 컴퓨터 시스템에 있는 애플리케이션들에 의해 공용으로 인터페이스될 수 있는 메모리 의 일부분(예를 들어, 클립보드)을 포함한다. 따라서, 한 애플리케이션이 객체를 저장하기 위해 그 메모리의 일부분과 인터페이스할 수 있고 이어서 다른 애플리케이션이 그 객체를 검색하기 위해 그 메모리의 일부분과 인터페이스할 수 있다. 따라서, 애플리케이션(객체를 호환성있게 직접 교환할 수 없는 애플리케이션조차)은 그 메모리의 일부분을 통해 객체를 교환할 수 있다.
많은 독립형 컴퓨팅 환경들은 또한 호환가능한 애플리케이션들 간에 객체를 직접 전송하기 위해 시각적 단서(visual cue)와 결합하여 입력 장치를 사용하는 더 편리한 기능을 포함하고 있다. 애플리케이션들 간의 직접적인 전송을 위한 한가지 통상의 메카니즘은 "드래그 앤 드롭(drag and drop)"이다. 드래그 앤 드롭을 용이하게 해주기 위해, 사용자는 한 애플리케이션 내의 객체(예를 들어, 텍스트의 일부분, 사진, 또는 스프레드쉬트 셀)를 식별한다. 예를 들어, 사용자는 마우스를 사용하여 텍스트의 일부분을 하이라이트할 수 있다. 텍스트가 선택되었음을 사용자에게 알려주기 위해 시각적 단서(예를 들어, 백라이팅)가 사용될 수 있다.
사용자는 식별된 객체를 선택하기 위해 입력 장치를 조작한다. 예를 들어, 사용자는 식별된 텍스트 상에서 커서를 이동시키기 위해 마우스를 조작하고 이어서 좌측 마우스 버튼을 누를 수 있다. 이어서, 사용자는 객체를 다른 애플리케이션을 이동시키기 위해 입력 장치를 또 조작한다. 예를 들어, 좌측 마우스 버튼을 누른 채로 있으면서, 사용자는 마우스를 조작하여 커서를 상대편 애플리케이션의 상부로 이동(드래그)시킬 수 있다. 상대편 애플리케이션 상부에 있는 경우, 사용자는 좌측 마우스 버튼을 놓을 수 있다. 마우스 버튼을 놓는 동작에 의해 객체가 상대편 애플리케이션으로 전송(즉, 드롭)된다.
다른 환경에서, 컴퓨터 시스템은 서로 또한 다른 전자 장치에 연결되어, 유선 및 무선 컴퓨터 네트워크 둘다를 형성하며, 이 네트워크를 통해 컴퓨터 시스템 및 다른 전자 장치들은 전자 데이터를 전송할 수 있다. 그 결과, 컴퓨터 시스템에서 수행되는 많은 작업들(예를 들어, 음성 통신, 전자 메일에의 접속, 가전 제품의 제어, 웹 브라우징, 및 문서 인쇄)은 유선 및/또는 무선 컴퓨터 네트워크를 통한 다수의 컴퓨터 시스템 및/또는 다른 전자 장치들 간의 통신(예를 들어, 전자 메시지의 교환)을 포함한다.
네트워크화된 환경에서, 서로 다른 작업을 수행하는 애플리케이션들 간에 객체를 이동시킬 수 있는 것도 종종 유용하며, 이 때 어떤 애플리케이션은 로컬적으로 실행되고 다른 애플리케이션은 원격적으로, 예를 들어, 터미널 서버에서 실행된다. 터미널 서버는 클라이언트 컴퓨터 시스템에 의해 원격적으로 실행될 수 있는 애플리케이션들을 보유하고 있는 컴퓨터 시스템이다. 클라이언트 시스템에서 입력이 입력되고 네트워크를 통해 [예를 들어, ITU T.120 계열의 프로토콜(예를 들어, RDP(Remote Desktop Protocol) 등)에 기초한 프로토콜을 사용하여] 터미널 서버에 있는 애플리케이션으로 전송된다. 이 애플리케이션은 입력이 터미널 서버에서 입력된 것처럼 그 입력을 처리한다. 애플리케이션은 수신된 입력에 응답하여 출력을 발생하고, 이 출력은 네트워크를 통해(예를 들어, 역시 T.120 기반 프로토콜을 통해) 클라이언트 컴퓨터 시스템으로 전송된다. 클라이언트 컴퓨터 시스템은 그 출력 데이터를 제공한다. 따라서, 클라이언트 컴퓨터 시스템에서 입력이 수신되고 출력이 제공되지만, 실제로 처리는 터미널 서버에서 일어난다.
로컬 애플리케이션과 원격 애플리케이션 간의 객체의 이동을 가능하게 해주기 위해, 어떤 네트워크화된 컴퓨터 시스템은 독립형 환경에서 사용되는 것과 유사한 클립보드 기능을 포함한다. 메모리의 일부분(즉, 클립보드)이 할당되고 컴퓨터 시스템에 있는 애플리케이션들에 의해 공용으로 인터페이스될 수 있다. 따라서, 로컬 애플리케이션은 객체를 저장하기 위해 메모리의 일부분과 인터페이스할 수 있고, 원격 애플리케이션은 그 객체를 검색하기 위해 메모리의 일부분과 인터페이스할 수 있으며, 그 역도 마찬가지이다. 따라서, 애플리케이션들(서로 다른 컴퓨터 시스템에서 실행 중인 애플리케이션들조차)은 메모리의 일부분을 통해 객체들을 교환할 수 있다.
그렇지만, 많은 네트워크화된 컴퓨터 시스템은 로컬 애플리케이션과 원격 애플리케이션 간에 객체를 드래그 앤 드롭하는 더 편리한 기능이 없다. 즉, 클라이언트 및 서버 터미널 서버 컴포넌트는 통상적으로 드래그 앤 드롭 객체를 터미널 서버을 통해 전송하고 또 드래그 앤 드롭 전송을 용이하게 해주기 위해 드롭 소스 또는 드롭 타겟과 상호작용하도록 구성되어 있지 않다. 예를 들어, 서버 컴포넌트는 통상적으로 원격 데스크톱 창 외부에서의(클라이언트 시스템에서의) 마우스 커서의 움직임이 드래그 앤 드롭 동작과 연관되어 있는지 또는 사용자가 다른 이유로 마우스를 움직이고 있는지를 결정하는 방법이 없다.
본 발명은 로컬 모듈과 원격 모듈 간에 객체를 드래그 앤 드롭하는 방법, 시스템, 및 컴퓨터 프로그램 제품으로 확장된다. 어떤 실시예들에서, 객체가 로컬 애플리케이션으로부터 원격 애플리케이션으로 드래그 앤 드롭된다. 데스크톱 창 커서가 원격 애플리케이션의 애플리케이션 창의 경계 외부로부터 내부로 이동되었음을 클라이언트 컴포넌트가 검출한다. 상기 클라이언트 컴포넌트가 대기 중인 드래그 앤 드롭 동작을 알려주는 드롭 통지를 수신한다. 이 드롭 통지는 드래그 앤 드롭 객체가 상기 원격 애플리케이션으로 전송될 것임을 알려준다. 상기 클라이언트 컴포넌트는, 상기 데스크톱 창 커서의 좌표 위치와 함께, 드래그 앤 드롭 객체를 전송하라는 요청을 터미널 서버 세션을 통해 서버 컴퓨터 시스템으로 전송한다.
서버 컴포넌트는 상기 요청을 수신하고 드래그 앤 드롭 객체 전송 통지를 원격 애플리케이션으로 전달한다. 드래그 앤 드롭 객체를 전송하라는 요청을 수신한 것에 응답하여, 상기 서버 컴포넌트는 상기 로컬 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 원격 애플리케이션으로부터 드래그 앤 드롭 객체에 대한 요청을 수신한다. 상기 서버 컴포넌트는 상기 드래그 앤 드롭 객체에 대한 요청을 상기 터미널 서버 세션을 통해 상기 클라이언트 컴포넌트로 전달한다.
상기 클라이언트 컴포넌트는 상기 터미널 서버 세션을 통해 상기 서버 컴퓨터 시스템으로부터 상기 드래그 앤 드롭 객체에 대한 요청을 수신한다. 상기 클라이언트 컴포넌트는 상기 원격 애플리케이션을 위하여 프록시 드롭 타겟으로서 역할하여, 상기 드래그 앤 드롭 객체에 대한 상기 요청을 상기 로컬 애플리케이션으로 전달하고, 상기 로컬 애플리케이션으로부터의 상기 드래그 앤 드롭 객체를 수신한다. 상기 클라이언트 컴포넌트는 상기 드래그 앤 드롭 객체를 상기 터미널 서버 세션을 통해 상기 서버 컴퓨터 시스템으로 전송한다.
상기 서버 컴포넌트는 상기 터미널 서버 세션을 통해 상기 클라이언트 컴포넌트로부터 상기 드래그 앤 드롭 객체를 수신한다. 상기 서버 컴포넌트는 상기 로컬 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 드래그 앤 드롭 객체를 상기 원격 애플리케이션으로 전송한다.
다른 실시예들에서, 객체가 원격 애플리케이션으로부터 로컬 애플리케이션으로 드래그 앤 드롭된다. 데스크톱 창 커서가 원격 애플리케이션의 경계 내부로부터 외부로 이동되었음을 클라이언트 컴포넌트가 검출한다. 상기 클라이언트 컴포넌트는 상기 터미널 서버 세션을 통해 상기 서버 컴포넌트로 메시지를 전송한다. 상기 메시지는 상기 데스크톱 창 커서가 상기 원격 애플리케이션의 애플리케이션 창의 경계 내부로부터 외부로 이동되었음을 상기 서버 컴포넌트에 알려 준다.
상기 서버 컴포넌트는 상기 터미널 서버 세션을 통해 상기 클라이언트 컴포넌트로부터 상기 메시지를 수신한다. 상기 서버 컴포넌트가 상기 데스크톱 창 커서의 움직임이 대기 중인 드래그 앤 드롭 동작과 연관되어 있는지를 결정한다.
상기 클라이언트 컴포넌트는 상기 원격 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 로컬 애플리케이션으로부터 드래그 앤 드롭 객체에 대한 질의를 수신한다. 상기 질의는 상기 드래그 앤 드롭 객체가 상기 로컬 애플리케이션으로 전송될 것임을 나타내는 상기 로컬 애플리케이션에서의 드롭 통지를 나타낸다. 상기 클라이언트 컴포넌트는 상기 드래그 앤 드롭 객체에 대한 요청을 상기 터미널 서버 세션을 통해 상기 서버 컴포넌트로 전송한다.
상기 서버 컴포넌트는 상기 요청을 수신한다. 상기 서버 컴포넌트는 상기 로컬 애플리케이션을 위하여 프록시 드롭 타겟으로서 역할하여, 상기 드래그 앤 드롭 객체에 대한 요청을 상기 원격 애플리케이션으로 전달하고 상기 원격 애플리케이션으로부터 상기 드래그 앤 드롭 객체를 수신한다. 상기 서버 컴포넌트는 상기 드래그 앤 드롭 객체를 상기 터미널 서버 세션을 통해 상기 클라이언트 컴퓨터 시스템으로 전송한다.
상기 클라이언트 컴포넌트는 상기 드래그 앤 드롭 객체를 수신한다. 상기 클라이언트 컴포넌트는 상기 원격 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 드래그 앤 드롭 객체를 상기 로컬 애플리케이션으로 전송한다.
이 요약은 이하에서 상세한 설명에 더 기술되는 선택된 개념들을 간략화된 형태로 소개하기 위해 제공된 것이다. 이 요약은 청구된 발명 대상의 주요 특징들 또는 필수적인 특징들을 확인하기 위한 것이 아니며, 청구된 발명 대상의 범위를 정하는 데 보조 수단으로 사용되기 위한 것도 아니다.
부가적인 특징 및 이점이 이하의 설명에 기술될 것이며, 부분적으로는 이 설명으로부터 명백하게 되거나 본 명세서의 설명 내용을 실시함으로써 알 수 있다. 본 발명의 특징들 및 이점들은 첨부된 청구항에 구체적으로 기재된 수단들 및 조합들에 의해 실현 및 달성될 수 있다. 본 발명의 특징들은 이하의 설명 및 첨부된 청구항들로부터 더 명백하게 되거나 이후에 기술되는 바와 같이 본 발명을 실시함으로서 알 수 있다.
도 1a는 로컬 모듈로부터 원격 모듈로 객체를 드래그 앤 드롭하는 것을 용이하게 해주는 예시적인 컴퓨터 아키텍처를 나타낸 도면.
도 1b는 로컬 모듈로부터 원격 모듈로의 드래그 앤 드롭 동작을 나타낸 예시적인 데스크톱 창을 나타낸 도면.
도 2a 내지 도 2c는 로컬 모듈로부터 원격 모듈로 객체를 드래그 앤 드롭하는 예시적인 방법의 플로우차트.
도 3a는 원격 모듈로부터 로컬 모듈로 객체를 드래그 앤 드롭하는 것을 용이하게 해주는 예시적인 컴퓨터 아키텍처를 나타낸 도면.
도 3b는 원격 모듈로부터 로컬 모듈로의 드래그 앤 드롭 동작을 나타낸 예시적인 데스크톱 창을 나타낸 도면.
도 4a 내지 도 4c는 원격 모듈로부터 로컬 모듈로 객체를 드래그 앤 드롭하는 예시적인 방법의 플로우차트.
상기한 이점 및 특징과 기타의 이점 및 특징이 달성될 수 있는 방식을 기술하기 위해, 이상에서 간략히 기술된 발명 대상의 보다 상세한 설명이 첨부 도면에 도시되어 있는 구체적인 실시예들을 참조하여 이루어질 것이다. 이들 도면이 단지 전형적인 실시예만을 나타내고 따라서 범위를 제한하는 것으로 간주되어서는 안된다는 것을 이해하면서, 첨부 도면을 사용하여 실시예들을 더 구체적이고 상세하게 기술하고 설명할 것이다.
본 발명은 로컬 모듈과 원격 모듈 간에 객체를 드래그 앤 드롭하는 방법, 시 스템, 및 컴퓨터 프로그램 제품으로 확장된다. 어떤 실시예들에서, 객체가 로컬 애플리케이션으로부터 원격 애플리케이션으로 드래그 앤 드롭된다. 데스크톱 창 커서가 원격 애플리케이션의 애플리케이션 창의 경계 외부로부터 내부로 이동되었음을 클라이언트 컴포넌트가 검출한다. 상기 클라이언트 컴포넌트가 대기 중인 드래그 앤 드롭 동작을 알려주는 드롭 통지를 수신한다. 이 드롭 통지는 드래그 앤 드롭 객체가 상기 원격 애플리케이션으로 전송될 것임을 알려준다. 상기 클라이언트 컴포넌트는, 상기 데스크톱 창 커서의 좌표 위치와 함께, 드래그 앤 드롭 객체를 전송하라는 요청을 터미널 서버 세션을 통해 서버 컴퓨터 시스템으로 전송한다.
서버 컴포넌트는 상기 요청을 수신하고 드래그 앤 드롭 객체 전송 통지를 원격 애플리케이션으로 전달한다. 드래그 앤 드롭 객체를 전송하라는 요청을 수신한 것에 응답하여, 상기 서버 컴포넌트는 상기 로컬 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 원격 애플리케이션으로부터 드래그 앤 드롭 객체에 대한 요청을 수신한다. 상기 서버 컴포넌트는 상기 드래그 앤 드롭 객체에 대한 요청을 상기 터미널 서버 세션을 통해 상기 클라이언트 컴포넌트로 전달한다.
상기 클라이언트 컴포넌트는 상기 터미널 서버 세션을 통해 상기 서버 컴퓨터 시스템으로부터 상기 드래그 앤 드롭 객체에 대한 요청을 수신한다. 상기 클라이언트 컴포넌트는 상기 원격 애플리케이션을 위하여 프록시 드롭 타겟으로서 역할하여, 상기 드래그 앤 드롭 객체에 대한 상기 요청을 상기 로컬 애플리케이션으로 전달하고, 상기 로컬 애플리케이션으로부터의 상기 드래그 앤 드롭 객체를 수신한다. 상기 클라이언트 컴포넌트는 상기 드래그 앤 드롭 객체를 상기 터미널 서버 세션을 통해 상기 서버 컴퓨터 시스템으로 전송한다.
상기 서버 컴포넌트는 상기 터미널 서버 세션을 통해 상기 클라이언트 컴포넌트로부터 상기 드래그 앤 드롭 객체를 수신한다. 상기 서버 컴포넌트는 상기 로컬 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 드래그 앤 드롭 객체를 상기 원격 애플리케이션으로 전송한다.
다른 실시예들에서, 객체가 원격 애플리케이션으로부터 로컬 애플리케이션으로 드래그 앤 드롭된다. 데스크톱 창 커서가 원격 애플리케이션의 경계 내부로부터 외부로 이동되었음을 클라이언트 컴포넌트가 검출한다. 상기 클라이언트 컴포넌트는 상기 터미널 서버 세션을 통해 상기 서버 컴포넌트로 메시지를 전송한다. 상기 메시지는 상기 데스크톱 창 커서가 상기 원격 애플리케이션의 애플리케이션 창의 경계 내부로부터 외부로 이동되었음을 상기 서버 컴포넌트에 알려 준다.
상기 서버 컴포넌트는 상기 터미널 서버 세션을 통해 상기 클라이언트 컴포넌트로부터 상기 메시지를 수신한다. 상기 서버 컴포넌트가 상기 데스크톱 창 커서의 움직임이 대기 중인 드래그 앤 드롭 동작과 연관되어 있는지를 결정한다.
상기 클라이언트 컴포넌트는 상기 원격 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 로컬 애플리케이션으로부터 드래그 앤 드롭 객체에 대한 질의를 수신한다. 상기 질의는 상기 드래그 앤 드롭 객체가 상기 로컬 애플리케이션으로 전송될 것임을 나타내는 상기 로컬 애플리케이션에서의 드롭 통지를 나타낸다. 상기 클라이언트 컴포넌트는 상기 드래그 앤 드롭 객체에 대한 요청을 상기 터미널 서버 세션을 통해 상기 서버 컴포넌트로 전송한다.
상기 서버 컴포넌트는 상기 요청을 수신한다. 상기 서버 컴포넌트는 상기 로컬 애플리케이션을 위하여 프록시 드롭 타겟으로서 역할하여, 상기 드래그 앤 드롭 객체에 대한 요청을 상기 원격 애플리케이션으로 전달하고 상기 원격 애플리케이션으로부터 상기 드래그 앤 드롭 객체를 수신한다. 상기 서버 컴포넌트는 상기 드래그 앤 드롭 객체를 상기 터미널 서버 세션을 통해 상기 클라이언트 컴퓨터 시스템으로 전송한다.
상기 클라이언트 컴포넌트는 상기 드래그 앤 드롭 객체를 수신한다. 상기 클라이언트 컴포넌트는 상기 원격 애플리케이션을 위하여 프록시 드롭 소스로서 역할하여, 상기 드래그 앤 드롭 객체를 상기 로컬 애플리케이션으로 전송한다.
본 발명의 실시예들은, 이하에서 더 상세히 논의되는 바와 같이, 컴퓨터 하드웨어를 포함하는 전용 또는 범용 컴퓨터를 포함할 수 있다. 본 발명의 범위 내의 실시예들은 또한 컴퓨터 실행가능 명령어 또는 데이터 명령어를 전달하거나 저장하고 있는 컴퓨터 판독가능 매체도 포함한다. 이러한 컴퓨터 판독가능 매체는 범용 또는 전용 컴퓨터에 의해 액세스될 수 있는 이용가능한 매체라면 어느 것이라도 될 수 있다. 제한이 아닌 예로서, 컴퓨터 판독가능 매체는 RAM, ROM, EEPROM, CD-ROM 또는 기타 광 디스크 저장 장치, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터 실행가능 명령어 또는 데이터 구조 형태의 원하는 프로그램 코드 수단을 저장하는 데 사용될 수 있고 범용 또는 전용 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체와 같은 컴퓨터 판독가능 저장 매체를 포함할 수 있다.
이 설명에서 또한 이하의 청구 범위에서, "네트워크"는 컴퓨터 시스템들 및/ 또는 모듈들 간의 전자 데이터의 전송을 가능하게 해주는 하나 이상의 데이터 링크로서 정의된다. 정보가 네트워크 또는 다른 통신 접속(유선, 무선, 또는 유선이나 무선의 조합)을 통해 컴퓨터로 전송되거나 제공될 때, 컴퓨터가 이 접속을 컴퓨터 판독가능 매체로 보아도 무방하다. 따라서, 제한이 아닌 예로서, 컴퓨터 판독가능 매체는 컴퓨터 실행가능 명령어 또는 데이터 구조 형태의 원하는 프로그램 코드 수단을 전달하거나 저장하는 데 사용될 수 있고 범용 또는 전용 컴퓨터에 의해 액세스될 수 있는 네트워크 또는 데이터 링크를 포함할 수 있다.
컴퓨터 실행가능 명령어는, 예를 들어, 범용 컴퓨터, 전용 컴퓨터, 또는 전용 처리 장치로 하여금 어떤 기능 또는 일군의 기능을 수행하게 하는 명령어 및 데이터를 포함한다. 컴퓨터 실행가능 명령어는, 예를 들어, 바이너리(binary), 어셈블리어와 같은 중간 형식 명령어, 또는 심지어 소스 코드일 수 있다. 비록 발명 대상이 구조적 특징 및/또는 방법적 동작과 관련하여 기술되어 있지만, 첨부된 청구항들에 정의된 발명 대상이 반드시 상기한 특징 또는 동작으로 한정되는 것은 아니라는 것을 잘 알 것이다. 오히려, 기술된 특징들 및 동작들은 청구항들을 구현하는 예시적인 형태로서 개시된 것이다.
당업자라면 본 발명이 퍼스널 컴퓨터, 데스크톱 컴퓨터, 랩톱 컴퓨터, 핸드헬드 장치, 멀티프로세서 시스템, 마이크로프로세서-기반 또는 프로그램가능 가전 제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 모바일 전화, PDA, 페이저, 기타 등등을 비롯한 많은 유형의 컴퓨터 시스템 구성을 갖는 네트워크 컴퓨팅 환경에서 실시될 수 있다는 것을 잘 알 것이다. 본 발명은 또한 네트워크를 통해 (유 선 데이터 링크, 무선 데이터 링크, 또는 유선 및 무선 데이터 링크의 조합에 의해) 연결되어 있는 로컬 컴퓨터 시스템 및 원격 컴퓨터 시스템 둘다가 작업을 수행하는 분산 시스템 환경에서도 실시될 수 있다. 분산 시스템 환경에서, 프로그램 모듈은 로컬 및 원격 메모리 저장 장치 둘다에 위치할 수 있다.
본 설명에서 또한 이하의 청구항들에서, "드롭 타겟(drop target)"은 드래그 앤 드롭(drag and drop) 동작의 대상인 객체를 받는 모듈로서 정의된다.
본 설명에서 또한 이하의 청구항들에서, "드롭 소스(drop source)"는 드래그 앤 드롭 동작의 대상인 객체를 발생하는 모듈로서 정의된다.
본 설명에서 또한 이하의 청구항들에서, "프록시 드롭 타겟(proxy drop target)"은 드롭 소스와 동일한 세션과 연관된 모듈로서 정의되고 드롭 소스와 드롭 타겟 간의 중개자로서 기능한다. 프록시 드롭 타겟은 터미널 서버 세션(terminal server session)에 걸쳐 드래그 앤 드롭 동작을 용이하게 해주기 위해 실제의 드롭 타겟의 기능을 시뮬레이트할 수 있다. 어떤 실시예들에서, 프록시 드롭 타겟은 드롭 타겟 기능을 시뮬레이트하고 터미널 서버 세션의 관리에 참여하는 터미널 서버 세션 컴포넌트이다.
본 설명에서 또한 이하의 청구항들에서, "프록시 드롭 소스(proxy drop source)"는 드롭 타겟과 동일한 세션과 연관된 모듈로서 정의되고 드롭 소스와 드롭 타겟 간의 중개자로서 기능한다. 프록시 드롭 소스는 터미널 서버 세션에 걸쳐 드래그 앤 드롭 동작을 용이하게 해주기 위해 실제의 드롭 소스의 기능을 시뮬레이트할 수 있다. 어떤 실시예들에서, 프록시 드롭 소스는 드롭 소스 기능을 시뮬레 이트하고 터미널 서버 세션의 관리에 참여하는 터미널 서버 세션 컴포넌트이다.
본 설명에서 또한 이하의 청구항들에서, 드래그 앤 드롭 동작을 용이하게 해주기 위해 네트워크 통신을 통해 교환되는 메시지는 일반적으로 다음과 같이 정의된다.
START_DRAG_DROP 메시지: 드래그 앤 드롭 모달 루프(drag and drop modal loop)를 시작하라는 프록시 드롭 타겟으로부터 프록시 드롭 소스로의 알림. 이 메시지는 제공될 수 있는 형식 데이터(format data)의 이름 및 ID를 포함할 수 있다.
START_DRAG_DROP_RESPONSE 메시지: 드롭 타겟에 대해 드래그 앤 드롭 모달 루프가 시작되었다는 프록시 드롭 소스로부터의 알림.
UPDATE_DROP_EFFECT 메시지: 드롭 타겟에 대한 갱신된 드롭-효과, 즉, 드롭 타겟이 데이터를 사용하여 하고 싶어하는 것을 알려준다.
STOP_DRAG_DROP 메시지: 드래그 앤 드롭 동작을 중단하라는 프록시 드롭 타겟으로부터 프록시 드롭 소스로의 알림.
DO_DRAG_DROP 메시지: 드롭 동작을 시작하라는 프록시 드롭 타겟으로부터 프록시 드롭 소스로의 알림. 네트워크 통신을 통해 전송되는 DO_DRAG_DROP 메시지를 나타내는 Drop 메시지는 OLE(Object Linking And Embedding)를 통해 드롭 타겟으로 전달될 수 있다. Drop 메시지에 응답하여, 드롭 타겟은 프록시 데이터 객체를 요청하고 GetData 메서드를 호출할 수 있다.
DO_DRAG_DROP_RESPONSE 메시지: 드래그 앤 드롭 동작이 완료되었다는 프록시 드롭 소스로부터의 알림(예를 들어, DO_DRAG_DROP 메시지에 응답하여 전송됨)
FORMAT_DATA_REQUEST 메시지: 드롭 타겟에 의해 데이터가 요청될 때 프록시 데이터 객체에 의해 프록시 드롭 타겟으로 전송됨
FORMAT_DATA_RESPONSE 메시지: 프록시 드롭 타겟에 의해 프록시 데이터 객체로 전송되고 요청된 데이터를 포함함.
드래그 앤 드롭 동작을 용이하게 해주기 위해 네트워크를 통해 다른 메시지들도 교환될 수 있다.
도 1a는 객체를 로컬 모듈로부터 원격 모듈로 드래그 앤 드롭하는 것을 용이하게 해주는 예시적인 컴퓨터 아키텍처(100)를 나타낸 것이다. 컴퓨터 시스템(101)(예를 들어, 클라이언트) 및 컴퓨터 시스템(111)(예를 들어, 서버). 컴퓨터 시스템(101, 111)은, 예를 들어, 근거리 통신망(LAN), 원거리 통신망(WAN), 또는 심지어 인터넷과 같은 네트워크에 접속될 수 있다. 따라서, 컴퓨터 시스템(101, 111)에 있는 다양한 컴포넌트들은 서로로부터 데이터를 수신하고 서로에게로 데이터를 전송할 수 있는 것은 물론, 네트워크에 접속된 다른 컴포넌트들로부터 데이터를 수신하고 이들에게로 데이터를 전송할 수 있다. 그에 따라, 이들 컴포넌트는 메시지 관련 데이터를 생성하고 메시지 관련 데이터를 네트워크[예를 들어, 인터넷 프로토콜(IP) 데이터그램 및 IP 데이터그램을 이용하는 기타 상위 계층 프로토콜(TCP(Transmission Control Protocol), RDP(Remote Desktop Protocol), HTTP(Hypertext Transfer Protocol), SMTP(Simple Mail Transfer Protocol), ICA(Independent Computing Architecture), 기타 등등)]를 통해 교환할 수 있다.
도시된 바와 같이, 컴퓨터 시스템(101)은 애플리케이션(102), 클라이언트 모 듈(106), 및 사용자 인터페이스(104)를 포함하고, 컴퓨터 시스템(111)은 애플리케이션(112) 및 서버 모듈(116)을 포함한다. 컴퓨터 시스템(101) 및 컴퓨터 시스템(111)은 네트워크를 통해 설정된 터미널 서버 세션(131)(예를 들어, RDP 세션)을 통해 서로 통신을 하고 있다. 클라이언트 컴포넌트(106) 및 서버 컴포넌트(116)는 터미널 서버 세션(131)의 관리를 용이하게 해주기 위해 상호 연동될 수 있다. 예를 들어, 사용자 인터페이스(104)에서 수신된 사용자 입력을 컴퓨터 시스템(101)으로부터 컴퓨터 시스템(111)으로 전송하는 것, 컴퓨터 시스템(111)에서 사용자 입력을 적절한 원격 애플리케이션으로 전달하는 것, 컴퓨터 시스템(111)에서 원격 애플리케이션으로부터의 출력을 수신하는 것, 원격 애플리케이션 출력을 컴퓨터 시스템(111)으로부터 컴퓨터 시스템(101)으로 전송하는 것, 및 사용자 인터페이스(104)에서 원격 애플리케이션 출력을 출력하는 것이 있다. 따라서, 원격 애플리케이션의 경우(사용자 인터페이스(104)의 관점에서 볼 때), 컴퓨터 시스템(111)에서 처리가 실제로 일어나는 동안 컴퓨터 시스템(101)에서 입력이 수신되고 출력이 제공된다.
터미널 서버 세션 기능을 (예를 들어, RDP 프로토콜을 확장함으로써) 확장하여 애플리케이션들이 애플리케이션 관련 데이터를 터미널 서버 세션(예를 들어, RDP 접속)을 통해 전송할 수 있게 해주기 위해 가상 채널이 사용될 수 있다. 따라서, 입력 및 출력 데이터에 부가하여, 다른 유형의 데이터가 가상 채널을 통해 교환될 수 있다. 예를 들어, 가상 채널(121)은 컴퓨터 시스템(101)으로부터 컴퓨터 시스템(111)으로 드래그 앤 드롭 객체를 전송하도록 구성된 채널일 수 있다. 가상 채널(121)은 클라이언트 컴포넌트(106)에 있는 드래그 앤 드롭 쓰레드를 서버 컴포넌트(116)에 있는 드래그 앤 드롭 쓰레드에 접속시킬 수 있고, 그 역도 마찬가지이다. 그에 따라, 클라이언트 컴포넌트(106) 및 서버 컴포넌트(116)는 컴퓨터 시스템(101)에 있는 적절한 애플리케이션과 컴퓨터 시스템(111)에 있는 적절한 애플리케이션 간에 가상 채널(121)을 통해 데이터를 드래그 앤 드롭하기 위해 상호 연동될 수 있다.
도 1b는 로컬 모듈로부터 원격 모듈로의 드래그 앤 드롭 동작을 나타낸 예시적인 데스크톱 창(123)을 나타낸 것이다. 도시된 바와 같이, 데스크톱 창(123)은 사용자 인터페이스(104)의 일부분이고 애플리케이션 창(102W)과 원격 데스크톱(113)을 포함한다. 애플리케이션 창(102W)은 애플리케이션(102)에 대응하며 또한 애플리케이션(102)에 대한 사용자 입력을 수신하고 애플리케이션(102)으로부터의 출력을 사용자에게 제공하도록 구성되어 있다. 원격 데스크톱(113)은 컴퓨터 시스템(111)으로부터 원격지에 있는 임의의 애플리케이션에 대한 애플리케이션 창을 포함한다. 예를 들어, 애플리케이션 창(112W)은 애플리케이션(112)에 대응하며 또한 애플리케이션(112)에 대한 사용자 입력을 수신하고 애플리케이션(112)으로부터의 출력을 사용자에게 제공하도록 구성되어 있다.
도 2a 내지 도 2c는 로컬 모듈로부터 원격 모듈로 객체를 드래그 앤 드롭하는 예시적인 방법(200)의 플로우차트를 나타낸 것이다. 방법(200)은 컴퓨터 아키텍처(100)에서의 컴포넌트 및 데이터와 관련하여 기술될 것이다.
방법(200)은 로컬 애플리케이션 창으로부터 드래그 앤 드롭 객체를 선택하는 동작(동작 201)을 포함한다. 예를 들어, 컴퓨터 시스템(101)의 사용자는 애플리케이션 창(102W) 내로부터 객체(126)를 선택할 수 있다. 객체(126)는 가상적으로 컴퓨터 시스템에서의 임의의 선택가능한 객체(예를 들어, 텍스트, 그래픽 또는 사운드 데이터의 일부분, 스프레드쉬트 셀, 데이터베이스 엔트리, 전자 메시지, 기타 등등)일 수 있다.
방법(200)은 드래그 앤 드롭 객체가 선택되어 있음을 시각적으로 표현하기 위해 데스크톱 창의 커서를 수정하는 동작(동작 202)을 포함한다. 예를 들어, 객체(126)의 선택 후에, 커서(133)는 드롭 효과 표시자(134)를 포함하도록 수정될 수 있다. 드롭 효과는 선택된 객체를 이동시키는 것, 복사하는 것, 링크시키는 것, 그 객체에 대한 하이퍼링크를 생성하는 것, 및 그 객체에 대한 바로가기를 생성하는 것 중 임의의 것을 포함할 수 있다. 커서(133)는 다른 드롭 효과를 나타내기 위해 다른 방식으로 수정 또는 보완될 수 있다. 예를 들어, 드롭 효과가 복사임을 나타내기 위해 드롭 효과 표시자(134)가 디스플레이될 수 있다.
드롭 효과는 애플리케이션이 이용가능한 드롭 효과들로부터 선택될 수 있다. 커서(133)가 데스크톱 창(123)의 서로 다른 창들 간을 이동할 때, 제공된 드롭 효과 표시자가 변할 수 있다. 예를 들어, 커서(133)가 애플리케이션 창(102W)의 경계 내부에 있는 동안, 애플리케이션(102)에 대한 기본 드롭 효과(예를 들어, 복사)가 디스플레이될 수 있다. 커서(133)가 임의의 애플리케이션 창의 경계 외부에 있을 때, 데스크톱 창(123)(예를 들어, 운영 체제)의 기본 드롭 효과가 디스플레이될 수 있다. 예를 들어, 데스크톱 창(123)의 경우, 드래그 앤 드롭 기능이 전혀 지원 되지 않을지도 모르며, 따라서 커서(133)가 사용자 인터페이스(104)의 이 영역에 있을 때 "허용되지 않음" 심볼로 변환된다. 애플리케이션 창(112W)에 들어갈 때, 애플리케이션(112)에 대한 기본 드롭 효과(예를 들어, 복사)가 디스플레이될 수 있다.
방법(200)은 데스크톱 창 커서가 원격 애플리케이션에 대한 애플리케이션 창의 경계 외부로부터 내부로 이동되었음을 클라이언트 컴포넌트가 검출하는 동작(동작 203)을 포함한다. 예를 들어, 커서(133)가 애플리케이션 창(112W)의 경계 외부로부터 내부로 이동되었음을 클라이언트 컴포넌트(106)가 검출할 수 있다. (도 1b에서 점선은 애플리케이션 창(102W)으로부터 데스크톱 창(123) 및 원격 데스크톱(113)을 통해 애플리케이션 창(112W)으로의 커서(133)의 경로를 나타낸다.)
객체를 로컬 애플리케이션으로부터 원격 애플리케이션으로 전송하도록 드래그 앤 드롭 동작을 설정하는 데 동작(201, 202, 203)이 포함될 수 있다. 커서(134)가 애플리케이션 창(112W) 위에 있을 때, 클라이언트 컴포넌트(106)는 DragEnter 메서드를 호출할 수 있다. DragEnter 메서드를 통해, 클라이언트 컴포넌트(106)(드롭 타겟 프록시로서 기능함)는 객체(126)를 받을 수 있는지를 애플리케이션(102)에 다시 알려줄 수 있다. DragEnter 메서드의 파라미터는 이하의 형식을 가질 수 있다.
HRESULT DragEnter(
IDataObject* pDataObject, // 소스 데이터 객체(예를 들어, 객체(126))
DWORD dwKeyState, // 키보드 및 마우스 상태
POINTL pt, // 커서 위치
DWORD* pdwDropEffect // 결과적인 드롭 효과
)
DragEnter 메서드를 통해, 타겟(또는 프록시 타겟)은 pwdDropEffect 파라미터를 갱신함으로써 가능한 드롭을 받을 수 있는지를 나타낼 수 있다. 이 파라미터는 처음에 소스가 허용하는 일련의 드롭-효과를 포함할 수 있다. 결과적인 드롭 효과는 부분적으로 데이터 객체에 의해 제공되는 형식에 기초하고 있으며, 현재의 키보드 및 마우스 상태에 의해, 또한 아마도 마우스 위치에 의해서도 영향을 받을 수 있다.
이어서, 클라이언트 컴포넌트(106)는 가상 채널(121)(예를 들어, 클립보드 가상 채널)을 통해 서버 컴포넌트(116)로 START_DRAG_DROP 메시지를 전송할 수 있다. START_DRAG_DROP 메시지는 객체(126)의 컨텐츠를 기술하는 형식 이름(format name) 및 애플리케이션(102)의 허용된 드롭 효과를 포함할 수 있다. 이 메시지가 전송된 후에, 컴퓨터 시스템(101)에 있는 입력 핸들러(input handler)는 드래그 앤 드롭 동작이 시작되었음을 (예를 들어, 운영 체제 이벤트를 통해) 통지받는다. 이 이벤트에 응답하여, 입력 핸들러는 키보드 후킹 및 입력 동기화를 디스에이블시킬 수 있다. 드롭이 일어나기 전에 형식 데이터의 요청이 이행될 수 있도록 하기 위해, 객체(126)가 저장될 수 있다.
서버 컴포넌트(116)에서 START_DRAG_DROP 메시지가 수신될 때, 객체(126)의 컨텐츠를 기술하는 형식 이름 및 애플리케이션(102)의 허용된 드롭 효과가 추출된다. 이에 응답하여, 프록시 데이터 객체(136)가 생성되고, 서버 컴포넌트(116)에 대한 창이 생성된다. 이 창은 투명하게(또는 보이지 않게) 될 수 있고, 아주 작은 크기(예를 들어, 1x1 픽셀 크기)일 수 있다. 이 창은 포커스를 받고 z-순서(z-order)의 최상위로 승격된다. 따라서, 입력을 서버 컴포넌트(116)로 보내기 위해 입력이 이 창으로 보내질(클립핑될) 수 있다. 그 자체로서, 입력은 데스크톱 창(123)을 그다지 변경하지 않고 서버 컴포넌트(116)로 보내질 수 있다. 예를 들어, 1x1 투명창은 아마도 사용자가 인지하지 못한다.
수신된 마우스 다운 이벤트(mouse down event)에 응답하여, 서버 컴포넌트(116)(프록시 드롭 소스)는 DoDragDrop 메서드를 호출한다. DoDragDrop 메서드의 파라미터는 다음과 같은 형식을 가질 수 있다.
HRESULT DoDragDrop(
IDataObject* pDataObject, // 소스 데이터 객체
IDropSource* pDropSource, // 드롭 소스 인터페이스
DWORD dwAllowedDropEffects, // 허용된 드롭 효과
DWORD* pdwFinalDropEffect // 최종 드롭 효과
)
DoDragDrop 메서드는 드래그 앤 드롭 동작을 용이하게 해주기 위해 사용되는 모달 루프에 포함될 수 있다. 일반적으로, 드래그 앤 드롭 동작을 시작하기 위해, 컴포넌트가 적절한 파라미터를 사용하여 DoDragDrop을 호출한다. DoDragDrop은 SetCapture API를 사용하여 마우스를 캡처하고 루프에 들어간다.
서버 컴포넌트(116)로 입력을 전달하기 위해, 입력 핸들러는 클라이언트 컴포넌트(106)로 마우스 다운 이벤트를 전송하고, 마우스가 서버 컴포넌트(116)의 창(아마도 작고 투명함)으로 클립핑되었기 때문에, 마우스 다운 이벤트는 서버 컴포넌트(116)의 입력 큐로 전송되고 만다. 마우스 다운 이벤트의 수신은 시스템 전체의 마우스 이벤트 메시지를 수신하도록 OLE(Object Linking and Embedding) 숨겨진 창을 구성하는 데 사용될 수 있다. START_DRAG_DROP_RESPONSE의 수신도 실행 전에 클라이언트 컴포넌트(106)에 있는 메서드들이 검사하는 부울 플래그의 전환을 트리거한다. 이것은 서버 컴포넌트(116)가 활성일 때 메시지를 전송할 가능성을 증가시킨다.
커서(133)가 애플리케이션 창(112W) 상에서 드래그되고 있는 동안에, DragOver 메서드가 호출된다. DoDragDrop 메서드의 파라미터는 다음과 같은 형식을 가질 수 있다.
HRESULT DragOver(
DWORD dwKeyState, // 키보드 및 마우스 상태
POINTL pt, // 커서 위치
DWORD* pdwDropEffect // 결과적인 드롭 효과
)
DragOver의 호출 동안에, 현재의 마우스 위치, 마우스 버튼 상태, 및 키보드 상태가 변경되었는지 검사될 수 있다. 변경이 검출되는 경우, 클라이언트 컴포넌 트(106)의 입력 핸들러는 적절한 마우스 이동, 마우스 버튼 업 또는 다운, 키보드 버튼 업 또는 다운 메시지를 서버 컴포넌트(116)로 전송한다.
서버 컴포넌트(166)(프록시 드롭 소스)는 계속하여 QueryContinueDrag 메서드를 호출할 수 있다. QueryContinueDrag 메서드의 파라미터는 다음과 같은 형식을 가질 수 있다.
HRESULT QueryContinueDrag(
BOOL fEscapePressed, // ESC가 눌려졌으면 TRUE
DWORD dwKeyState // 키보드 및 마우스 상태
)
현재의 키보드 및 마우스 상태를 드롭 소스(또는 프록시 드롭 소스)에 통지하기 위해 QueryContinueDrag 메서드가 사용될 수 있다. 이 입력에 기초하여, 드롭 소스(또는 프록시 드롭 소스)는 드래그를 계속하거나 드래그를 취소하거나 드롭이 일어나도록 허용하기로 결정할 수 있다. 드롭 소스는 HRESULT 반환값을 통해 그의 결정을 나타낸다. 예를 들어, S_OK는 계속을 나타낼 수 있고, DRAGDROP_S_CANCEL은 취소를 나타낼 수 있으며 DRAGDROP_S_DROP은 드롭을 허용하는 것을 나타낼 수 있다. 커서(133)가 애플리케이션 창(112W) 상에 있는 동안, 취소 또는 드롭 동작이 아직 일어나지 않았기 때문에, QueryContinueDrag는 S_OK를 반환할 수 있다.
서버 컴포넌트(116)는 또한 애플리케이션(112)의 드롭 효과(이동, 복사, 링크, 기타)를 클라이언트 컴포넌트(106)로 반환하기 위해 GiveFeedback 메서드를 호 출할 수 있다. GiveFeedback 메서드의 파라미터는 다음과 같은 형식을 가질 수 있다.
HRESULT GiveFeedback(
DWORD dwDropEffect // 현재의 타겟(예를 들어, 애플리케이션(112)) 드롭 효과
)
일반적으로, GiveFeedback 메서드는 적절한 시각적 피드백을 제공할 수 있도록 드롭 소스(또는 프록시 드롭 소스)에 현재의 드롭 효과를 통지한다. 이 시각적 피드백은 HRESULT 반환값을 통해 나타내어진다. S_OK의 값은 소스가 커서를 적절히 설정했음을 의미하는 반면, DRAGDROP_S_USEDEFAULTCURSORS는 소스가 OLE-제공 기본 커서를 사용하는 것으로 만족된다는 것을 나타낸다.
서버 컴포넌트(116)가 GiveFeedback을 호출할 때, 애플리케이션(112)의 드롭 효과는 가상 채널(121)을 통해 UPDATE_DROP_EFFECT 메시지로 서버 컴포넌트(116)로부터 클라이언트 컴포넌트(106)로 전송된다. 클라이언트 컴포넌트(106)는 드롭 효과를 저장하고 드롭 효과를 (예를 들어, DragOver 메서드를 호출함으로써) 애플리케이션(102)으로 반환한다.
컴퓨터 시스템(101)에서의 마우스 및 키보드 상태에 기초하여, 애플리케이션(102)은 궁극적으로 드래그 동작을 취소하기로 또는 드롭이 일어나는 것을 허용하기로 결정할 수 있다. 따라서, 어떤 실시예에서, 드래그 동작이 취소된다(따라서 드롭이 일어나지 않는다). 취소가 행해진 경우, 클라이언트 컴포넌트(106)(프 록시 드롭 타겟)는 DragLeave 메서드를 통해, 예를 들어, 다음과 같은 형식을 통지받는다.
HRESULT DragLeave();
서버 컴포넌트(116)에 대한 이벤트 핸들러는 STOP_DRAG_DROP 메시지에 나타내어진 취소 결과를 저장할 수 있다. 따라서, 그 다음에 QueryContinueDrag이 호출될 때, 이는 DRAGDROP_S_CANCEL를 반환하여, 드래그 동작이 컴퓨터 시스템(111)에서 끝나게 한다.
다른 실시예들에서, 드롭이 일어난다. 그에 따라, 방법(200)은 드롭 동작을 개시하는 동작(동작 204)을 포함한다. 예를 들어, 애플리케이션(102)은 객체(126)를 애플리케이션(112)으로 전송하기 위해 드롭 동작을 개시할 수 있다. 사용자는 드롭이 개시되도록 하기 위해 입력 장치를 조작할 수 있다. 예를 들어, 사용자는 커서(133)가 애플리케이션 창(112W) 위에 있는 동안에 마우스의 좌측 마우스 버튼을 놓을 수 있다.
방법(200)은 드래그 앤 드롭 객체가 원격 애플리케이션으로 전송될 것임을 나타내는 드롭 통지를 수신하는 동작(동작 205)을 포함한다. 예를 들어, 클라이언트 컴포넌트(106)는 대기 중인 드래그 앤 드롭 동작의 일부로서 객체(126)가 애플리케이션(112)으로 전송될 것임을 나타내는 드롭 통지를 수신할 수 있다. 방법(200)은, 데스크톱 커서 창의 좌표 위치와 함께, 드래그 앤 드롭 객체를 전송하라는 요청을 전송하는 동작(동작 206)을 포함한다. 예를 들어, 드롭 통지를 수신한 것에 응답하여, 클라이언트 컴포넌트(106)는 애플리케이션(112)으로의 객 체(126)의 전송을 요청하기 위해 DO_DRAG_DROP 메시지를 서버 컴포넌트(116)로 전송할 수 있다. DO_DRAG_DROP 메시지는 가상 채널(121)을 통해 전송될 수 있고 커서(133)의 좌표 위치를 포함할 수 있다.
방법(200)은 드래그 앤 드롭 객체를 전송하라는 요청 및 데스크톱 창 커서의 좌표 위치를 수신하는 동작(동작 207)을 포함한다. 예를 들어, 서버 컴포넌트(116)는 애플리케이션(112)으로의 객체(126)의 전송을 요청하는 DO_DRAG_DROP 메시지를 수신할 수 있다. DO_DRAG_DROP 메시지가 서버 컴포넌트(116)에 도착할 때, 이벤트 핸들러는 드롭이 일어날 것이라는 표시를 저장한다. 따라서, 그 다음에 QueryContinueDrag가 호출될 때, QueryContinueDrag는 DRAGDROP_S_DROP(드롭이 일어날 것임을 나타냄)을 반환한다. 그렇지만, 이 값을 반환하기 전에, GIVE_FOCUS 메시지가 클라이언트 컴포넌트(106)로 전송될 수 있다.
GIVE_FOCUS 메시지의 수신 시에, 클라이언트 컴포넌트(106)는 SetForegroundWindow API를 호출함으로써 입력 포커스를 획득할 수 있다.
서버 컴포넌트(116)는 또한 가상 채널(121)을 통해 클라이언트 컴포넌트(106)로 DO_DRAG_DROP_RESPONSE 메시지를 전송할 수 있다.
방법(200)은 드래그 앤 드롭 객체 전송 통지를 대응하는 애플리케이션으로 전달하는 동작(동작 208)을 포함한다. 예를 들어, 서버 컴포넌트(116)는, 커서(133)(예를 들어, 애플리케이션 창(112W) 위에 있음)의 좌표 위치에 기초하여, 객체(126)에 대한 드롭 통지를 애플리케이션(112)으로 전달할 수 있다. 방법(200)은 드래그 앤 드롭 객체 전송 통지를 수신하는 동작(동작 209)을 포함한다. 예를 들어, 애플리케이션(112)은 서버 컴포넌트(116)로부터 객체(126)에 대한 드롭 통지를 수신할 수 있다.
방법(200)은 드래그 앤 드롭 객체를 요청하는 동작(동작 210)을 포함한다. 예를 들어, 애플리케이션(112)은 서버 컴포넌트(116)에 객체(126)를 요청할 수 있다. 방법(200)은 대응하는 애플리케이션으로부터 드래그 앤 드롭 객체에 대한 요청을 수신하는 동작(동작 211)을 포함한다. 예를 들어, 서버 컴포넌트(116)는 애플리케이션(112)으로부터 객체(126)에 대한 요청을 수신할 수 있다. 서버 컴포넌트(116)는 프록시 객체(136)에 대한 GetData 호출을 검출할 수 있다.
방법(200)은 드래그 앤 드롭 객체에 대한 요청을 클라이언트 컴포넌트로 전송하는 동작(동작 212)을 포함한다. 예를 들어, 서버 컴포넌트(116)는 가상 채널(121)을 통해 FORMAT_DATA_REQUEST 메시지를 클라이언트 컴포넌트(106)로 전송할 수 있다. FORMAT_DATA_REQUEST 메시지는 애플리케이션(102)에 대한 객체(126)를 요청한다. 방법(200)은 서버 컴포넌트로부터 드래그 앤 드롭 객체에 대한 요청을 수신하는 동작(동작 213)을 포함한다. 예를 들어, 클라이언트 컴포넌트(106)는 가상 채널(121)을 통해 서버 컴포넌트(116)로부터 FORMAT_DATA_REQUEST 메시지를 수신할 수 있다.
방법(200)은 드래그 앤 드롭 객체에 대한 요청을 로컬 애플리케이션으로 전달하는 동작(동작 214)을 포함한다. 예를 들어, 클라이언트 컴포넌트(106)는 객체(126)에 대한 요청을 애플리케이션(102)으로 전달할 수 있다. 방법(200)은 드래그 앤 드롭 객체에 대한 요청을 수신하는 동작(동작 215)을 포함한다. 예를 들어, 애플리케이션(102)은 객체(126)에 대한 요청을 수신할 수 있다.
어떤 실시예들에서, FORMAT_DATA_REQUEST 메시지에 대한 이벤트 핸들러는 DragEnter 메서드에 저장된 드래그 앤 드롭 객체에 대한 참조를 사용하여 GetData 호출을 수행한다. 이 형식 데이터가 검색되면, 이는 적절히 인코딩된다.
방법(200)은 드래그 앤 드롭 객체를 전송하는 동작(동작 216)을 포함한다. 예를 들어, 반환된 형식 및 드롭 효과가 수신된 후에, 애플리케이션(102)은 객체(126)를 클라이언트 컴포넌트(106)로 전송할 수 있다. 방법(200)은 로컬 애플리케이션으로부터 드래그 앤 드롭 객체를 수신하는 동작(동작 217)을 포함한다. 예를 들어, 클라이언트 컴포넌트(217)는 애플리케이션(102)으로부터 객체(126)를 수신할 수 있다.
방법(200)은 드래그 앤 드롭 객체를 서버 컴포넌트로 전송하는 동작(동작 218)을 포함한다. 예를 들어, 클라이언트 컴포넌트(106)는 객체(126)로부터의 데이터를 포함하는 FORMAT_DATA_RESPONSE 메시지를 가상 채널(121)을 통해 서버 컴포넌트(116)로 전송할 수 있다. 방법(200)은 클라이언트 컴포넌트로부터 드래그 앤 드롭 객체를 수신하는 동작(동작 219)을 포함한다. 예를 들어, 서버 컴포넌트(116)는 객체(126)로부터의 데이터를 포함하는 FORMAT_DATA_RESPONSE 메시지를 가상 채널(121)을 통해 클라이언트 컴포넌트(106)로부터 수신할 수 있다.
방법(200)은 드래그 앤 드롭 객체를 원격 애플리케이션으로 전달하는 동작(동작 220)을 포함한다. 예를 들어, 서버 컴포넌트(116)는 객체(126)로부터의 데이터를 애플리케이션(112)으로 전달할 수 있다. 방법(200)은 드래그 앤 드롭 객체 를 수신하는 동작(동작 221)을 포함한다. 예를 들어, 애플리케이션(112)은 객체(126)으로부터 데이터를 수신할 수 있다. 그에 따라, 선택된 드롭 효과에 따라, 객체(126)로부터의 데이터가 애플리케이션(102)으로부터 애플리케이션(112)으로 이동되거나, 복사되거나, 링크되거나, 하이퍼링크되거나, 바로가기될 수 있다.
어떤 실시예들에서, 적절히 인코딩된 데이터가 이어서 전선을 통해 FORMAT_DATA_RESPONSE 메시지로 전송된다. 이 FORMAT_DATA_RESPONSE 메시지가 서버 컴포넌트(116)에서 수신될 때, 적절한 이벤트 핸들러가 호출되고 형식화된 데이터가 추출되어 디코딩된다. 이벤트 핸들러가 실행을 완료하면, 형식화된 데이터가 드롭 타겟으로 반환되고, 그 결과 로컬 드롭 타겟의 Drop 메서드 호출이 완료된다.
Drop 호출이 끝나면, DoDragDrop 루프가 종료되고, 드롭 효과가 (예를 들어, 서버 컴포넌트(116)로) 반환된다. PerformedDropEffect 및 LogicalPerformedDropEffect가 있는지 드래그 앤 드롭 객체가 질의된다. 이들 2가지 형식은 물론 최종적인 드롭 효과 및 DoDragDrop HRESULT가 DO_DRAG_DROP_RESPONSE 메시지로 로컬적으로 클라이언트 컴포넌트(106)로 전송된다. 클라이언트 컴포넌트(106)는 이들 결과를 그의 프록시 Drop 메서드로 반환한다. DO_DRAG_DROP_RESPONSE 메시지의 수신 시에, 클라이언트 컴포넌트(106)에 있는 이벤트 핸들러는 이 결과를 저장한다. 클라이언트 컴포넌트(106)의 프록시 Drop 메서드는 실행을 계속하여, 반환된 형식으로 객체(126)를 초기화하고 드롭 효과 및 HRESULT를 OLE 서브시스템으로 반환한다.
클라이언트 컴포넌트(106)(프록시 드롭 타겟) 및 서버 컴포넌트(116)(프록시 드롭 소스)는 방법(200)의 구현을 용이하게 해주기 위해 다양한 다른 방식들로 구성될 수 있다.
예를 들어, 클라이언트 컴포넌트(106)(프록시 드롭 타겟)는 드래그 앤 드롭 모달 루프가 언제 시작되어야 하는지를 나타내도록 구성될 수 있다. 클라이언트 컴포넌트(106)는 START_DRAG_DROP 메시지를 가상 채널(121)을 통해 서버 컴포넌트(116)로 전송할 수 있다. START_DRAG_DROP이 처리될 때, 서버 컴포넌트(116)(프록시 드롭 소스)는 애플리케이션(112)(드롭 타겟)에 대한 드래그 앤 드롭 모달 루프를 시작할 수 있다.
클라이언트 컴포넌트(106)는 또한 애플리케이션(102)(드롭 소스)가 지원할 수 있는 형식들의 목록을 전송하도록 구성될 수 있다. DragEnter 메서드에 대한 파라미터들 중 하나는 애플리케이션(102)이 제공할 수 있는 데이터를 포함하는 데이터 객체에 대한 포인터이다. 형식 열거자(format enumerator)를 사용하여, 형식 이름이 이 데이터 객체로부터 추출되고, 인코딩되며, 이어서 프록시 데이터 객체가 서버 컴포넌트(116)에 의해 생성될 수 있도록 START_DRAG_DROP 메시지에 대한 파라미터로서 전송된다.
클라이언트 컴포넌트(106)는 또한 원격 마우스 위치, 키 상태 및 키보드 상태를 갱신하도록 구성될 수 있다. 드래그 앤 드롭 모달 루프를 시작하기 바로 전에, 서버 컴포넌트(116)는 가상 채널(121)을 통해 START_DRAG_DROP_RESPONSE 메시지를 전송할 수 있다. 이 메시지가 클라이언트 컴포넌트(106)에 의해 수신될 때, 현재의 마우스 위치, 마우스 키 상태 및 키보드 상태의 갱신을 서버 컴포넌트(116) 로 전송하기 시작하기 위해, 클라이언트 컴포넌트(106)의 DragOver 메서드가 해제된다. 마우스 및 키보드 둘다에 대한 키 상태는 DragOver 메서드에 전달된 파라미터로부터 획득된다. 이들 갱신은 입력 포커스 및 마우스 캡처를 갖는 애플리케이션(102)을 보상한다.
클라이언트 컴포넌트(106)는 또한 서버 컴포넌트(116)로부터 수신된 최근의 드롭 효과를 반환하도록 구성될 수 있다. 애플리케이션(112)이 드롭 효과를 변경할 때마다, 서버 컴포넌트(116)는 UPDATE_DROP_EFFECT 메시지를 클라이언트 컴포넌트(106)로 전송할 수 있다. DragOver 처리의 일부로서, 애플리케이션(102)에 현재의 드롭 효과를 알려주기 위해 갱신된 드롭 효과가 컴퓨터 시스템(101)의 OLE 서브시스템에 반환된다.
클라이언트 컴포넌트(106)는 또한 현재의 드래그 동작의 상태에 관하여 서버 컴포넌트(116)를 갱신하도록 구성될 수 있다. DragLeave 메서드가 호출된 경우, 애플리케이션(102)은 드래그 앤 드롭 동작을 취소하기로 결정한다. 그에 따라, 애플리케이션(112)은 마찬가지로 하여 그의 DragLeave 메서드를 호출해야만 한다. 클라이언트 컴포넌트(106)는 애플리케이션(112)으로 하여금 그의 DragLeave 메서드를 호출하게 하기 위해 적절한 정보를 서버 컴포넌트(116)에 중계할 수 있다.
클라이언트 컴포넌트(106)는 또한 드롭이 일어나는 경우 객체(126)에 대한 포인터를 저장하도록 구성될 수 있다. 드롭이 일어나는 경우, 애플리케이션(112)은 객체(126)를 요청할 수 있다. 객체(126)가 반환될 수 있도록 돕기 위해, 클라이언트 컴포넌트(106)는 Drop 호출에서 수신되는 객체(126)에 대한 포인터를 저장 할 수 있다. 따라서, 객체에 대한 요청이 FORMAT_DATA_REQUEST 메시지의 형태로 수신될 때, 클라이언트 컴포넌트(106)는 저장된 객체(126)에 대해 GetData 호출을 수행함으로써 적절한 형식 데이터를 제공할 수 있고 이 데이터를 FORMAT_DATA_RESPONSE 메시지로 반환할 수 있다.
서버 컴포넌트(116)는 정확한 형식 이름을 광고하는 프록시 데이터 객체를 생성하도록 구성될 수 있다. START_DRAG_DROP 메시지 파라미터들 중 하나가 애플리케이션(112)이 제공할 수 있는 형식들의 목록이다. 원격 모달 루프가 시작되기 전에, 프록시 데이터 객체가 생성되고 이들 형식 이름으로 채워진다. 생성된 데이터 객체는 이어서 DoDragDrop 호출에서 파라미터로서 컴퓨터 시스템(111)의 OLE 서브시스템에 전달된다. 따라서, 원격 세션 내의 드롭 타겟들은 형식을 질의할 수 있고 드롭이 일어나는 경우 그 데이터를 검색할 수 있다.
서버 컴포넌트(116)는 또한 현재의 드롭 효과를 클라이언트 컴포넌트(106)에 중계하도록 구성될 수 있다. 애플리케이션(112)이 컴퓨터 시스템(111)의 OLE 서브시스템에 반환하는 드롭 효과가 GiveFeedback 호출의 일부로서 클라이언트 컴포넌트(106)에 전달된다. 이 드롭 효과는, 클라이언트 컴포넌트(106)가 그의 DragOver 메서드가 호출될 때 이 드롭 효과를 반환할 수 있도록, 가상 채널(121)을 통해 UPDATE_DROP_EFFECT 메시지로 컴퓨터 시스템(101)에 전송된다.
서버 컴포넌트(116)는 또한 클라이언트 컴포넌트(106)에 의해 지시될 때 취소 또는 드롭을 개시하도록 구성될 수 있다. 컴퓨터 시스템(101)에서 드롭 또는 취소 동작이 행해질 때, 클라이언트 컴포넌트(106)의 Drop 또는 DragLeave 메서드 가 호출될 수 있다. 이 일이 일어나는 경우, 그 다음에 QueryContinueDrag가 호출될 때, 정확한 HRESULT가 컴퓨터 시스템(111)의 OLE 서브시스템에 반환될 수 있도록, 메시지가 서버 컴포넌트(116)로 전송된다. STOP_DRAG_DROP 메시지가 수신된 경우, DRAGDROP_S_CANCEL이 반환된다. DO_DRAG_DROP 메시지가 수신된 경우, DRAGDROP_S_DROP이 반환된다. 그렇지 않은 경우, S_OK가 반환되고 모달 루프가 계속된다.
START_DRAG_DROP 메시지가 수신될 때, 프록시 객체(136)가 생성될 수 있다. 프록시 객체(136)는 기본적으로 객체(126)에 의해 광고되는 동일한 형식을 반환함으로써 객체(126)를 모의(mimic)한다. 프록시 객체(136)에 데이터가 요청될 때, 프록시 객체(136)는 FORMAT_DATA_REQUEST 메시지를 컴퓨터 시스템(101)에게로 전송한다. 클라이언트 컴포넌트(106)는 이어서 객체(126)로부터 데이터를 검색할 수 있고 이 데이터를 다시 FORMAT_DATA_RESPONSE 메시지로 전송한다.
그에 따라, 본 발명의 실시예들은 원격 모듈로부터 로컬 모듈로 객체를 드래그 앤 드롭하는 것을 용이하게 해줄 수 있다.
도 3a는 객체를 원격 데스크톱 모듈로부터 로컬 데스크톱 모듈로 드래그 앤 드롭하는 것을 용이하게 해주는 예시적인 컴퓨터 아키텍처(300)를 나타낸 것이다. 컴퓨터 시스템(301)(예를 들어, 클라이언트) 및 컴퓨터 시스템(311)(예를 들어, 서버). 컴퓨터 시스템(301, 311)은, 예를 들어, 근거리 통신망(LAN), 원거리 통신망(WAN), 또는 심지어 인터넷과 같은 네트워크에 접속될 수 있다. 따라서, 컴퓨터 시스템(301, 311)에 있는 다양한 컴포넌트들은 서로로부터 데이터를 수신하고 서로 에게로 데이터를 전송할 수 있는 것은 물론, 네트워크에 접속된 다른 컴포넌트들로부터 데이터를 수신하고 이들에게로 데이터를 전송할 수 있다. 그에 따라, 이들 컴포넌트는 메시지 관련 데이터를 생성하고 메시지 관련 데이터를 네트워크[예를 들어, 인터넷 프로토콜(IP) 데이터그램 및 IP 데이터그램을 이용하는 기타 상위 계층 프로토콜(TCP(Transmission Control Protocol), RDP(Remote Desktop Protocol), HTTP(Hypertext Transfer Protocol), SMTP(Simple Mail Transfer Protocol), ICA(Independent Computing Architecture), 기타 등등)]를 통해 교환할 수 있다.
도시된 바와 같이, 컴퓨터 시스템(301)은 애플리케이션(302), 클라이언트 모듈(306), 및 사용자 인터페이스(304)를 포함하고, 컴퓨터 시스템(311)은 애플리케이션(312) 및 서버 모듈(316)을 포함한다. 컴퓨터 시스템(301) 및 컴퓨터 시스템(311)은 네트워크를 통해 설정된 터미널 서버 세션(331)(예를 들어, RDP 세션)을 통해 서로 통신을 하고 있다. 클라이언트 컴포넌트(306) 및 서버 컴포넌트(316)는 터미널 서버 세션(331)의 관리를 용이하게 해주기 위해 상호 연동될 수 있다. 예를 들어, 사용자 인터페이스(304)에서 수신된 사용자 입력을 컴퓨터 시스템(301)으로부터 컴퓨터 시스템(311)으로 전송하는 것, 컴퓨터 시스템(311)에서 사용자 입력을 적절한 원격 애플리케이션으로 전달하는 것, 컴퓨터 시스템(311)에서 원격 애플리케이션으로부터의 출력을 수신하는 것, 원격 애플리케이션 출력을 컴퓨터 시스템(311)으로부터 컴퓨터 시스템(301)으로 전송하는 것, 및 사용자 인터페이스(304)에서 원격 애플리케이션 출력을 출력하는 것이 있다. 따라서, 원격 애플리케이션의 경우(사용자 인터페이스(304)의 관점에서 볼 때), 컴퓨터 시스템(311)에서 처리 가 실제로 일어나는 동안 컴퓨터 시스템(301)에서 입력이 수신되고 출력이 제공된다.
가상 채널(321)은 컴퓨터 시스템(311)으로부터 컴퓨터 시스템(301)으로 드래그 앤 드롭 객체를 전송하도록 구성된 채널일 수 있다. 가상 채널(321)은 클라이언트 컴포넌트(306)에 있는 드래그 앤 드롭 쓰레드를 서버 컴포넌트(316)에 있는 드래그 앤 드롭 쓰레드에 접속시킬 수 있으며, 그 역도 마찬가지이다. 그에 따라, 클라이언트 컴포넌트(306) 및 서버 컴포넌트(316)는 컴퓨터 시스템(301)에 있는 적절한 애플리케이션과 컴퓨터 시스템(311)에 있는 적절한 애플리케이션 간에 가상 채널(321)을 통해 드래그 앤 드롭 데이터를 전송하기 위해 상호 연동될 수 있다.
도 3b는 로컬 모듈로부터 원격 모듈로의 드래그 앤 드롭 동작을 나타낸 예시적인 데스크톱 창(323)을 나타낸 것이다. 도시된 바와 같이, 데스크톱 창(323)은 사용자 인터페이스(304)의 일부분이고 애플리케이션 창(302W)과 원격 데스크톱(313)을 포함한다. 애플리케이션 창(302W)은 애플리케이션(302)에 대응하며 또한 애플리케이션(302)에 대한 사용자 입력을 수신하고 애플리케이션(302)으로부터의 출력을 사용자에게 제공하도록 구성되어 있다. 원격 데스크톱(313)은 컴퓨터 시스템(311)으로부터 원격지에 있는 임의의 애플리케이션에 대한 애플리케이션 창을 포함한다. 예를 들어, 애플리케이션 창(312W)은 애플리케이션(312)에 대응하며 또한 애플리케이션(312)에 대한 사용자 입력을 수신하고 애플리케이션(312)으로부터의 출력을 사용자에게 제공하도록 구성되어 있다.
도 4a 내지 도 4c는 원격 모듈로부터 로컬 모듈로 객체를 드래그 앤 드롭하 는 예시적인 방법(400)의 플로우차트를 나타낸 것이다. 방법(400)은 컴퓨터 아키텍처(300)에서의 컴포넌트 및 데이터와 관련하여 기술될 것이다.
방법(400)은 원격 애플리케이션 창으로부터 드래그 앤 드롭 객체를 선택하는 동작(동작 401)을 포함한다. 예를 들어, 컴퓨터 시스템(301)의 사용자는 애플리케이션 창(312W) 내로부터 객체(326)를 선택할 수 있다. 객체(326)는 가상적으로 컴퓨터 시스템에서의 임의의 선택가능한 객체(예를 들어, 텍스트, 그래픽 또는 사운드 데이터의 일부분, 스프레드쉬트 셀, 데이터베이스 엔트리, 전자 메시지, 기타 등등)일 수 있다.
방법(400)은 드래그 앤 드롭 객체가 선택되어 있음을 시각적으로 표현하기 위해 데스크톱 창 커서를 수정하는 동작(동작 402)을 포함한다. 예를 들어, 객체(326)의 선택 후에, 커서(333)는 드롭 효과 표시자(334)를 포함하도록 수정될 수 있다. 드롭 효과는 선택된 객체를 이동시키는 것, 복사하는 것, 링크시키는 것, 그 객체에 대한 하이퍼링크를 생성하는 것, 및 그 객체에 대한 바로가기를 생성하는 것 중 임의의 것을 포함할 수 있다. 커서(333)는 다른 드롭 효과를 나타내기 위해 다른 방식으로 수정 또는 보완될 수 있다. 예를 들어, 드롭 효과가 이동임을 나타내기 위해 드롭 효과 표시자(334)가 디스플레이될 수 있다.
드롭 효과는 애플리케이션이 이용가능한 드롭 효과들로부터 선택될 수 있다. 커서(333)가 데스크톱 창(323)의 서로 다른 창들 간을 이동할 때, 제공된 드롭 효과 표시자가 변할 수 있다. 예를 들어, 커서(333)가 애플리케이션 창(312W)의 경계 내부에 있는 동안, 애플리케이션(312)에 대한 기본 드롭 효과(예를 들어, 이동) 가 디스플레이될 수 있다. 커서(333)가 임의의 애플리케이션 창의 경계 외부에 있을 때, 데스크톱 창(323)(예를 들어, 운영 체제)의 기본 드롭 효과가 디스플레이될 수 있다. 예를 들어, 데스크톱 창(323)의 경우, 드래그 앤 드롭 기능이 전혀 지원되지 않을지도 모르며, 따라서 커서(333)가 사용자 인터페이스(304)의 이 영역에 있을 때 "허용되지 않음" 심볼로 변환된다. 애플리케이션 창(302W)에 들어갈 때, 애플리케이션(302)에 대한 기본 드롭 효과(예를 들어, 이동)가 디스플레이될 수 있다.
방법(400)은 데스크톱 창 커서가 원격 애플리케이션 창의 경계 외부로부터 내부로 이동되었음을 클라이언트 컴포넌트가 검출하는 동작(동작 403)을 포함한다. 예를 들어, 커서(333)가 애플리케이션 창(302W)의 경계 외부로부터 내부로 이동되었음을 클라이언트 컴포넌트(306)가 검출할 수 있다. (도 3b에서 점선은 애플리케이션 창(312W)로부터 데스크톱 창(313) 및 원격 데스크톱(323)을 통해 애플리케이션 창(302W)로의 커서(333)의 경로를 나타낸다.)
방법(400)은 데스크톱 창 커서가 이동되었음을 나타내는 메시지를 전송하는 동작(동작 404)을 포함한다. 예를 들어, 클라이언트 컴포넌트(306)는 MOUSE_HAS_LEFT 메시지를 가상 채널(321)을 통해 서버 컴포넌트(316)로 전송할 수 있다. MOUSE_HAS_LEFT 메시지는 커서(333)가 애플리케이션 창(312W)의 외부로(및/또는 원격 데스크톱(313)의 외부로) 이동되었음을 나타낸다. 방법(400)은 데스크톱 창 커서가 이동되었음을 나타내는 메시지를 수신하는 동작(동작 405)을 포함한다. 예를 들어, 서버 컴포넌트(316)는 가상 채널(321)을 통해 클라이언트 컴포넌 트(306)로부터 MOUSE_HAS_LEFT 메시지를 수신할 수 있다.
방법(400)은 데스크톱 창 커서의 움직임이 대기 중인 드래그 앤 드롭 동작과 연관되어 있는지를 결정하는 동작(동작 406)을 포함한다. 예를 들어, 서버 컴포넌트(316)는 애플리케이션 창(313)의 경계 외부에서 움직이는 커서가 객체(326)에 대한 드래그 앤 드롭 동작과 연관되어 있는지를 결정할 수 있다. 서버 컴포넌트(316)는 실제의 드래그 앤 드롭 동작이 대기 중인지 또는 마우스가 다른 이유로 움직이고 있는지를 질의하기 위해 COM(Common Object Model) API를 호출할 수 있다.
동작(401, 402, 403, 404 및 405)은 원격 모듈로부터 로컬 모듈로의 드래그 앤 드롭 동작을 설정하는 것의 일부로서 포함될 수 있다. 예를 들어, 사용자가 클라이언트 창에서 마우스 버튼을 누를 때, 입력 핸들러 창에 의해 마우스가 캡처된다. 마우스가 드래그되는 중인 동안, 마우스가 여전히 입력 핸들러 창 위에 있는지를 결정하기 위해 마우스가 반복적으로 검사될 수 있다. 마우스가 입력 핸들러 창 위에 있지 않은 경우, 원격 모듈로부터 로컬 모듈로 드래그가 시작되었을 가능성이 있다. 마우스가 원격 모듈을 벗어났음이 검출된 후에, MOUSE_HAS_LEFT 메시지가 가상 채널을 통해 서버 컴포넌트(316)로 전송된다.
이 메시지를 수신할 시에, 서버 컴포넌트(316)는 천이되어 프록시 드롭 타겟으로 된다. 프록시 드롭 타겟으로의 천이는 적어도 2개의 서로 다른 메카니즘을 사용하여 달성될 수 있다. 한 메카니즘은 전체 세션 화면 영역을 채우도록 알파-블렌딩된 드래그 앤 드롭 창을 최대화하고 이어서 알파-블렌딩된 드래그 앤 드롭 창을 z-순서의 최상위로 되게 하는 것을 포함한다. 다른 메카니즘은 OLE API를 호출하는 것을 포함한다.
프록시 드롭 타겟 서버로 천이한 후에, 컴포넌트(316)는 원격 세션에서 프록시 드롭 타겟으로서 기능할 수 있다. 예를 들어, 프록시 드롭 타겟으로 될 때, 서버 컴포넌트(316)에 대한 DragEnter 메서드가 호출될 수 있다. DragEnter 메서드는 객체(326)가 저장되게 하고 START_DRAG_DROP 메시지가 클라이언트 컴포넌트(306)로 전송되게 한다.
START_DRAG_DROP 메시지가 클라이언트 컴포넌트(306)에 있는 이벤트 핸들러에 의해 처리될 수 있다. 이벤트 핸들러는 형식 이름 및 허용된 드롭 효과를 추출할 수 있다. 이에 응답하여, 클라이언트 컴포넌트(306)는 컴퓨터 시스템(301)에 대한 입력 핸들러에 로컬 드래그 앤 드롭 루프가 시작될 것임을 알려주기 위해 DO_MODAL_LOOP 이벤트를 개시할 수 있다. DO_MODAL_LOOP 이벤트를 수신할 시에, 입력 핸들러는 프록시 객체(328)를 작성하고 드래그 앤 드롭 통지 이벤트를 클라이언트 컴포넌트(306)로 리디렉션함으로써, 클라이언트 컴포넌트(306)로 하여금 프록시 드롭 소스로 천이하게 한다.
드래그 앤 드롭 쓰레드 상의 이벤트 싱크를 디스에이블시키고 클라이언트 컴포넌트(306)에 대해 특별히 생성된 이벤트 싱크를 인에이블시킴으로써 드래그 앤 드롭 통지 이벤트가 리디랙션될 수 있다. DoDragDrop 모달 루프가 시작되기 전에, 드래그 앤 드롭 쓰레드는 루프가 시작될 것임을 알려주는 신호를 받을 수 있다. 이에 응답하여, 클라이언트 컴포넌트(306)는 START_DRAG_DROP_RESPONSE 메시지를 서버 컴포넌트(316)에 전송할 수 있다. START_DRAG_DROP_RESPONSE 메시지의 수신 시에, 드래그 앤 드롭 메시지(예를 들어, DO_DRAG_DROP 및 STOP_DRAG_DROP 등)를 클라이언트 컴포넌트(306)에 전송하기 위해 서버 컴포넌트(316)가 해제된다.
그렇지만, 마우스가 애플리케이션 창(302W)에서 드래그되고 있는 동안, 다양한 마우스 및 키보드 버튼 이벤트가 관심을 끌 수 있다. 애플리케이션(312)(원격 애플리케이션)에 대한 QueryContinueDrag는 이 정보에 대한 갱신을 획득하는 데 사용될 수 있다. 현재의 입력 상태로 서버 컴포넌트(316)를 갱신하기 위해, 입력 핸들러는 적절한 마우스 버튼 업 또는 다운 및 키보드 버튼 업 또는 다운을 전송한다. UPDATE_DROP_EFFECT 메시지를 이용함으로써 애플리케이션(302)에 의해 반환된 드롭 효과로 서버 컴포넌트(316)를 갱신하기 위해 클라이언트 컴포넌트(306)에 대해 GiveFeedback 메서드가 호출된다. 컴퓨터 시스템(311)에서, 드롭 효과가 저장되고 나중에 서버 컴포넌트(316)에 의해 호출되는 DragOver 메서드에서 반환된다.
컴퓨터 시스템(301)에서의 마우스 및 키보드 상태에 기초하여, 애플리케이션(312)은 궁극적으로 드래그 동작을 취소하거나 드롭이 일어나도록 허용하기로 결정할 수 있다. 따라서, 어떤 실시예들에서, 드래그 동작이 취소된다(따라서 드롭이 일어나지 않는다). 취소가 있는 경우, 서버 컴포넌트(316)(프록시 드롭 타겟)는 DragLeave 메서드를 통해 통보를 받는다.
취소에 응답하여, 서버 컴포넌트(316)는 또한 STOP_DRAG_DROP 메시지를 클라이언트 컴포넌트(306)로 전송할 수 있다. STOP_DRAG_DROP 메시지가 전송된 후에, 객체(326)가 해제될 수 있다. 클라이언트 컴포넌트(306)에 대한 이벤트 핸들러는 STOP_DRAG_DROP 메시지에 나타내어져 있는 취소 결과를 저장할 수 있다. 따라서, 그 다음에 QueryContinueDrag이 호출될 때, 이는 DRAGDROP_S_CANCEL를 반환하여, 컴퓨터 시스템(301)에서 드래그 동작이 종료되게 한다.
다른 실시예들에서, 드롭이 일어난다. 사용자가 로컬 애플리케이션 창(302W)에서 마우스를 이리저리로 움직일 때, 사용자는 마우스 버튼에서 손을 놓을 수 있다. 마우스 버튼에서 손을 놓을 때, 클라이언트 컴포넌트(306)는 손을 놓은 것을 가상 채널(321)을 통해 서버 컴포넌트(316)에 알려준다. 이에 응답하여, 서버 컴포넌트(316)는 애플리케이션(302)으로의 객체(326)의 전송을 요청하기 위해 DO_DRAG_DROP 메시지를 클라이언트 컴포넌트(306)에 전송할 수 있다. 서버 컴포넌트(316)는 DO_DRAG_DROP 메시지의 표시를 애플리케이션(302)으로 전송할 수 있다. 클라이언트 컴포넌트(306)는 DO_DRAG_DROP_RESPONSE 메시지를 가상 채널(321)을 통해 서버 컴포넌트(316)로 전송할 수 있다.
방법(400)은 드래그 앤 드롭 객체에 대한 질의를 전송하는 동작(동작 407)을 포함한다. 예를 들어, DO_DRAG_DROP 메시지의 표시에 응답하여, 애플리케이션(302)은 프록시 객체(328)에 대해 질의를 할 수 있다. 방법(400)은 로컬 애플리케이션으로부터 드래그 앤 드롭 객체에 대한 질의를 수신하는 동작(동작 408)을 포함한다. 예를 들어, 클라이언트 컴포넌트(306)는 애플리케이션(302)으로부터 객체(326)에 대한 질의를 수신할 수 있다.
방법(400)은 드래그 앤 드롭 객체에 대한 요청을 서버 컴포넌트로 전송하는 동작(동작 409)을 포함한다. 예를 들어, 클라이언트 컴포넌트(306)는 FORMAT_DATA_REQUEST 메시지를 가상 채널(321)을 통해 서버 컴포넌트(316)에 전송할 수 있다. FORMAT_DATA_REQUEST 메시지는 애플리케이션(312)에 대한 객체(326)를 요청한다. 방법(400)은 클라이언트 컴포넌트로부터 드래그 앤 드롭 객체에 대한 요청을 수신하는 동작(동작 410)을 포함한다. 예를 들어, 서버 컴포넌트(316)는 가상 채널(321)을 통해 클라이언트 컴포넌트(306)로부터 FORMAT_DATA_REQUEST 메시지를 수신할 수 있다.
방법(400)은 드래그 앤 드롭 객체에 대한 요청을 원격 애플리케이션에 전달하는 동작(동작 411)을 포함한다. 예를 들어, 서버 컴포넌트(316)는 객체(326)에 대한 요청을 애플리케이션(312)에 전달할 수 있다. 방법(400)은 드래그 앤 드롭 객체에 대한 요청을 수신하는 동작(동작 412)을 포함한다. 예를 들어, 애플리케이션(312)은 서버 컴포넌트(316)로부터 객체(326)에 대한 요청을 수신할 수 있다.
방법(400)은 드래그 앤 드롭 객체를 전송하는 동작(동작 413)을 포함한다. 예를 들어, 애플리케이션(312)은 서버 컴포넌트(316)로 객체(326)를 전송할 수 있다. 방법(400)은 원격 애플리케이션으로부터 드래그 앤 드롭 객체를 수신하는 동작(동작 414)을 포함한다. 예를 들어, 서버 컴포넌트(316)는 애플리케이션(312)으로부터 객체(326)를 수신할 수 있다.
방법(400)은 클라이언트 컴포넌트로 드래그 앤 드롭 객체를 전송하는 동작(동작 415)을 포함한다. 예를 들어, 서버 컴포넌트(316)는 객체(326)로부터의 데이터를 포함하는 FORMAT_DATA_RESPONSE 메시지를 가상 채널(321)을 통해 클라이언트 컴포넌트(306)로 전송할 수 있다. 방법(400)은 서버 컴포넌트로부터 드래그 앤 드롭 객체를 수신하는 동작(동작 416)을 포함한다. 예를 들어, 클라이언트 컴포넌트(306)는 객체(326)로부터의 데이터를 포함하는 FORMAT_DATA_RESPONSE 메시지를 가상 채널(321)을 통해 서버 컴포넌트(316)로부터 수신할 수 있다.
방법(400)은 드래그 앤 드롭 객체를 로컬 애플리케이션에 전달하는 동작(동작 417)을 포함한다. 예를 들어, 클라이언트 컴포넌트(306)는 객체(326)로부터의 데이터를 애플리케이션(312)에 전달할 수 있다. 방법(400)은 드래그 앤 드롭 객체를 수신하는 동작(동작 418)을 포함한다. 예를 들어, 애플리케이션(302)은 객체(326)로부터의 데이터를 클라이언트 컴포넌트(306)로부터 수신할 수 있다. 그에 따라, 선택된 드롭 효과에 따라, 객체(326)로부터의 데이터가 애플리케이션(312)으로부터 애플리케이션(302)으로 이동되거나, 복사되거나, 링크되거나, 하이퍼링크되거나, 또는 바로가기된다.
클라이언트 컴포넌트(306)(프록시 드롭 소스) 및 서버 컴포넌트(316)(프록시 드롭 타겟)는 방법(400)의 구현을 용이하게 해주기 위해 다양한 다른 방식으로 구성될 수 있다.
예를 들어, 클라이언트 컴포넌트(306)(프록시 드롭 소스)는 정확한 형식 이름을 광고하는 프록시 데이터 객체를 생성하고, 현재의 드롭 효과를 서버 컴포넌트(316)에 중계하며, 서버 컴포넌트(316)에 의해 지시될 때 취소 또는 드롭을 나타내고, 애플리케이션 창(312W) 내부에서의 마우스 키 상태 및 키보드 상태를 갱신하도록 구성될 수 있다. 키보드 키 및 마우스 버튼 상태를 포함하는 키 상태 벡터를 수신하기 위해 QueryContinue 드래그 메서드가 사용될 수 있다. 키보드 키 및 마 우스 버튼 상태는 가상 채널(321)을 통해 서버 컴포넌트(316)로 전송될 수 있다.
서버 컴포넌트(316)(프록시 드롭 타겟)는 드래그 앤 드롭 모달 루프가 언제 시작되는지를 나타내고, 애플리케이션(312)이 제공할 수 있는 형식들의 목록을 전송하며, 클라이언트 컴포넌트(306)로부터 수신된 최근의 드롭 효과를 애플리케이션(312)으로 반환하고, 대기 중인 드래그 앤 드롭 동작의 상태에 관하여 클라이언트 컴포넌트(306)를 갱신하며, 드롭이 일어나는 경우 포인터 객체(326)를 저장하도록 구성될 수 있다.
START_DRAG_DROP 메시지가 수신될 때, 프록시 데이터 객체(328)가 생성될 수 있다. 프록시 데이터 객체(328)는 기본적으로 객체(326)에 의해 광고된 동일한 형식을 반환함으로써 객체(326)를 모의한다. 프록시 데이터 객체(328)에 데이터가 요청될 때, 프록시 데이터 객체(328)는 컴퓨터 시스템(311)에 FORMAT_DATA_REQUEST 메시지를 전송한다. 서버 컴포넌트(316)는 이어서 객체(326)로부터 데이터를 검색하고 그 데이터를 다시 FORMAT_DATA_RESPONSE 메시지로 전송한다.
그에 따라, 본 발명의 실시예들은 원격 모듈로부터 로컬 모듈로 객체를 드래그 앤 드롭하는 것을 용이하게 해줄 수 있다.
본 발명은 그의 정신 또는 필수적인 특징을 벗어나지 않고 다른 구체적인 형태로 구현될 수 있다. 기술된 실시예들은 모든 면에서 제한하는 것이 아니라 단지 예시적인 것으로 보아야 한다. 따라서, 본 발명의 범위는 이상의 설명이 아니라 첨부된 청구항들에 의해 나타내어진다. 청구항의 등가성의 의미 및 범위 내에 속 하는 모든 변경은 본 발명의 범위 내에 포함되는 것으로 보아야 한다.

Claims (20)

  1. 컴퓨터 시스템(101)에서 실행 중인 로컬 애플리케이션(102) 및 클라이언트 컴포넌트(106) - 이 클라이언트 컴포넌트(106)는 서버 컴퓨터 시스템(111)에 있는 서버 컴포넌트(116)와의 터미널 서버 세션(131)에 참여하고 있음 - 를 포함하는 컴퓨터 시스템(101)에서, 드래그 앤 드롭을 사용하여 상기 로컬 애플리케이션(102)으로부터 상기 서버 컴퓨터 시스템(111)에 있는 원격 모듈로 객체를 전송하는 방법으로서,
    데스크톱 창 커서(133)가 원격 애플리케이션(112)의 애플리케이션 창(112W)의 경계 외부로부터 내부로 이동되었음을 상기 클라이언트 컴포넌트(106)가 검출하는 단계,
    상기 클라이언트 컴포넌트(106)가 대기 중인 드래그 앤 드롭 동작을 알려주는 드롭 통지를 수신하는 단계 - 상기 드롭 통지는 드래그 앤 드롭 객체(126)가 상기 원격 애플리케이션(112)으로 전송될 것임을 알려줌 -,
    상기 드롭 통지를 수신한 것에 응답하여, 상기 클라이언트 컴포넌트(106)가, 상기 데스크톱 창 커서(133)의 좌표 위치와 함께, 상기 드래그 앤 드롭 객체(126)를 전송하라는 요청을 상기 터미널 서버 세션(131)을 통해 상기 서버 컴퓨터 시스템(111)으로 전송하는 단계,
    상기 클라이언트 컴포넌트(106)가 상기 터미널 서버 세션(131)을 통해 상기 서버 컴퓨터 시스템(111)으로부터 상기 드래그 앤 드롭 객체에 대한 요청을 수신하 는 단계,
    상기 드래그 앤 드롭 객체(126)에 대한 상기 요청을 수신한 것에 응답하여, 상기 클라이언트 컴포넌트(106)가 상기 원격 애플리케이션(112)을 위하여 프록시 드롭 타겟으로서 역할하여,
    상기 드래그 앤 드롭 객체(126)에 대한 상기 요청을 상기 로컬 애플리케이션(102)으로 전달하는 단계,
    상기 드래그 앤 드롭 객체(126)에 대한 상기 요청에 응답하여 전송되는 상기 로컬 애플리케이션(102)으로부터의 상기 드래그 앤 드롭 객체(126)를 수신하는 단계, 및
    상기 클라이언트 컴포넌트(106)가 상기 원격 애플리케이션(112)으로 전달하기 위해 상기 드래그 앤 드롭 객체(126)를 상기 터미널 서버 세션(131)을 통해 상기 서버 컴퓨터 시스템(111)으로 전송하는 단계를 포함하는, 드래그 앤 드롭을 사용하여 로컬 애플리케이션으로부터 서버 컴퓨터 시스템에 있는 원격 모듈로 객체를 전송하는 방법.
  2. 제1항에 있어서, 상기 클라이언트 컴포넌트가 상기 로컬 애플리케이션으로부터 드래그 앤 드롭 객체를 수신할 수 있도록 상기 클라이언트 컴포넌트를 프록시 드롭 타겟으로서 구성하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 로컬 애플리케이션으로부터 서버 컴퓨터 시스템에 있는 원격 모듈로 객체를 전송하는 방법.
  3. 제1항에 있어서, 로컬 애플리케이션 창 내로부터 드래그 앤 드롭 객체를 선택하는 사용자 입력을 수신하는 단계 - 상기 로컬 애플리케이션 창은 상기 로컬 애플리케이션의 사용자 인터페이스를 나타냄 -, 및
    드래그 앤 드롭 객체가 선택되었음을 시각적으로 표현하기 위해 데스크톱 창 커서를 수정하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 로컬 애플리케이션으로부터 서버 컴퓨터 시스템에 있는 원격 모듈로 객체를 전송하는 방법.
  4. 제1항에 있어서, 데스크톱 창 커서가 원격 애플리케이션의 애플리케이션 창의 경계 외부로부터 내부로 이동되었음을 검출하는 단계는,
    상기 데스크톱 창 커서가 로컬 애플리케이션 창의 경계 내부로부터 상기 원격 애플리케이션의 애플리케이션 창의 경계 내부로 이동되었음을 검출하는 단계를 포함하는 것인, 드래그 앤 드롭을 사용하여 로컬 애플리케이션으로부터 서버 컴퓨터 시스템에 있는 원격 모듈로 객체를 전송하는 방법.
  5. 제1항에 있어서, 상기 클라이언트 컴포넌트가 대기 중인 드래그 앤 드롭 동작을 알려주는 드롭 통지를 수신하는 단계는,
    입력 장치 상의 버튼들의 상태의 변화를 검출하는 단계를 포함하는 것인, 드래그 앤 드롭을 사용하여 로컬 애플리케이션으로부터 서버 컴퓨터 시스템에 있는 원격 모듈로 객체를 전송하는 방법.
  6. 제1항에 있어서, 상기 클라이언트 컴포넌트가, 상기 데스크톱 창 커서의 좌표 위치와 함께, 상기 드래그 앤 드롭 객체를 전송하라는 요청을 상기 터미널 서버 세션을 통해 상기 서버 컴퓨터 시스템으로 전송하는 단계는,
    상기 터미널 서버 세션의 가상 채널을 통해 메시지를 전송하는 단계를 포함하는 것인, 드래그 앤 드롭을 사용하여 로컬 애플리케이션으로부터 서버 컴퓨터 시스템에 있는 원격 모듈로 객체를 전송하는 방법.
  7. 제1항에 있어서, 상기 클라이언트 컴포넌트가, 상기 데스크톱 창 커서의 좌표 위치와 함께, 상기 드래그 앤 드롭 객체를 전송하라는 요청을 상기 터미널 서버 세션을 통해 상기 서버 컴퓨터 시스템으로 전송하는 단계는,
    RDP(Remote Desktop Protocol) 세션을 통해 메시지를 전송하는 단계를 포함하는 것인, 드래그 앤 드롭을 사용하여 로컬 애플리케이션으로부터 서버 컴퓨터 시스템에 있는 원격 모듈로 객체를 전송하는 방법.
  8. 컴퓨터 시스템(111)에서 실행 중인 하나 이상의 원격 애플리케이션(112) 및 서버 컴포넌트(116) - 이 서버 컴포넌트(116)는 클라이언트 컴퓨터 시스템(101)에 있는 클라이언트 컴포넌트(106)와의 터미널 서버 세션(131)에 참여하고 있고, 상기 컴퓨터 시스템(111)에서 실행 중인 상기 하나 이상의 원격 애플리케이션(112)은 상기 터미널 서버 세션(131)을 통해 상기 클라이언트 컴퓨터 시스템(101)에 의해 원 격적으로 액세스되도록 구성되어 있음 - 를 포함하는 컴퓨터 시스템(111)에서, 드래그 앤 드롭을 사용하여 상기 클라이언트 컴퓨터 시스템(101)에 있는 모듈로부터 상기 하나 이상의 원격 애플리케이션(112) 중 하나로 객체를 전송하는 방법으로서,
    상기 서버 컴포넌트(116)가 상기 컴퓨터 시스템(111)으로 드래그 앤 드롭 객체(126)를 전송하라는 요청 및 상기 클라이언트 컴퓨터 시스템(101)에서의 데스크톱 창 커서(133)의 위치를 나타내는 좌표 위치를 수신하는 단계 - 상기 요청 및 좌표 위치는 상기 터미널 서버 세션(131)을 통해 전송됨 -,
    상기 서버 컴포넌트(116)가 드래그 앤 드롭 객체 전송 통지를 상기 좌표 위치에 대응하는 원격 애플리케이션으로 전달하는 단계,
    상기 드래그 앤 드롭 객체(126)를 전송하라는 요청을 수신한 것에 응답하여, 상기 서버 컴포넌트(116)가 상기 클라이언트 컴퓨터 시스템(101)에 있는 애플리케이션(102)을 위하여 프록시 드롭 소스로서 역할하여,
    상기 서버 컴포넌트(116)가 상기 원격 애플리케이션(112)으로부터 상기 드래그 앤 드롭 객체(126)에 대한 요청을 수신하는 단계,
    상기 서버 컴포넌트(116)가 상기 드래그 앤 드롭 객체(126)에 대한 요청을 상기 터미널 서버 세션(131)을 통해 상기 클라이언트 컴포넌트(106)로 전달하는 단계,
    상기 서버 컴포넌트(116)가 상기 터미널 서버 세션(131)을 통해 상기 클라이언트 컴포넌트(106)로부터 상기 드래그 앤 드롭 객체(126)를 수신하는 단계, 및
    상기 드래그 앤 드롭 객체(126)를 수신한 것에 응답하여, 상기 서버 컴포넌트(116)가 상기 클라이언트 컴퓨터 시스템(101)에 있는 상기 애플리케이션(102)을 위하여 프록시 드롭 소스로서 역할하여,
    상기 서버 컴포넌트(116)가 상기 드래그 앤 드롭 객체(126)를 상기 원격 애플리케이션(112)으로 전송하는 단계를 포함하는, 드래그 앤 드롭을 사용하여 클라이언트 컴퓨터 시스템에 있는 모듈로부터 하나 이상의 원격 애플리케이션 중 하나로 객체를 전송하는 방법.
  9. 제8항에 있어서, 상기 서버 컴포넌트가 상기 컴퓨터 시스템으로 드래그 앤 드롭 객체를 전송하라는 요청 및 상기 클라이언트 컴퓨터 시스템에서의 데스크톱 창 커서의 위치를 나타내는 좌표 위치를 수신하는 단계는,
    상기 터미널 서버 세션의 가상 채널을 통해 메시지를 수신하는 단계를 포함하는 것인, 드래그 앤 드롭을 사용하여 클라이언트 컴퓨터 시스템에 있는 모듈로부터 하나 이상의 원격 애플리케이션 중 하나로 객체를 전송하는 방법.
  10. 제8항에 있어서, 상기 드래그 앤 드롭 객체에 의해 광고되는 형식들을 모의하는 프록시 객체를 생성하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 클라이언트 컴퓨터 시스템에 있는 모듈로부터 하나 이상의 원격 애플리케이션 중 하나로 객체를 전송하는 방법.
  11. 제8항에 있어서, 상기 서버 컴포넌트가 드래그 앤 드롭 객체를 상기 원격 애플리케이션에 제공할 수 있도록 상기 서버 컴포넌트를 프록시 드롭 소스로서 구성하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 클라이언트 컴퓨터 시스템에 있는 모듈로부터 하나 이상의 원격 애플리케이션 중 하나로 객체를 전송하는 방법.
  12. 제8항에 있어서, 상기 서버 컴포넌트가 드래그 앤 드롭 모달 루프를 개시하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 클라이언트 컴퓨터 시스템에 있는 모듈로부터 하나 이상의 원격 애플리케이션 중 하나로 객체를 전송하는 방법.
  13. 컴퓨터 시스템(301)에서 실행 중인 로컬 애플리케이션(302) 및 클라이언트 컴포넌트(306) - 이 클라이언트 컴포넌트(306)는 서버 컴퓨터 시스템(311)에 있는 서버 컴포넌트(316)와의 터미널 서버 세션(331)에 참여하고 있음 - 를 포함하는 컴퓨터 시스템(301)에서, 드래그 앤 드롭을 사용하여 상기 서버 컴퓨터 시스템에 있는 원격 모듈로부터의 객체를 상기 로컬 애플리케이션(302)으로 전송하는 방법으로서,
    데스크톱 창 커서(333)가 원격 애플리케이션(312)의 애플리케이션 창(312W)의 경계 내부로부터 외부로 이동되었음을 상기 클라이언트 컴포넌트(306)가 검출하는 단계,
    상기 클라이언트 컴포넌트(306)가 상기 터미널 서버 세션(331)을 통해 상기 서버 컴포넌트(316)로 메시지를 전송하는 단계 - 상기 메시지는 상기 데스크톱 창 커서(333)가 상기 원격 애플리케이션(312)의 애플리케이션 창(312W)의 경계 내부로부터 외부로 이동되었음을 상기 서버 컴포넌트(316)에 알려줌 -,
    상기 드래그 앤 드롭 객체(326)에 대한 상기 요청을 수신한 것에 응답하여, 상기 클라이언트 컴포넌트(306)가 상기 원격 애플리케이션(312)을 위하여 프록시 드롭 소스로서 역할하여,
    상기 클라이언트 컴포넌트(306)가 상기 로컬 애플리케이션(302)으로부터 드래그 앤 드롭 객체에 대한 질의를 수신하는 단계 - 상기 질의는 상기 드래그 앤 드롭 객체(326)가 상기 로컬 애플리케이션(302)으로 전송될 것임을 나타내는 상기 로컬 애플리케이션(302)에서의 드롭 통지를 나타냄 -,
    상기 클라이언트 컴포넌트(306)가 상기 드래그 앤 드롭 객체(326)에 대한 요청을 상기 서버 컴포넌트(316)로 전송하는 단계 - 상기 요청은 상기 질의에 응답하여 상기 터미널 서버 세션(331)을 통해 전송되고, 상기 요청은 상기 로컬 애플리케이션(302)이 상기 드래그 앤 드롭 객체(326)를 요청하고 있음을 상기 서버 컴포넌트(316)에 알려줌 -,
    상기 클라이언트 컴포넌트(306)가 상기 터미널 서버 세션(331)을 통해 상기 서버 컴퓨터 시스템(311)으로부터 상기 드래그 앤 드롭 객체(326)를 수신하는 단계, 및
    상기 드래그 앤 드롭 객체(326)를 수신한 것에 응답하여, 상기 클라이언트 컴포넌트(306)가 상기 원격 애플리케이션(312)을 위하여 프록시 드롭 소스로서 역할하여,
    상기 클라이언트 컴포넌트(306)가 상기 드래그 앤 드롭 객체(326)를 상기 로컬 애플리케이션(302)으로 전송하는 단계를 포함하는, 드래그 앤 드롭을 사용하여 서버 컴퓨터 시스템에 있는 원격 모듈로부터의 객체를 로컬 애플리케이션으로 전송하는 방법.
  14. 제13항에 있어서, 데스크톱 창 커서가 원격 애플리케이션의 애플리케이션 창의 경계 내부로부터 외부로 이동되었음을 상기 클라이언트 컴포넌트가 검출하는 단계는,
    상기 데스크톱 창 커서가 원격 애플리케이션의 애플리케이션으로부터 상기 로컬 애플리케이션의 로컬 애플리케이션 창으로 이동되었음을 상기 클라이언트 컴포넌트가 검출하는 단계를 포함하는 것인, 드래그 앤 드롭을 사용하여 서버 컴퓨터 시스템에 있는 원격 모듈로부터의 객체를 로컬 애플리케이션으로 전송하는 방법.
  15. 제13항에 있어서, 상기 드래그 앤 드롭 객체에 의해 광고되는 형식들을 모의하는 프록시 객체를 생성하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 서버 컴퓨터 시스템에 있는 원격 모듈로부터의 객체를 로컬 애플리케이션으로 전송하는 방법.
  16. 제13항에 있어서, 상기 클라이언트 컴포넌트가 드래그 앤 드롭 객체를 상기 클라이언트 컴포넌트에 제공할 수 있도록 상기 클라이언트 컴포넌트를 프록시 드롭 소스로서 구성하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 서버 컴퓨터 시스템에 있는 원격 모듈로부터의 객체를 로컬 애플리케이션으로 전송하는 방법.
  17. 제13항에 있어서, 원격 애플리케이션의 애플리케이션 창 내로부터 드래그 앤 드롭 객체를 선택하는 사용자 입력을 수신하는 단계 - 상기 애플리케이션 창은 상기 원격 애플리케이션의 사용자 인터페이스를 나타냄 -, 및
    드래그 앤 드롭 객체가 선택되었음을 시각적으로 표현하기 위해 데스크톱 창 커서를 수정하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 서버 컴퓨터 시스템에 있는 원격 모듈로부터의 객체를 로컬 애플리케이션으로 전송하는 방법.
  18. 컴퓨터 시스템(311)에서 실행 중인 하나 이상의 원격 애플리케이션(312) 및 서버 컴포넌트(316) - 이 서버 컴포넌트(316)는 클라이언트 컴퓨터 시스템(301)에 있는 클라이언트 컴포넌트(306)와의 터미널 서버 세션(331)에 참여하고 있고, 상기 컴퓨터 시스템(311)에서 실행 중인 상기 하나 이상의 원격 애플리케이션(312)은 상기 터미널 서버 세션(331)을 통해 상기 클라이언트 컴퓨터 시스템(301)에 의해 원격적으로 액세스되도록 구성되어 있음 - 를 포함하는 컴퓨터 시스템(311)에서, 드래그 앤 드롭을 사용하여 원격 애플리케이션(312)으로부터의 객체를 상기 클라이언트 컴퓨터 시스템(301)에 있는 모듈로 전송하는 방법으로서,
    상기 서버 컴포넌트(316)가 상기 터미널 서버 세션(331)을 통해 상기 클라이언트 컴포넌트(306)로부터 메시지를 수신하는 단계 - 상기 메시지는 데스크톱 창 커서(333)가 상기 클라이언트 컴퓨터 시스템(311)에 있는 원격 애플리케이션(312)에 대응하는 애플리케이션 창(312W)의 경계 내부로부터 외부로 이동되었음을 상기 서버 컴포넌트(316)에 알려줌 -,
    상기 서버 컴포넌트(316)가 상기 데스크톱 창 커서(333)의 움직임이 대기 중인 드래그 앤 드롭 동작과 연관되어 있는 것으로 결정하는 단계,
    상기 서버 컴포넌트(316)가 상기 클라이언트 컴포넌트(306)로부터 드래그 앤 드롭 객체(326)에 대한 요청을 수신하는 단계 - 상기 요청은 상기 클라이언트 컴퓨터 시스템(301)에 있는 애플리케이션(302)으로부터의 상기 드래그 앤 드롭 객체(326)에 대한 질의에 응답하여 상기 터미널 서버 세션(331)을 통해 전송되고, 상기 요청은 상기 클라이언트 컴포넌트(306)에 있는 상기 애플리케이션(302)이 상기 원격 애플리케이션(312)에 상기 드래그 앤 드롭 객체(326)를 요청하고 있음을 상기 서버 컴포넌트(316)에 알려줌 -,
    상기 드래그 앤 드롭 객체(326)에 대한 요청을 수신한 것에 응답하여, 상기 서버 컴포넌트(316)가 상기 클라이언트 컴퓨터 시스템(311)에 있는 상기 애플리케이션(316)을 위하여 프록시 드롭 타겟으로서 역할하여,
    상기 드래그 앤 드롭 객체(326)에 대한 상기 요청을 상기 원격 애플리케이션(312)으로 전달하는 단계,
    상기 드래그 앤 드롭 객체(326)에 대한 상기 요청에 응답하여 전송된 상기 원격 애플리케이션(312)으로부터의 상기 드래그 앤 드롭 객체(326)를 수신하는 단계, 및
    상기 클라이언트 컴퓨터 시스템(301)에 있는 상기 애플리케이션(302)으로 전달하기 위해, 상기 서버 컴포넌트(316)가 상기 드래그 앤 드롭 객체(326)를 상기 터미널 서버 세션(331)을 통해 상기 클라이언트 컴퓨터 시스템(310)으로 전송하는 단계를 포함하는, 드래그 앤 드롭을 사용하여 원격 애플리케이션으로부터의 객체를 클라이언트 컴퓨터 시스템에 있는 모듈로 전송하는 방법.
  19. 제18항에 있어서, 상기 서버 컴포넌트가 상기 원격 애플리케이션으로부터 드래그 앤 드롭 객체를 수신할 수 있도록 상기 서버 컴포넌트를 프록시 드롭 타겟으로서 구성하는 단계를 더 포함하는, 드래그 앤 드롭을 사용하여 원격 애플리케이션으로부터의 객체를 클라이언트 컴퓨터 시스템에 있는 모듈로 전송하는 방법.
  20. 제18항에 있어서, 상기 서버 컴포넌트가 상기 드래그 앤 드롭 객체를 상기 터미널 서버 세션을 통해 상기 클라이언트 컴퓨터 시스템으로 전송하는 단계는,
    상기 서버 컴포넌트가 상기 드래그 앤 드롭 객체를 RDP(remote desktop protocol) 세션의 가상 채널을 통해 전송하는 단계를 포함하는 것인, 드래그 앤 드롭을 사용하여 원격 애플리케이션으로부터의 객체를 클라이언트 컴퓨터 시스템에 있는 모듈로 전송하는 방법.
KR1020087029934A 2006-06-09 2007-02-13 로컬 모듈과 원격 모듈 간의 객체의 드래그 앤 드롭 KR20090027624A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/423,400 2006-06-09
US11/423,400 US7533349B2 (en) 2006-06-09 2006-06-09 Dragging and dropping objects between local and remote modules

Publications (1)

Publication Number Publication Date
KR20090027624A true KR20090027624A (ko) 2009-03-17

Family

ID=38801780

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087029934A KR20090027624A (ko) 2006-06-09 2007-02-13 로컬 모듈과 원격 모듈 간의 객체의 드래그 앤 드롭

Country Status (12)

Country Link
US (2) US7533349B2 (ko)
EP (1) EP2033107B1 (ko)
JP (1) JP4482615B2 (ko)
KR (1) KR20090027624A (ko)
CN (1) CN101467139B (ko)
AU (1) AU2007257440A1 (ko)
BR (1) BRPI0712350A2 (ko)
CA (1) CA2654040A1 (ko)
MX (1) MX2008015484A (ko)
RU (1) RU2430405C2 (ko)
TW (1) TW200807948A (ko)
WO (1) WO2007142708A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130063449A (ko) * 2011-12-06 2013-06-14 삼성전자주식회사 디바이스 간의 페이지 공유 시스템 및 방법
US8843631B2 (en) 2009-12-08 2014-09-23 Samsung Electronics Co., Ltd. Dynamic local function binding apparatus and method

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130080143A1 (en) * 2011-09-27 2013-03-28 Paul E. Reeves Unified desktop docking behavior with device as master
US9715252B2 (en) 2011-08-24 2017-07-25 Z124 Unified desktop docking behavior for window stickiness
US9405459B2 (en) 2011-08-24 2016-08-02 Z124 Unified desktop laptop dock software operation
US9268518B2 (en) 2011-09-27 2016-02-23 Z124 Unified desktop docking rules
PT1844390E (pt) * 2005-01-31 2012-10-09 Cortado Ag Processo e disposição para imprimir através de um servidor de aplicação assim como um programa de computador correspondente e um meio de armazenamento legível por computador correspondente
US7533349B2 (en) * 2006-06-09 2009-05-12 Microsoft Corporation Dragging and dropping objects between local and remote modules
US10503342B2 (en) 2006-08-04 2019-12-10 Apple Inc. User interface spaces
US8117555B2 (en) * 2006-12-07 2012-02-14 Sap Ag Cooperating widgets
US20080215998A1 (en) * 2006-12-07 2008-09-04 Moore Dennis B Widget launcher and briefcase
US7895296B1 (en) 2006-12-29 2011-02-22 Google, Inc. Local storage for web based native applications
US8335817B1 (en) * 2006-12-29 2012-12-18 Google Inc. Message passing within a web based application framework
US9384346B1 (en) 2006-12-29 2016-07-05 Google Inc. Local service access within a web based application framework
US8539073B1 (en) 2006-12-29 2013-09-17 Google Inc. Startup of container applications
US8612547B1 (en) 2006-12-29 2013-12-17 Google Inc. Container interrupt services
US8248636B1 (en) 2006-12-29 2012-08-21 Google Inc. WYSIWYG printing for web based applications
US9391826B1 (en) 2006-12-29 2016-07-12 Google Inc. Collaborative web based applications
US20090094561A1 (en) * 2007-10-05 2009-04-09 International Business Machines Corporation Displaying Personalized Documents To Users Of A Surface Computer
US9134904B2 (en) * 2007-10-06 2015-09-15 International Business Machines Corporation Displaying documents to a plurality of users of a surface computer
US8139036B2 (en) * 2007-10-07 2012-03-20 International Business Machines Corporation Non-intrusive capture and display of objects based on contact locality
US20090091539A1 (en) * 2007-10-08 2009-04-09 International Business Machines Corporation Sending A Document For Display To A User Of A Surface Computer
US8024185B2 (en) 2007-10-10 2011-09-20 International Business Machines Corporation Vocal command directives to compose dynamic display text
US9619304B2 (en) * 2008-02-05 2017-04-11 Adobe Systems Incorporated Automatic connections between application components
US8370519B2 (en) * 2008-02-12 2013-02-05 Microsoft Corporation Copying data onto an expandable memory in a wireless device using a desktop interface
US20090237363A1 (en) * 2008-03-20 2009-09-24 Microsoft Corporation Plural temporally overlapping drag and drop operations
US20140040862A1 (en) * 2008-04-03 2014-02-06 Adobe Systems Incorporated Copying Reusable Components from a Remote Source
US20090300131A1 (en) * 2008-05-27 2009-12-03 Supportspace Ltd. Simultaneous remote and local control of computer desktop
EP2131271A1 (en) * 2008-06-04 2009-12-09 NEC Corporation Method for enabling a mobile user equipment to drag and drop data objects between distributed applications
US11258652B2 (en) 2008-06-08 2022-02-22 Apple Inc. System and method for placeshifting media playback
US9626363B2 (en) * 2008-06-08 2017-04-18 Apple Inc. System and method for placeshifting media playback
US8401681B2 (en) 2008-06-08 2013-03-19 Apple Inc. System and method for placeshifting media playback
US8656293B1 (en) 2008-07-29 2014-02-18 Adobe Systems Incorporated Configuring mobile devices
EP2184679A1 (en) * 2008-10-30 2010-05-12 Alcatel Lucent Method for operating an ending web-widget with data retrieved from a starting web-widget
TW201020901A (en) 2008-11-20 2010-06-01 Ibm Visual feedback for drag-and-drop operation with gravitational force model
KR20100081577A (ko) * 2009-01-06 2010-07-15 삼성전자주식회사 휴대단말에서 오브젝트의 내비게이션 방법 및 장치
US8650634B2 (en) 2009-01-14 2014-02-11 International Business Machines Corporation Enabling access to a subset of data
US8169904B1 (en) * 2009-02-26 2012-05-01 Sprint Communications Company L.P. Feedback for downlink sensitivity
US8621387B2 (en) 2009-06-08 2013-12-31 Apple Inc. User interface for multiple display regions
US9141412B2 (en) * 2009-06-16 2015-09-22 Microsoft Technology Licensing, Llc Terminal services application virtualization for compatibility
US8239781B2 (en) * 2009-06-30 2012-08-07 Sap Ag Drag and drop of an application component to desktop
US9277021B2 (en) 2009-08-21 2016-03-01 Avaya Inc. Sending a user associated telecommunication address
JP5433375B2 (ja) * 2009-10-23 2014-03-05 楽天株式会社 端末装置、機能実行方法、機能実行プログラム及び情報処理システム
US20110119609A1 (en) * 2009-11-16 2011-05-19 Apple Inc. Docking User Interface Elements
US8441702B2 (en) 2009-11-24 2013-05-14 International Business Machines Corporation Scanning and capturing digital images using residue detection
US8610924B2 (en) 2009-11-24 2013-12-17 International Business Machines Corporation Scanning and capturing digital images using layer detection
CN102754057A (zh) * 2009-12-23 2012-10-24 诺基亚公司 用于显示器设备的方法和装置
US9009219B2 (en) * 2010-01-27 2015-04-14 Vmware, Inc. Native viewer use for service results from a remote desktop
US9274821B2 (en) 2010-01-27 2016-03-01 Vmware, Inc. Independent access to virtual machine desktop content
US8555187B2 (en) * 2010-02-16 2013-10-08 Google Inc. Server-based data sharing in computer applications using a clipboard
CN102262528B (zh) * 2010-05-26 2016-06-22 腾讯科技(深圳)有限公司 即时通讯客户端及其内嵌网页页面实现拖拽的方法
US8335991B2 (en) * 2010-06-11 2012-12-18 Microsoft Corporation Secure application interoperation via user interface gestures
US20120030664A1 (en) * 2010-07-30 2012-02-02 Sap Ag Processing of software objects moved into a dropzone region of an application
US8527891B2 (en) 2010-08-13 2013-09-03 International Business Machines Corporation Enabling user interactions between user interface components
US20120131483A1 (en) * 2010-11-22 2012-05-24 International Business Machines Corporation Drag-and-drop actions for web applications using an overlay and a set of placeholder elements
CN102566983B (zh) * 2010-12-07 2016-04-20 腾讯科技(深圳)有限公司 基于Windows系统的对象拖拽实现方法及其系统
US9811528B2 (en) 2010-12-09 2017-11-07 Yosef Benraz Systems and methods for providing continuing access to a remote computer program
US9280512B2 (en) 2011-05-23 2016-03-08 Yosef Benraz Computerized system and method for remote access to a computer program
TW201227489A (en) * 2010-12-31 2012-07-01 Hon Hai Prec Ind Co Ltd System and method for processing image
WO2012102416A1 (en) * 2011-01-24 2012-08-02 Lg Electronics Inc. Data sharing between smart devices
US9367224B2 (en) * 2011-04-29 2016-06-14 Avaya Inc. Method and apparatus for allowing drag-and-drop operations across the shared borders of adjacent touch screen-equipped devices
US8489680B1 (en) * 2011-08-18 2013-07-16 Google Inc. Transmission of input values using an unreliable communication link
US9182935B2 (en) 2011-09-27 2015-11-10 Z124 Secondary single screen mode activation through menu option
US20130097541A1 (en) * 2011-10-13 2013-04-18 Gface Gmbh Smart drag and drop
US9164544B2 (en) 2011-12-09 2015-10-20 Z124 Unified desktop: laptop dock, hardware configuration
CN103186430A (zh) * 2011-12-30 2013-07-03 联想(北京)有限公司 文件操作装置及方法,和对应的数字处理设备和数字处理系统
CN103186421A (zh) * 2011-12-31 2013-07-03 联想(北京)有限公司 一种在混合系统远程桌面实现数据交互的方法和装置
US9529518B2 (en) * 2012-05-25 2016-12-27 Panasonic Intellectual Property Corporation Of America Information processing device, information processing method, and information processing program
US8970492B2 (en) * 2012-06-08 2015-03-03 Microsoft Technology Licensing, Llc Remote session control using multi-touch inputs
US8943582B1 (en) * 2012-07-18 2015-01-27 Amazon Technologies, Inc. Transferring information among devices using cameras
US20140047368A1 (en) * 2012-08-13 2014-02-13 Magnet Systems Inc. Application development tool
KR102017631B1 (ko) * 2012-09-03 2019-09-03 삼성전자주식회사 데이터 통신을 위한 단말 장치 및 방법
CN104571782A (zh) * 2013-10-18 2015-04-29 腾讯科技(深圳)有限公司 远程控制方法、系统、操控终端及被控终端
CN103955328B (zh) * 2014-04-29 2017-01-18 广东威创视讯科技股份有限公司 操作端查阅拼接墙中显示内容的方法和系统
US10664488B2 (en) 2014-09-25 2020-05-26 Oracle International Corporation Semantic searches in a business intelligence system
US10417247B2 (en) 2014-09-25 2019-09-17 Oracle International Corporation Techniques for semantic searching
US10516980B2 (en) 2015-10-24 2019-12-24 Oracle International Corporation Automatic redisplay of a user interface including a visualization
US10082941B2 (en) * 2015-05-20 2018-09-25 Vmware, Inc. Optimizing window move actions for remoted applications
CN113190111A (zh) 2015-10-08 2021-07-30 Pcms控股公司 一种方法和设备
US10088981B2 (en) * 2015-12-29 2018-10-02 Sap Se User engagement application across user interface applications
US10564829B2 (en) 2016-03-25 2020-02-18 Vmware, Inc. Optimizing window resize actions for remoted applications
US10884604B2 (en) 2017-05-16 2021-01-05 Apple Inc. Drag and drop for touchscreen devices
US10956237B2 (en) * 2017-06-02 2021-03-23 Oracle International Corporation Inter-application sharing of business intelligence data
US10917587B2 (en) 2017-06-02 2021-02-09 Oracle International Corporation Importing and presenting data
US11614857B2 (en) 2017-06-02 2023-03-28 Oracle International Corporation Importing, interpreting, and presenting data
JP6961402B2 (ja) * 2017-06-22 2021-11-05 キヤノン株式会社 情報処理装置、制御方法、及びプログラム
US11237699B2 (en) 2017-08-18 2022-02-01 Microsoft Technology Licensing, Llc Proximal menu generation
US11301124B2 (en) * 2017-08-18 2022-04-12 Microsoft Technology Licensing, Llc User interface modification using preview panel
US10783012B2 (en) 2018-04-20 2020-09-22 CopyBucket, Inc. Systems and methods for efficient inter-device data exchange
WO2020112900A2 (en) 2018-11-30 2020-06-04 Pcms Holdings, Inc. Method for mirroring 3d objects to light field displays
US20200192539A1 (en) * 2018-12-13 2020-06-18 Vmware, Inc. System and method for operating system event redirection
CN109782976B (zh) * 2019-01-15 2020-12-22 Oppo广东移动通信有限公司 文件处理方法、装置、终端及存储介质
CN114089900A (zh) * 2020-07-29 2022-02-25 华为技术有限公司 一种跨设备的对象拖拽方法及设备
CN111752722A (zh) * 2020-05-28 2020-10-09 西安万像电子科技有限公司 数据传输方法及设备
TWI761056B (zh) * 2021-02-01 2022-04-11 宏正自動科技股份有限公司 資料傳送方法與資料傳送裝置
US11402964B1 (en) * 2021-02-08 2022-08-02 Facebook Technologies, Llc Integrating artificial reality and other computing devices
CN114138145B (zh) * 2021-11-30 2024-05-28 武汉噢易云计算股份有限公司 应用虚拟化的文件拖拽方法、装置、设备及可读存储介质
CN114928524B (zh) * 2022-05-20 2024-03-26 浪潮思科网络科技有限公司 一种web端与交换机的交互方法、设备及介质

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08272715A (ja) * 1995-03-31 1996-10-18 Canon Inc 情報転送方法および掲示板装置
US5767851A (en) * 1996-01-29 1998-06-16 Sun Microsystems, Inc. Method and apparatus for emulating an environment's drag and drop functionality in a host environment
US6138150A (en) * 1997-09-03 2000-10-24 International Business Machines Corporation Method for remotely controlling computer resources via the internet with a web browser
US6687745B1 (en) 1999-09-14 2004-02-03 Droplet, Inc System and method for delivering a graphical user interface of remote applications over a thin bandwidth connection
TW559699B (en) * 2000-01-12 2003-11-01 Sony Corp Image display device and method
US6941382B1 (en) * 2000-02-07 2005-09-06 Raja Tuli Portable high speed internet or desktop device
US7017162B2 (en) * 2001-07-10 2006-03-21 Microsoft Corporation Application program interface for network software platform
US6920461B2 (en) * 2001-07-10 2005-07-19 Microsoft Corp. Application program interface for network software platform
US7117504B2 (en) * 2001-07-10 2006-10-03 Microsoft Corporation Application program interface that enables communication for a network software platform
US7546602B2 (en) * 2001-07-10 2009-06-09 Microsoft Corporation Application program interface for network software platform
US7165239B2 (en) * 2001-07-10 2007-01-16 Microsoft Corporation Application program interface for network software platform
JP2003091489A (ja) * 2001-09-14 2003-03-28 Sony Corp ネットワーク情報処理システム及び情報処理方法
US20030093466A1 (en) * 2001-11-15 2003-05-15 Jarman James D. Drag and drop technology for remote control tool
US7650575B2 (en) 2003-03-27 2010-01-19 Microsoft Corporation Rich drag drop user interface
US20050091359A1 (en) 2003-10-24 2005-04-28 Microsoft Corporation Systems and methods for projecting content from computing devices
US7721254B2 (en) * 2003-10-24 2010-05-18 Microsoft Corporation Programming interface for a computer platform
US7590750B2 (en) 2004-09-10 2009-09-15 Microsoft Corporation Systems and methods for multimedia remoting over terminal server connections
KR100611255B1 (ko) * 2004-10-15 2006-08-10 한국과학기술연구원 작업 공간을 공유하는 원격 회의 방법
JP4738805B2 (ja) * 2004-12-16 2011-08-03 株式会社リコー 画面共有システム、画面共有方法、画面共有プログラム
US8769127B2 (en) * 2006-02-10 2014-07-01 Northrop Grumman Systems Corporation Cross-domain solution (CDS) collaborate-access-browse (CAB) and assured file transfer (AFT)
US7533349B2 (en) * 2006-06-09 2009-05-12 Microsoft Corporation Dragging and dropping objects between local and remote modules

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8843631B2 (en) 2009-12-08 2014-09-23 Samsung Electronics Co., Ltd. Dynamic local function binding apparatus and method
US10165058B2 (en) 2009-12-08 2018-12-25 Samsung Electronics Co., Ltd. Dynamic local function binding apparatus and method
KR20130063449A (ko) * 2011-12-06 2013-06-14 삼성전자주식회사 디바이스 간의 페이지 공유 시스템 및 방법

Also Published As

Publication number Publication date
CN101467139A (zh) 2009-06-24
RU2430405C2 (ru) 2011-09-27
US20090210811A1 (en) 2009-08-20
EP2033107A4 (en) 2017-03-29
US7533349B2 (en) 2009-05-12
US7802195B2 (en) 2010-09-21
EP2033107A1 (en) 2009-03-11
BRPI0712350A2 (pt) 2012-05-29
US20070288599A1 (en) 2007-12-13
WO2007142708A1 (en) 2007-12-13
JP2009540428A (ja) 2009-11-19
CN101467139B (zh) 2012-05-30
RU2008148326A (ru) 2010-06-20
TW200807948A (en) 2008-02-01
JP4482615B2 (ja) 2010-06-16
MX2008015484A (es) 2009-03-06
CA2654040A1 (en) 2007-12-13
EP2033107B1 (en) 2019-08-07
AU2007257440A1 (en) 2007-12-13

Similar Documents

Publication Publication Date Title
US7533349B2 (en) Dragging and dropping objects between local and remote modules
US11025750B2 (en) Determining whether to perform requests at a server or at a client device based on resources provided by the client device
US6356933B2 (en) Methods and apparatus for efficiently transmitting interactive application data between a client and a server using markup language
US8346868B2 (en) Real-time web sharing system
US7882507B2 (en) Application module for managing interactions of distributed modality components
CN110769048B (zh) 本地与远程虚拟桌面的无缝衔接方法及系统
JP2003505760A (ja) ダイナミクス・マネージャを備えたコンピュータ・システムによるアクティビティに基づくコラボレーションのための方法及びその装置
CN114816401B (zh) 界面元素的定位方法、电子设备及存储介质
WO2008154084A1 (en) Method and architecture supporting high performance web applications
US11243679B2 (en) Remote data input framework
US6686933B1 (en) Lightweight indicator of divergence of views for collaboratively shared user interface elements
CN108319420B (zh) 一种图片加载方法及装置
CN114911402B (zh) 远程应用和本地系统间的拖拽交互方法及系统
CN115454296A (zh) 一种跨运行环境的用户行为智能融合方法
US7783599B2 (en) Active data push delivery
CN108536523B (zh) 浏览器内ActiveX嵌套Flash正常交互的方法
US11893225B2 (en) Host to client drag-and-drop operation
JP6591132B2 (ja) コンテンツ共有システム、コンテンツ共有方法及びプログラム
JP2003233577A (ja) デバイス制御システム
CN115048191A (zh) 一种快应用切换显示设备的方法及相关设备
JPWO2019073516A1 (ja) コンテンツ共有システム、コンテンツ共有方法及びプログラム

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid