在本地和远程模块之间拖放对象的制作方法

文档序号:6455158阅读:247来源:国知局
专利名称:在本地和远程模块之间拖放对象的制作方法
在本地和远程模块之间拖放对象
背景
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已改变人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的各种任务(例如,文字处理、日程安排和数据库管理)。通常,为了执行这各种任务,计算机系统包括多个相应的应用程序。例如,为执行文字处理,计算机系统可包括文字处理应用程序,为操纵电子表格,计算机系统可包括电子表格应用程序,等等。
在独立的计算环境中,能够在计算机系统处执行不同任务的应用程序之间移动对象通常是有用的。例如,将文字处理应用程序中生成的文本的一部分移至演示程序中作为用于图片或绘图的描述性文本可能是有用的。为允许应用程序之间的对象移动,某些计算机系统包括可由计算机处的应用程序以共用的方式接口的一部分存储器(例如,剪贴板)。由此, 一个应用程序可以与该部分存储器接口以存储对象,然后另一应用程序可与该部分存储器接口以检索该对象。由此,应用程序(甚至是那些不能兼容地直接交换对象的应用程序)可通过该部分存储器来交换对象。
许多独立计算环境还包括结合视觉提示使用输入设备来直接在兼容应用程序之间传送对象的更为方便的能力。用于应用程序之间的直接传送的一种常见的机制是"拖放"。为便于拖放,用户在一个应用程序内标识对象(例如,一部分文本、图像或电子表格单元格)。例如,用户可用鼠标加亮一部分文本。可使用视觉提示,例如背光,来向用户指示该文本被选中。
用户操纵输入设备来选择所标识的对象。例如,用户操纵鼠标来将光标在所标识的文本上移动,然后可按下鼠标左键。用户然后进一步操纵输入设备以将该对象移至另一应用程序。例如,在保持鼠标左键按下的同时,用户可操纵该鼠标以将光标在另一应用程序上移动(拖曳)。 一旦在另一应用程序上,用户可释放鼠标左键。释放鼠标按键的动作使得该对象被传送到(或放到)该另
8一应用程序。
在其它环境中,计算机系统被彼此耦合并被耦合到其它电子设备,以形成计算机系统和其它电子设备可以在其上传送电子数据的有线和无线计算机网络。结果,在计算机系统处执行的许多任务(例如,语音通信、访问电子邮件、控制家用电子设备、Web浏览、以及打印文档)包括许多计算机系统和/或其他电子设备之间经由有线和/或无线计算机网络的通信(例如,电子消息交换)。
在网络化环境中,能够在执行不同任务的应用程序之间移动对象通常也是有用的,其中某些应用程序本地运行,而其它应用程序例如在终端服务器处远程运行。终端服务器是维护可由客户机计算机系统远程地调用的应用程序的计
算机系统。输入被送入客户机计算机系统处,并通过网络(例如,使用基于ITUT.120协议家族的协议,诸如远程桌面协议("RDP"))传送到终端服务器处的应用程序。该应用程序如同该输入是在终端服务器处送入的那样来处理该输入。该应用程序响应于所接收到的输入生成输出,并且该输出通过网络(例如,还是基于T.120的协议)传送到客户机计算机系统。客户机计算机系统呈现该输出数据。由此,接收输入,并且在客户机计算机系统处呈现输出,而处理实际上是在终端服务器处发生的。
为允许在本地和远程应用程序之间移动对象,某些网络化计算机系统包括类似于在独立环境中所使用的剪贴板功能。分配一部分存储器(或剪贴板),并且该部分存储器可由计算机系统处的应用程序以共用的方式来接口。由此,本地应用程序可以与该部分存储器接口以存储对象,然后远程应用程序可与该部分存储器接口以检索该对象,反之亦然。由此,应用程序(甚至是在不同计算机系统处运行的应用程序)可通过该部分存储器来交换对象。
然而,许多网络化计算机系统缺少在本地和远程应用程序之间以及在远程和本地应用程序之间拖放对象的更方便的能力。即,客户机和服务器终端服务器组件通常未被配置成通过终端服务器会话来拖放对象并与放置源或放置目标交互以便于拖放传送。例如,服务器组件通常没有方法来确定鼠标光标在(客户机系统处的)远程桌面窗口之外的移动是否与拖放操作相关联或用户是否正出于其它原因而移动鼠标。
9简要概述
本发明涉及用于在本地和远程模块之间拖放对象的方法、系统和计算机程序产品。在某些实施例中, 一对象从本地应用程序拖放到远程应用程序。客户机组件检测到桌面窗口光标己从远程应用程序的应用程序窗口界限外部移至其内部。客户机组件接收指示即将发生的拖放操作的放置通知。该放置通知指
示一拖放对象要被传送到该远程应用程序。客户机组件通过终端服务器会话将传送该拖放对象的请求以及桌面窗口光标的坐标位置发送给服务器计算机系统。
服务器组件接收该请求,并将拖放对象传送通知转发给远程应用程序。服务器组件响应于接收到传送拖放对象的请求担当代表本地应用程序的代理放置源,包括从远程应用程序接收到对拖放对象的请求。服务器组件通过终端服务器会话将该对拖放对象的请求转发给客户机组件。
客户机组件通过终端服务器会话从服务器组件接收将该对拖放对象的请求。客户机组件担当代表远程应用程序的代理放置目标,包括将该对拖放对象的请求转发给本地应用程序并从本地应用程序接收拖放对象。客户机组件通过终端服务器会话将将该拖放对象发送给服务器计算机系统。
服务器组件通过终端服务器会话从客户机组件接收该拖放对象。服务器组件担当代表本地应用程序的代理放置源,包括将该拖放对象发送给远程应用程序。
在其它实施例中, 一对象从远程应用程序拖放到本地应用程序。客户机组件检测到桌面窗口光标已从远程应用程序的界限内部移至其外部。客户机组件通过终端服务器会话向服务器组件发送消息。该消息向服务器组件指示桌面窗口光标已从远程应用程序的应用程序窗口界限内部移至其外部。
服务器组件通过终端服务器会话从客户机组件接收消息。服务器组件确定桌面窗口光标的移动与即将发生的拖放操作相关联。
客户机组件担当代表远程应用程序的代理放置源,包括从本地应用程序接收对拖放对象的査询。该查询指示本地应用程序处表示该拖放对象将被传送到本地应用程序的放置通知。客户机组件通过终端服务器会话将该对拖放对象的请求发送给服务器组件。服务器组件接收该请求。服务器组件担当代表本地应用程序的代理放置目标,包括将该对拖放对象的请求转发给远程应用程序并从远程应用程序接收拖放对象。服务器组件通过终端服务器会话将该拖放对象发送给客户机计算机系统。
客户机组件接收该拖放对象。客户机组件担当代表远程应用程序的代理放置源,包括将该拖放对象发送给本地应用程序。
提供本概述以便以简化的形式介绍将在以下详细描述中进一步描述的一些概念。该概述不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。 .
另外的特征和优点将在以下的描述中阐述,并且部分可从该描述中显而易见,或者可以从此处的教示实践中习得。本发明的特征和优点可以通过在所附权利要求中特别指出的手段和组合来认识并获取。本发明的特征将从以下描述和所附权利要求书中变得完全显而易见,或者可通过如下所述对本发明的实践而获知。
附图简述
为了描述能够获得上述和其它优点和特征的方式,将通过参考附图中示出的各具体实施例来呈现对以上简述的主题的更为具体的描述。应该理解这些附图仅描绘了各典型实施例,因此其不应被认为是对范围的限制。通过使用附图,将会用另外的特征和细节描述并解释各实施例,在附图中


图1A示出了便于将对象从本地模块拖放到远程模块的示例计算机体系结构。
图1B示出了描绘从本地模块到远程模块的拖放操作的示例桌面窗口。
图2A-2C示出了用于将对象从本地模块拖放到远程模块的示例方法的流程图。
图3A示出了便于将对象从远程模块拖放到本地模块的示例计算机体系结构。
图3B示出了描绘从远程模块到本地模块的拖放操作的示例桌面窗口。图4A-4C示出了用于将对象从远程模块拖放到本地模块的示例方法的流程图。
详细描述
本发明涉及用于在本地和远程模块之间拖放对象的方法、系统和计算机程序产品。在某些实施例中, 一对象从本地应用程序拖放到远程应用程序。客户机组件检测到桌面窗口光标己从远程应用程序的应用程序窗口界限外部移至其内部。客户机组件接收指示即将发生的拖放操作的放置通知。该放置通知指示一拖放对象要被传送到该远程应用程序。客户机组件通过终端服务器会话将传送该拖放对象的请求以及桌面窗口光标的坐标位置发送给服务器计算机系统。
服务器组件接收该请求,并将拖放对象传送通知转发给远程应用程序。服务器组件响应于接收到传送拖放对象的请求担当代表本地应用程序的代理放置源,包括从远程应用程序接收到对拖放对象的请求。服务器组件通过终端服务器会话将该对拖放对象的请求转发给客户机组件。
客户机组件通过终端服务器会话从服务器计算机系统接收该对拖放对象的请求。客户机组件担当代表远程应用程序的代理放置目标,包括将该对拖放对象的请求转发给本地应用程序并从本地应用程序接收拖放对象。客户机组件通过终端服务器会话将将该拖放对象发送给服务器计算机系统。
服务器组件通过终端服务器会话从客户机组件接收该拖放对象。服务器组件担当代表本地应用程序的代理放置源,包括将该拖放对象发送给远程应用程序。
在其它实施例中, 一对象从远程应用程序拖放到本地应用程序。客户机组件检测到桌面窗口光标已从远程应用程序的界限内部移至其外部。客户机组件通过终端服务器会话向服务器组件发送消息。该消息向服务器组件指示桌面窗口光标已从远程应用程序的应用程序窗口界限内部移至其外部。
服务器组件通过终端服务器会话从客户机组件接收消息。服务器组件确定桌面窗口光标的移动与即将发生的拖放操作相关联。
客户机组件担当代表远程应用程序的代理放置源,包括从本地应用程序接收对拖放对象的査询。该查询指示本地应用程序处表示该拖放对象将被传送到本地应用程序的放置通知。客户机组件通过终端服务器会话将该对拖放对象的请求发送给服务器组件。
服务器组件接收该请求。服务器组件担当代表本地应用程序的代理放置目标,包括将该对拖放对象的请求转发给远程应用程序并从远程应用程序接收拖放对象。服务器组件通过终端服务器会话将将该拖放对象发送给客户机计算机系统。
客户机组件接收该拖放对象。客户机组件担当代表远程应用程序的代理放置源,包括将该拖放对象发送给本地应用程序。
本发明的各实施例可以包括含有计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。本发明的范围内的各实施例也包括用于承载或其上储存有计算机可执行指令或数据结构的计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。作为示例而非限制,计算机
可读介质可包括计算机可读存储介质,如RAM、 ROM、 EEPROM、 CD-ROM
或其它光盘存储、磁盘存储或其它磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其它介质。
在本说明书和所附权利要求书中,"网络"被定义为允许在计算机系统和/或模块之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线或硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为计算机可读介质。因此,作为示例而非限制,计算机可读介质可包括可用于承载或存储计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络或数据链路。
计算机可执行指令包括例如,使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。例如,计算机可执行指令可以是二进制代码、诸如汇编语言等中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,可以在具有许多类型的计算机系统配置的网络计算环境中实践本发明,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机等等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
在本说明书和所附权利要求书中,"放置目标"被定义为要接收作为拖放操作的主体的对象的模块。
在本说明书和所附权利要求书中,"放置源"被定义为要发起作为拖放操作的主体的对象的模块。
在本说明书和所附权利要求书中,"代理放置目标"被定义为与放置源和相同的会话相关联且担当放置源和放置目标之间的中介的模块。代理放置目标可以模拟实际放置目标的功能以便于通过终端服务器会话的拖放操作。在某些实施例中,代理放置目标是模拟放置目标功能并参与终端服务器会话的管理的终端服务器会话组件。
在本说明书和所附权利要求书中,"代理放置源"被定义为与放置目标和相同的会话相关联且担当放置源和放置目标之间的中介的模块。代理放置源可以模拟实际放置源的功能以便于通过终端服务器会话的拖放操作。在某些实施例中,代理放置源是模拟放置源功能并参与终端服务器会话的管理的终端服务器会话组件。
在本说明书和所附权利要求书中,经由网络通信交换以便于拖放操作的消息一般定义如下
开始拖放(START_DRAG—DROP)消息从代理放置目标到代理放置源的指示,用于发起拖放模态循环。该消息可包括可提供的格式数据的名称和ID。
开始拖放响应(START—DRAG—DROP_RESPONSE)消息来自代理放置源的指示,指示已对放置目标开始拖放模态循环。
更新放置效果(UPDATE—DROP—EFFECT)消息指示对放置目标更新的放置效果。即,放置目标可能以该数据做什么。
14停止拖放(STOP—DRAG_DROP)消息从代理放置目标到代理放置源的指示,用于停止拖放操作。
进行拖放(DO_DRAG_DROP)消息从代理放置目标到代理放置源的指示,用于发起放置操作。指示经由网络通信发送的进行拖放消息的Drop (放置)消息可经由对象链接和嵌入("OLE")转发给放置目标。响应于Dr叩消息,放置目标可以请求代理数据对象并调用GetData (获取数据)方法。
进行拖放响应(DO_DRAG—DROP_RESPONSE)消息来自代理放置源的指示,指示拖放操作已完成(例如,响应于进行拖放消息发送)。
格式数据请求(FORMAT—DATA—REQUEST)消息当放置目标请求数据时由代理数据对象发送给代理放置源。
格式数据响应(FORMAT—DATA— RESPONSE)消息由代理放置目标发送给代理数据对象并包含任何所请求的数据。
其它消息也可经由网络交换以便于拖放操作。
图1A示出了便于将对象从本地模块拖放到远程模块的示例计算机体系结构100。计算机系统101 (例如,客户机)和计算机系统111 (例如,服务器)。计算机系统101和111可以被连接到诸如局域网("LAN")、广域网("WAN")或甚至因特网等网络。因此,计算机系统101和111处的各个组件可相互之间,以及向连接至该网络的其他组件收发数据。因此,各组件可以创建消息相关数据并通过网络(例如,网际协议("IP")数据报和利用IP数据报的其它更高层协议,诸如传输控制协议("TCP")、远程桌面协议("RDP")、超文本传输协议("HTTP")、简单邮件传输协议("SMTP")、独立计算体系结构("ICA")等)交换消息相关数据。
如图所示,计算机系统101包括应用程序102、客户机模块106以及用户界面104,而计算机系统111包括应用程序112和服务器模块116。计算机系统101和计算机系统111经由通过网络建立的终端服务器会话131(例如,RDP会话)来彼此通信。客户机组件106和服务器组件116可以互操作以便于终端服务器会话131的管理。例如,将在用户界面104处接收到的用户输入从计算机系统101传送到计算机系统111、将用户输入转发到计算机系统111处适当的远程应用程序、接收来自从计算机系统lll处的远程应用程序的输出、将远
15程应用程序输出从计算机系统111传送到计算机系统101、以及在用户界面104
处输出远程应用程序输出。由此,对于远程应用程序(从用户界面104的观点来看),在计算机系统101处接收输入并呈现输出,而处理实际上是在计算机
系统lll处发生的。
可使用虚拟通道来扩展终端服务器会话功能(例如,通过扩展RDP协议),从而允许应用程序通过终端服务器会话(例如,RDP连接)来传送应用程序专用数据。由此,除了输入和输出数据之外,可通过虚拟通道交换其它类型的数据。例如,虚拟通道121可以是被配置成将拖放对象从计算机系统101传送到计算机系统111的通道。虚拟通道121可以将客户机组件106处的拖放线程连接到客户机服务器组件116处的拖放线程,反之亦然。因此,客户机组件106和服务器组件116可以互操作来通过虚拟通道121在计算机系统101和计算机系统111处适当的应用程序之间拖放数据。
图1B示出了描绘从本地模块到远程模块的拖放操作的示例桌面窗口 123。如图所示,桌面窗口 123是用户界面104的一部分,且包括应用程序窗口 102W和远程桌面113。应用程序窗口 120W对应于应用程序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在应用程序窗口 120W的界限之内时,可显示对应用程序102的默认放置效果(例如,复制效果)。当光标133在任何应用程序窗口的界限之外时,可显示对桌面窗口 123的默认放置效果(例如,操作系统)。例如,对于桌面窗口 123,可能完全不支持拖放功能,且因此当处于用户界面104的该区域中时光标133被变换为"不允许"符号。当进入应用程序窗口 112W时,可显示对应用程序112的默认放置效果(例如,复制效果)。
方法200包括客户机组件检测到对远程应用程序桌面窗口光标已从应用程序窗口的界限外部移至其内部的动作(动作203)。例如,客户机组件106可检测光标133已从应用程序窗口 112W的界限外部移至其内部。(图1B中的虚线指示光标133从应用程序窗口 102W经过桌面窗口 123和远程桌面113到应用程序窗口 112W的路径。)
动作201、 202和203可被包括在拖放操作设置中,以将对象从本地应用程序传送到远程应用程序。当光标134悬停在应用程序窗口 112W上时,客户机组件106可调用DragEnter (拖曳进入)方法。通过DragEnter方法,客户机组件106 (担当放置目标代理)可回头向应用程序102指示其是否能接受对象126。 DragEnter方法的参数可以是以下格式HRESULT DragEnter(
IDataObject* pDataObject, 〃源数据对象(例如,对象126)。
DWORD dwKeyState, 〃键盘和鼠标状态。
POINTL pt, 〃光标位置。
DWORD* pdwDropEffect//所得放置效果。
)
通过DragEnter方法,目标(或代理目标)可通过更新pdwDropEffect参
数来指示其是否能接受可能的放置。该参数最初可包含源所允许的一组放置效
果。所得放置效果部分地基于由数据对象提供的格式,并且还可受到当前键盘
17和鼠标状态,以及可能甚至鼠标位置的影响。
随后,客户机组件106可通过虚拟通道121 (例如,剪贴板虚拟通道)向
服务器组件116发送开始拖放消息。该开始拖放消息可包括描述对象126的内容以及应用程序102的所允许的放置效果的格式名。在发送了该消息之后,通知(例如,通过操作系统事件)计算系统101处的输入处理程序拖放操作已开
始。响应于该事件,输入处理程序可禁用键盘挂钩和输入同步。为确保对格式
数据的请求可在放置发生之前得到满足,可存储对象126。
当在服务器组件116处接收到开始拖放消息时,提取描述对象126的内容和应用程序102的所允许的放置效果的格式名。作为响应,创建代理数据对象136,并创建用于服务器组件116的窗口。可以使得该窗口透明(或以其它方式隐藏),并且该窗口的大小可以很小(例如,lxl像素大小)。该窗口被给予焦点并提升到z次序的顶部。由此,可将输入引导(剪贴)到该窗口以将输入引导到服务器组件116。由此,输入可被引导到服务器组件116而不会显著地更改桌面窗口123。例如,lxl的透明窗口可能不会被用户察觉到。
响应于接收到的鼠标按下事件,服务器组件116 (代理放置源)调用DoDragDr叩(进行拖放)方法。DoDragDr叩方法的参数可以是以下格式HRESULT DoDragDropC
IDataObject* pDataObject,
IDropSource* pDropSource,
DWORD dwAllowedDropEffects
DWORD* pdwFinalDropEffect
)
DoDragDrop方法可被包括在用于方便拖放操作的模态循环中。 一般而言,为开始拖放操作, 一组件用适当的参数来调用DoDragDrop。 DoDragDrop使用SetCapture (设置捕捉)API来捕捉鼠标,然后进入一循环。
为将输入转发给服务器组件116,输入处理程序将鼠标按下事件发送给客户机组件106,并且由于鼠标已被剪切到用于服务器组件116的(可能小且透明的)窗口,因此鼠标按下事件最终被发送到服务器组件116的输入队列。鼠标按下事件的接收可用于配置对象链接和嵌入("OLE")隐藏窗口来接收系
//源数据对象。〃放置源接口。〃允许的放置效果。〃最终放置效果。统级鼠标事件消息。开始拖放响应的接收还触发客户机组件106处的方法在执行之前检査的布尔标志的切换。这增加了当服务器组件116活动时发送消息的可能性。
当光标133被拖曳到应用程序窗口 112W上时,调用DragOver (拖曳到上方)方法。DoDragDr叩方法的参数可以是以下格式HRESULT DragOver(
DWORDdwKeyState, 〃键盘和鼠标状态。POINTL pt, 〃光标位置。
DWORD* pdwDropEffect 〃所得放置效果。
)
在调用DragOver期间,可检査当前鼠标位置、鼠标按键状态和键盘状态的改变。如果检测到改变,则客户机组件106的输入处理程序将适当的鼠标移动、鼠标按键抬起或按下、或键盘按键抬起或按下消息发送给服务器组件116。服务器组件166 (代理放置源)可连续地调用QueryContinueDrag (查询连续拖曳)方法。QueryConti皿eDrag方法的参数可以是以下格式HRESULT QueryContinueDrag(
BOOL 伍scapePressed, 〃如果按下ESE则为TRUE。
DWORDdwKeyState 〃键盘和鼠标状态。
)
QueryContinueDrag方法可用于向放置源(或代理放置源)通知当前键盘和鼠标状态。基于该输入,放置源(或代理放置源)可决定继续拖曳、取消拖曳还是允许放置发生。放置源通过HRESULT返回值来指示其决定。例如,SJ)K可指示继续,DRAGDROP—SJ:ANCEL可指示取消,而DRAGDROP—S—DROP可指示允许放置。当光标133悬停在应用程序窗口 112W上时,QueryContinueDrag可返回S一OK,因为取消或放置操作尚未发生。
服务器组件116还可调用GiveFeedback (给出反馈)方法来将应用程序112的放置效果(移动、复制、链接等)返回给客户机组件106。 GiveFeedback方法的参数可以是以下格式
HRESULT GiveFeedback(
DWORD dwDropEffect 〃当前目标(例如,应用程序112)
〃放置效果。
)
一般而言,GiveFeedback方法向放置源(或代理放置源)通知当前放置效果,使得它可给出适当的视觉反馈。视觉反馈通过HRESULT返回值来指示。值S一OK意味着源适当地设置了光标,而DRAGDROP一SJJSEDEFAULTCURSORS指示源满足于使用OLE提供的默认光标。
当服务器组件116调用GiveFeedback时,应用程序112的放置效果在更新放置效果消息中通过虚拟通道121从服务器组件116发送到客户机组件106。客户机组件106存储放置效果并将放置效果返回给应用程序102 (例如,通过调用DragOver方法)。
基于计算机系统101处的鼠标和键盘状态,应用程序102最终可决定取消拖曳操作或允许放置发生。由此,在某些实施例中,取消拖曳操作(且因此不发生放置)。如果发生取消,则通过DragLeave (拖曳离开)方法通知客户机组件106 (代理放置目标),该方法例如可以是以下格式
HRESULT DragLeave();
服务器组件116的事件处理程序可存储在停止拖放消息中指示的取消结果。由此,下一次调用QueryContinueDrag时,其返回DRAGDROP—S—CANCEL,使得拖曳操作结束于计算机系统111处。
在其它实施例中,发生放置。因此,方法200包括发起放置操作的动作(动作204)。例如,应用程序102可发起放置操作以将对象126传送给应用程序112。用户可操纵输入设备来使得放置发起。例如,用户可在光标133悬停在应用程序窗口 112W上时释放鼠标的鼠标左键。
方法200包括接收指示拖放对象要被传送到远程应用程序的放置通知的
20动作(动作205)。例如,客户机组件106可接收指示对象126要作为即将发 生的拖放操作的一部分被传送给应用程序112的放置通知。方法200包括发送 将拖放对象连同桌面光标窗口的坐标位置一起传送的请求的动作(动作206)。 例如,响应于接收放置通知,客户机组件106可向服务器组件116发送进行拖 放消息以请求将对象126传送给应用程序112。进行拖放消息可通过虚拟通道 121发送,并且可包括光标133的坐标位置。
方法200包括接收传送拖放对象以及桌面光标窗口的坐标位置的请求的 动作(动作207)。例如,服务器组件116可接收请求将对象126传送给应用 程序112的进行拖放消息。当进行拖放消息到达服务器组件116处时,事件处 理程序存储要发生放置的指示。由此,当下一次调用QueryContinueDrag时, QueryContinueDrag返回DRAGDROP—S_DROP (指示要发生放置)。然而, 在返回该值之前,可向客户机组件106发送给予焦点(GIVE_FOCUS)消息。
在接收到给予焦点消息时,客户机组件106可通过调用 SetForegroundWindows (设置前台窗口) API来获得输入焦点。
服务器组件116还可通过虚拟通道121向客户机组件106发送进行拖放响 应消息。
方法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向客户机组件106发送格式数据请 求消息。格式数据请求消息请求用于应用程序102的对象126。方法200包括
21从服务器组件接收对拖放对象的请求的动作(动作213)。例如,客户机组件
106可通过虚拟通道121从服务器组件116接收格式数据请求消息。
方法200包括向本地应用程序转发对拖放对象的请求的动作(动作214)。 例如,客户机组件106可向应用程序102转发对于对象126的请求。方法200 包括接收对拖放对象的请求的动作(动作215)。例如,应用程序102可接收 对于对象126的请求。
在某些实施例中,用于格式数据请求消息的事件处理程序使用了存储在 DragEnter方法中的对拖放对象引用来执行GetData调用。当检索了格式数据 时,对其进行适当的编码。
方法200包括发送拖放对象的动作(动作216)。例如,在接收到返回的 格式和放置效果之后,应用程序102可将对象126发送给客户机组件106。方 法200包括从本地应用程序接收拖放对象的动作(动作217)。例如,客户机 组件217可从应用程序102接收对象126。
方法200包括向服务器组件发送拖放对象的动作(动作218)。例如,客 户机组件106可通过虚拟通道121向服务器组件116发送格式数据请求消息, 包括来自对象126的数据。方法200包括从客户机组件接收拖放对象的动作(动 作219)。例如,服务器组件116可通过虚拟通道121从客户机组件106接收 格式数据请求消息,包括来自对象126的数据。
方法200包括向远程应用程序转发拖放对象的动作(动作220)。例如, 服务器组件116可向应用程序112转发来自对象126的数据。方法200包括接 收拖放对象的动作(动作221)。例如,应用程序112可接收来自对象126的 数据。因此,取决于所选的放置效果,来自对象126的数据从应用程序102移 动、复制、链接、超链接或通过快捷方式到应用程序112。
在某些实施例中,适当编码的数据随后通过线路在格式数据响应消息中发 送。当在服务器组件116处接收到该格式数据响应消息之后,调用适当的事件 处理程序,并且提取并解码格式化的数据。 一旦事件处理程序完成了提取,格 式化的数据被返回给放置目标,导致本地放置目标的Dr叩方法调用完成。
当Drop调用结束时,DoDragDr叩循环终止,并且返回放置效果(例如, 给服务器组件l 16)。查询拖放对象的PerformedDr叩Effect (执行的放置效果)和LogicalPerformedDr叩Effect (逻辑上执行的放置效果)。这两个格式, 以及最终的放置效果和DoDragDrop HRESULT在进行拖放响应消息中本地发 送给客户机组件106。客户机组件116将这些结果返回给其代理Drop方法。 在接收到进行拖放响应消息之后,客户机组件106处的事件处理程序存储结果。 客户机组件116的代理Dr叩方法继续执行,用所返回的格式初始化对象126, 并将放置效果和HRESULT返回给OLE子系统。
客户机组件106 (代理放置目标)和服务器组件116 (代理放置源)可用 各种不同的方式来配置以便于实现方法200。
例如,客户机组件106 (代理放置目标)可被配置成指示拖放模态循环何 时开始。客户机组件106可通过虚拟通道121向服务器组件116发送开始拖放 消息。当处理了开始拖放消息时,服务器组件116 (代理放置源)可对应用程 序112 (放置目标)开始拖放模态循环。
客户机组件106还可被配置成发送应用程序102 (放置源)可支持的格式
列表。对DragEnter方法的参数之一是指向包含应用程序102能够提供的数据
的数据对象的指针。使用格式枚举器,从该数据对象中提取格式名,对其编码 然后将其作为开始拖放消息的参数发送,使得代理数据对象可由服务器组件
116来创建。
客户机组件106还可被配置成更新远程鼠标位置、键状态和键盘状态。就 在开始拖放模态循环之前,服务器组件116可通过虚拟通道121发送开始拖放 响应消息。当该消息由客户机组件106接收时,客户机组件106的DragOver 方法可以自由地开始将当前鼠标位置、鼠标键状态和键盘状态的更新发送给服 务器组件116。对于鼠标和键盘两者的键状态从传递给DragOver方法的参数中 获得。这些更新补偿了具有输入焦点和鼠标捕捉的应用程序102。
客户机组件106还可被配置成返回从服务器组件116接收到的最新放置效 果。服务器组件116可在应用程序112 —改变放置效果就向客户机组件106发 送更新放置效果消息。作为DragOver处理的一部分,经更新的放置效果被返 回给计算机系统101的OLE子系统以向应用程序102通知当前放置效果。
客户机组件106还可被配置成就当前拖曳操作的状态来更新服务器组件 116。如果已经调用了 DragLeave方法,则应用程序102决定取消拖放操作。因此,应用程序112应做同样的事并且调用其DragLeave方法。客户机组件106 可将适当的信息分程传送给服务器组件116以使得应用程序112调用其 DragLeave方法。
客户机组件106还可被配置成如果发生放置则存储指向对象126的指针。 如果发生放置,则应用程序112可请求对象126。为帮助确保可返回对象126, 客户机组件106可存储指向在Drop调用中接收到的对象126的指针。由此, 当以格式数据请求消息的形式接收到对于对象的请求时,客户机组件116可通 过对所保存的对象126执行GetData调用来提供适当的格式数据,并且在格式 数据响应消息中返回该数据。
服务器组件116可被配置成创建通告正确的格式名的代理数据对象。开始 拖放消息参数之一是应用程序112能够提供的格式列表。在开始远程模态循环 之前,创建并用这些格式名来填充代理数据对象。所创建的数据对象然后作为 DoDragDrop调用中的参数传递给计算机系统111的OLE子系统。由此,远程 会话内的放置目标能够在发生放置时査询格式并检索数据。
服务器组件116还可被配置成将当前放置效果分程传送给客户机组件 106。应用程序112返回给计算机系统111的OLE子系统的放置效果作为 GiveFeedback调用的一部分被传递给客户机组件106。该放置效果通过虚拟通 道121在更新放置效果消息中发送给计算机系统101,使得客户机组件106可 在调用其DragOver方法时返回该放置效果。
服务器组件116还可被配置成当由客户机组件106指示时发起取消或放 置。当在计算机系统101处发生放置或取消操作时,可调用客户机组件106的 Drop或DragLeave方法。当发生这一情况时, 一消息被发送给服务器组件116, 使得下一次调用QueryConti皿eDrag时,可向计算机系统111的OLE子系统返 回正确的HRESULT 。如果接收到开始拖放消息,则返回 DRAGDROP_S—CANCEL 。 如果接收到进行拖放消息,贝U返回 DRAGDROP—S一DROP。否则,返回S_OK并且模态循环继续。
代理对象136可在接收到开始拖放消息时创建。代理对象136本质上通过 返回对象126所通告的相同的格式来模拟对象126。当从代理对象136请求数 据时,其向计算机系统101发送格式数据请求消息。客户机组件106然后可从对象126检索数据,并在格式数据响应消息中发回该数据。
因此,本发明的各实施例可方便将对象从远程模块拖放到本地模块。
图3A示出了便于将对象从远程桌面模块拖放到本地桌面模块的示例计算
机体系结构300。计算机系统301 (例如,客户机)和计算机系统311 (例如, 服务器)。计算机系统301和311可以被连接到诸如局域网("LAN")、广 域网("WAN")或甚至因特网等网络。因此,计算机系统301和311处的 各个组件可相互之间,以及向连接至该网络的其他组件收发数据。因此,各组 件可以创建消息相关数据并通过网络(例如,网际协议("IP")数据报和利 用IP数据报的其它更高层协议,诸如传输控制协议("TCP")、远程桌面协 议("RDP")、超文本传输协议("HTTP")、简单邮件传输协议("SMTP")、 独立计算体系结构("ICA")等)交换消息相关数据。
如图所示,计算机系统301包括应用程序302、客户机模块306以及用户 界面304,而计算机系统111包括应用程序312和服务器模块316。计算机系 统301和计算机系统311经由通过网络建立的终端服务器会话331(例如,RDP 会话)来彼此通信。客户机组件306和服务器组件316可以互操作以便于终端 服务器会话331的管理。例如,将在用户界面304处接收到的用户输入从计算 机系统301传送到计算机系统311、将用户输入转发到计算机系统311处适当 的远程应用程序、接收来自从计算机系统311处的远程应用程序的输出、将远 程应用程序输出从计算机系统311传送到计算机系统301、以及在用户界面304 处输出远程应用程序输出。由此,对于远程应用程序(从用户界面304的观点 来看),在计算机系统301处接收输入并呈现输出,而处理实际上是在计算机 系统311处发生的。
虚拟通道321可以是被配置成将拖放对象从计算机系统311传送到计算机 系统301的通道。虚拟通道321可以将客户机组件306处的拖放线程连接到服 务器组件316处的拖放线程,反之亦然。因此,客户机组件306和服务器组件 316可以互操作来通过虚拟通道321在计算机系统301和计算机系统311处的 适当应用程序之间拖放数据。
图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,可能完全不支持拖放功能,且因此当处于用户界面304的该区域中时 光标333被变换为"不允许"符号。当进入应用程序窗口 302W时,可显示对 应用程序302的默认放置效果(例如,移动效果)。
方法400包括客户机组件检测到桌面窗口光标已从远程应用程序窗口的 界限外部移至其内部的动作(动作403)。例如,客户机组件306可检测到光 标333已从应用程序窗口 302W的界限外部移至其内部。(图3B中的虚线指 示光标333从应用程序窗口 312W经过远程桌面313和桌面窗口 323到应用程
26序窗口 302W的路径。)
方法400包括发送指示桌面窗口光标已移动的消息的动作(动作404)。 例如,客户机组件306可通过虚拟通道321向服务器组件316发送鼠标已离开 (MOUSE—HAS—LEFT)消息。鼠标已离开消息指示光标333以移至应用程序 窗口312的外部(和/或移出远程桌面313)。方法400包括接收指示桌面窗口 光标已移动的消息的动作(动作405)。例如,服务器组件316可通过虚拟通 道321从客户机组件116接收鼠标己离开消息。
方法400包括确定桌面窗口光标的移动与即将发生的拖放操作相关联的 动作(动作406)。例如,服务器组件316可确定将光标移至应用程序窗口 313 的界限之外与对于对象326的拖放操作相关联。服务器组件316可调用公共对 象模型("COM" ) API来查询是否有实际的拖放操作即将发生,或者鼠标是 否出于其它原因而移动。
动作401、 402、 403、 404和405可以作为设置从远程模块到本地模块的 拖放操作的一部分来包括。例如,当用户在客户机窗口中按下鼠标按键时,该 鼠标由输入处理程序窗口捕捉。当鼠标被拖曳时,可重复地检查该鼠标以确定 是否仍悬停在输入处理程序窗口上。如果鼠标未悬停在输入处理程序窗口上, 则可能已经开始了从远程模块向本地模块的拖曳。在检测到鼠标离开远程模块 之后,通过虚拟通道将鼠标已离开消息发送给服务器组件316。
在接收到该消息之后,服务器组件316被转换成为代理放置目标。向代理 放置目标的转换可使用至少两种不同的机制来实现。 一种机制包括最大化阿尔 法混合的拖放窗口以填满整个会话屏幕可操作区域(real-estate),然后迫使阿 尔法混合的拖放窗口到z次序的顶部。另一种机制包括调用OLEAPI。
在转换为代理放置目标服务器之后,组件316可在远程会话中担当代理放 置目标。例如,在成为代理放置目标之后,可对服务器组件316调用DragEnter 方法。DragEnter方法使得对象326被存储并且开始拖放消息被发送给客户机 组件306。
开始拖放消息可由客户机组件306处的事件处理程序来处理。事件处理程 序可提取格式名和允许的放置效果。作为响应,客户机组件306可发起进行模 态循环(DO一MODALJX)OP)事件以通知计算机系统301的输入处理程序,要
27幵始本地拖放循环。在接收到进行模态循环事件之后,输入处理程序构造代理
对象328并将拖放通知事件重定向到客户机组件306。由此,使得客户机组件 306转换为代理放置源。
拖放通知事件可通过禁用拖放线程上的事件宿,并对客户机组件306启用 特别创建的事件宿来重定向。在开始DoDragDrop模态循环之前,可向拖放线 程发信号通知循环将要开始。作为响应,客户机组件306可以向服务器组件316 发送开始拖放响应消息。在接收到开始拖放响应消息之后,服务器组件316可 以自由地向客户机组件306发送拖放消息,诸如,例如进行拖放和停止拖放消 息。
然而,当鼠标正在应用程序窗口 302W中到处拖曳时,各种鼠标和键盘按 键事件可能是感兴趣的。应用程序312(远程应用程序)上的QueryContinueDrag 可用于获得对该信息的更新。为用当前输入状态更新服务器组件316,输入处 理程序发送适当的鼠标按键提起或按下以及键盘按键提起或按下。在客户机组 件306上调用GiveFeedback方法以通过利用更新放置效果消息用应用程序302 返回的放置效果来更新服务器组件316。在计算机系统311处,存储放置效果, 并且稍后在服务器组件316调用的DragOver方法中返回该效果。
基于计算机系统301处的鼠标和键盘状态,应用程序312最终可决定取消 拖曳操作或允许放置发生。由此,在某些实施例中,取消拖曳操作(且因此不 发生放置)。如果发生取消,则通过DragLeave (拖曳离开)方法通知服务器 组件316 (代理放置目标)。
响应于取消,服务器组件316还可向客户机组件306发送停止拖放消息。 在发送了停止拖放消息之后,可释放对象326。客户机组件306的事件处理程 序可存储在停止拖放消息中指示的取消结果。由此,下一次调用 QueryContinueDrag时,其返回DRAGDROP—S_CANCEL,使得拖曳操作结束 于计算机系统301处。
在其它实施例中,发生放置。当用户将鼠标在本地应用程序窗口 302W上 到处移动时,用户可释放鼠标按键。当鼠标按键被释放时,客户机组件306通 过虚拟通道321向服务器组件316指示该释放。作为响应,服务器组件316可 向客户机组件306发送进行拖放消息以请求将对象326传送到应用程序302。服务器组件316可向应用程序302发送进行拖放消息的指示。客户机组件306 可通过虚拟通道321向服务器组件316发送进行拖放响应消息。
方法400包括发送对拖放对象的査询的动作(动作407)。例如,响应于 进行拖放消息的指示,应用程序302可查询代理对象328。方法400包括从本 地应用程序接收对拖放对象的査询的动作(动作408)。例如,客户机组件306 可从应用程序302接收对于对象326的查询。
方法400包括从服务器组件接收对拖放对象的请求的动作(动作409)。 例如,客户机组件306可通过虚拟通道321向服务器组件316发送格式数据请 求消息。格式数据请求消息请求用于应用程序312的对象326。方法400包括 从客户机组件接收对拖放对象的请求的动作(动作410)。例如,服务器组件 316可通过虚拟通道321从客户机组件306接收格式数据请求消息。
方法400包括向远程应用程序转发对拖放对象的请求的动作(动作411)。 例如,服务器组件316可向应用程序312转发对于对象326的请求。方法400 包括接收对拖放对象的请求的动作(动作412)。例如,应用程序312可从服 务器组件316接收对于对象326的请求。
方法400包括发送拖放对象的动作(动作413)。例如,应用程序312可 向服务器组件316发送对象326。方法400包括从远程应用程序接收拖放对象 的动作(动作414)。例如,服务器组件316可从应用程序312接收对象326。
方法400包括向客户机组件发送拖放对象的动作(动作415)。例如,服 务器组件316可通过虚拟通道321向客户机组件306发送格式数据请求消息, 包括来自对象326的数据。方法400包括从服务器组件接收拖放对象的动作(动 作416)。例如,客户机组件306可通过虚拟通道321从服务器组件306接收 格式数据请求消息,包括来自对象326的数据。
方法400包括向本地应用程序转发拖放对象的动作(动作417)。例如, 客户机组件306可向应用程序312转发来自对象326的数据。方法400包括请 求拖放对象的动作(动作418)。例如,应用程序302可从客户机组件306接 收来自对象306的数据。因此,取决于所选的放置效果,来自对象326的数据 从应用程序312移动、复制、链接、超链接或通过快捷方式到应用程序302。
客户机组件306 (代理放置源)和服务器组件316 (代理放置目标)可用各种不同的方式来配置以便于实现方法400。
例如,客户机组件306 (代理放置源)可被配置成创建通告正确格式名的 代理数据对象、将当前放置效果分程传送到服务器组件316、当服务器组件316 指令时指示取消或放置、以及更新应用程序窗口 312W内的鼠标键状态和键盘 状态。可使用QueryContinueDrag方法来接收包含键盘键和鼠标按键状态的键 状态向量。键盘键和鼠标按键状态可通过虚拟通道321被发送给服务器组件 316。
服务器组件316 (代理放置目标)可被配置成指示拖放模态循环何时开始、 发送应用程序312能提供的格式列表、将从客户机组件306接收到的最新放置 效果返回给应用程序312、就即将发生的拖放操作的状态来更新客户机组件 306、以及如果发生放置则存储指针对象326。
代理数据对象328可在接收到开始拖放消息时创建。代理对象328本质上 通过返回对象326所通告的相同的格式来模拟对象326。当从代理数据对象328 请求数据时,其向计算机系统311发送格式数据请求消息。服务器组件316然 后可从对象326检索数据,并在格式数据响应消息中发回该数据。
因此,本发明的各实施例可方便将对象从远程模块拖放到本地模块。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所述实施例 在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附 权利要求书而非前述说明书来指示。落入权利要求书的等效方式的含义和范围 内的所有改变应被权利要求书的范围涵盖。
30
权利要求
1. 一种在计算机系统(101)处的方法,所述计算机系统包括在所述计算机系统(101)处运行的本地应用程序(102)和客户机组件(106),所述客户机组件(106)参与与在服务器计算机系统(111)处的服务器组件(116)的终端服务器会话(131),所述方法用于使用拖放来将对象从所述本地应用程序(102)传送到所述服务器计算机系统(111)处的远程模块,所述方法包括所述客户机组件(106)检测桌面窗口光标(133)已从远程应用程序(112)的应用程序窗口(112W)的界限外部移至其内部的动作;所述客户机组件(106)接收指示即将发生的拖放操作的放置通知的动作,所述放置通知指示拖放对象(126)要被传送到所述远程应用程序(112)所述客户机组件(106)响应于接收到所述放置通知,通过所述终端服务器会话(131)向所述服务器计算机系统(111)发送传送所述拖放对象(126)的请求以及所述桌面窗口光标(133)的坐标位置的动作;所述客户机组件(106)通过所述终端服务器会话(131)从所述服务器计算机系统(111)接收对所述拖放对象的请求的动作;所述客户机组件(106)响应于接收到对所述拖放对象(126)的请求担当代表所述远程应用程序(112)的代理放置目标,包括将对所述拖放对象的请求(126)转发给所述本地应用程序(102)的动作;以及响应于对所述拖放对象(126)的请求从所述本地应用程序(102)接收所述拖放对象(126)的动作;以及所述客户机组件(106)通过所述终端服务器会话(131)向所述服务器计算机系统(111)发送所述拖放对象(126)以便传递到所述远程应用程序(112)的动作。
2. 如权利要求l所述的方法,其特征在于,还包括 将所述客户机组件配置为代理放置目标,使得所述客户机组件可从所述本地应用程序接收拖放对象的动作。
3. 如权利要求l所述的方法,其特征在于,还包括接收从本地应用程序窗口内选择拖放对象的用户输入的动作,所述本地应 用程序窗口表示用于所述本地应用程序的用户界面;以及修改桌面窗口光标以可视地表示拖放对象已被选中的动作。
4. 如权利要求l所述的方法,其特征在于,所述检测桌面窗口光标已从 远程应用程序的应用程序窗口的界限外部移至其内部的动作包括检测所述桌 面窗口光标从本地应用程序窗口的界限内部移至所述远程应用程序的应用程 序窗口的界限内部的动作。
5. 如权利要求1所述的方法,其特征在于,所述客户机组件接收指示即将发生的拖放操作的放置通知的动作包括检测输入设备上的按键的状态改变 的动作。
6. 如权利要求1所述的方法,其特征在于,所述客户机组件通过所述终端服务器会话向所述服务器计算机系统发送传送所述拖放对象的请求以及所 述桌面窗口光标的坐标位置的动作包括通过所述终端服务器会话的虚拟通道 发送消息的动作。
7. 如权利要求1所述的方法,其特征在于,所述客户机组件通过所述终端服务器会话向所述服务器计算机系统发送传送所述拖放对象的请求以及所 述桌面窗口光标的坐标位置的动作包括通过远程桌面协议会话发送消息的动 作。
8. —种在计算机系统(111)处的方法,所述计算机系统(111)包括在 所述计算机系统(111)处运行的一个或多个远程应用程序(112)以及服务器 组件(116),所述服务器组件(116)参与与在客户机计算机系统(101)处 的客户机组件的终端服务器会话(131),在所述计算机系统(111)处运行的 所述一个或多个远程应用程序(112)被配置成由所述客户机计算机系统(101) 通过所述终端服务器会话(131)来远程地访问,所述方法用于使用拖放来将 对象从所述客户机计算机系统(101)处的模块传送到所述一个或多个远程应 用程序(112)之一,所述方法包括所述服务器组件(116)接收将拖放对象(126)传送到所述计算机系统(111) 的请求以及指示所述客户机计算机系统(110)处的桌面窗口光标(133)的坐标的坐标位置的动作,所述请求和坐标位置通过所述终端服务器会话(131) 来发送;所述服务器组件(116)将拖放对象传送通知转发给对应于所述坐标位置 的远程应用程序的动作;所述服务器组件(116)响应于接收所述传送拖放对象(126)的请求担当 代表所述客户机计算机系统(101)处的应用程序(102)的代理放置源,包括 所述服务器组件(116)从所述远程应用程序(112)接收对所述拖放对象(126) 的请求的动作;所述服务器组件(116)通过所述终端服务器会话(131)将对所述拖放对 象(126)的请求转发给所述客户机组件(106)的动作;所述服务器组件(116)通过所述终端服务器会话(131)从所述客户机组 件(106)接收所述拖放对象(126)的动作;以及所述服务器组件(116)响应于接收所述拖放对象(126)担当代表所述客 户机计算机系统(101)处的所述应用程序(102)的代理放置源,包括所述服 务器组件(116)向所述远程应用程序(112)发送所述拖放对象(126)的动 作。
9. 如权利要求8所述的方法,其特征在于,所述服务器组件接收将拖放 对象传送到所述计算机系统的请求以及指示在所述客户机计算机系统处的桌 面窗口光标的位置的坐标位置的动作包括通过所述终端服务器会话的虚拟通 道来接收消息的动作。
10. 如权利要求8所述的方法,其特征在于,还包括 创建代理对象以模拟由所述拖放对象通告的格式的动作。
11. 如权利要求8所述的方法,其特征在于,还包括 将所述服务器组件配置为代理放置源,使得所述服务器组件可向所述远程应用程序提供拖放对象的动作。
12. 如权利要求8所述的方法,其特征在于,还包括 所述服务器组件发起拖放模态循环的动作。
13. —种在计算机系统(301)处的方法,所述计算机系统(301)包括在 所述计算机系统(301)处运行的本地应用程序(302)和客户机组件(306),所述客户机组件(306)参与与在服务器计算机系统(311)处的服务器组件(316) 的终端服务器会话(331),所述方法用于使用拖放来将对象从所述服务器计 算机系统处的远程模块传送到所述本地应用程序(302),所述方法包括所述客户机组件(306)检测桌面窗口光标(333)已从远程应用程序(312) 的应用程序窗口 (312W)的界限内部移至其外部的动作;所述客户机组件(306)通过所述终端服务器会话(331)向所述服务器组 件(316)发送消息的动作,所述消息向所述服务器组件(316)指示所述桌面 窗口光标(333)已从所述远程应用程序(312)的应用程序窗口 (312W)的 界限内部移至其外部;所述客户机组件(306)响应于接收到对所述拖放对象(326)的请求担当 代表所述远程应用程序(312)的代理放置源,包括所述客户机组件(306)从 所述本地应用程序(302)接收对拖放对象的查询的动作,所述查询指示所述 本地应用程序(302)处表示所述拖放对象(326)将被传送给所述本地应用程 序(302)的放置通知;所述客户机组件(302)向所述服务器组件(316)发送对所述拖放对象(326) 的请求的动作,所述请求响应于所述查询通过所述终端服务器会话(331)来 发送,所述请求向所述服务器组件(316)指示所述本地应用程序(302)正请 求所述拖放对象(326);所述客户机组件(306)通过所述终端服务器连接(311)从所述服务器计 算机系统(311)接收所述拖放对象(326)的动作;以及所述客户机组件(306)响应于接收所述拖放对象(326)担当代表所述远 程应用程序(312)的代理放置源,包括所述客户机组件(306)向所述本地应 用程序(302)发送所述拖放目标(326)的动作。
14. 如权利要求13所述的方法,其特征在于,所述客户机组件检测桌面 窗口光标已从远程应用程序的应用程序窗口的界限内部移至其外部的动作包 括检测所述桌面光标窗口己从远程应用程序的所述应用程序移至所述本地应 用程序的本地应用程序窗口的动作。
15. 如权利要求13所述的方法,其特征在于,还包括 创建代理对象以模拟由所述拖放对象通告的格式的动作。
16. 如权利要求13所述的方法,其特征在于,还包括将所述客户机组件配置为代理放置源,使得所述客户机组件可向所述客户 机组件提供拖放对象的动作。
17. 如权利要求13所述的方法,其特征在于,还包括接收从远程应用程序的应用程序窗口内选择拖放对象的用户输入的动作, 所述应用程序窗口表示用于所述远程应用程序的用户界面;以及 修改桌面窗口坐标以可视地表示拖放对象己被选中的动作。
18. —种在计算机系统(311)处的方法,所述计算机系统(311)包括在 所述计算机系统(311)处运行的一个或多个远程应用程序(312)和服务器组 件(306),所述服务器组件(306)参与与在客户机计算机系统(301)处的 客户机组件(306)的终端服务器会话(331),在所述所述计算机系统(311) 处运行的所述一个或多个远程应用程序(312)被配置成可由所述客户机计算 机系统(301)通过所述终端服务器会话(331)来远程地访问,所述方法用于 使用拖放来将对象从远程应用程序(312)传送到所述客户机计算机系统(301) 处的模块,所述方法包括所述服务器组件(316)通过所述终端服务器会话(331)从所述客户机组 件(306)接收消息的动作,所述消息向所述服务器组件(316)指示桌面窗口 光标(333)己从对应于所述客户机计算机系统(311)处的远程应用程序(312) 的应用程序窗口 (312W)的界限内部移至其外部;所述服务器组件(316)确定所述桌面窗口光标(333)的移动与即将发生 的拖放操作相关联的动作;所述服务器组件(316)从所述客户机组件(306)接收对拖放对象(326) 的请求的动作,所述请求响应于来自所述客户机计算机系统(301)处的应用 程序(302)的对所述拖放对象(326)的査询通过所述终端服务器会话(331) 发送,所述请求向所述服务器组件(316)指示所述客户机组件(306)处的所 述应用程序(302)正向所述远程应用程序(312)请求所述拖放对象(326);所述服务器组件(316)响应于接收对所述拖放对象(326)的请求担当代 表所述客户机计算机系统(311)处的所述应用程序(316)的代理放置目标, 包括将对所述拖放对象(326)的请求转发给所述远程应用程序(312) 的动作;以及接收响应于对所述拖放对象(326)的请求从所述远程应用程序(312) 发送的所述拖放对象(126)的动作;以及所述服务器组件(316)通过所述终端服务器会话(331)向所述客户机计 算机系统(310)发送所述拖放对象以传送到所述客户机计算机系统(301)处 的所述应用程序(302)的动作。
19. 如权利要求18所述的方法,其特征在于,还包括-将所述服务器组件配置为代理放置目标,使得所述服务器组件能从所述远程应用程序接收拖放对象的动作。
20. 如权利要求18所述的方法,其特征在于,所述服务器组件通过所述 终端服务器会话向所述客户机计算机系统发送所述拖放对象的动作包括所述 服务器组件通过远程桌面协议会话的虚拟通道发送所述拖放对象的动作。
全文摘要
本发明涉及用于在本地和远程模块之间拖放对象的方法、系统和计算机程序产品。终端服务器组件模拟拖放操作中的参与者的功能以便于在本地和远程模块之间以及在远程和本地模块之间拖放对象。终端服务器组件本地交互以便与参与拖放操作的模块通信。终端服务器组件还通过终端服务器会话发送消息以将适当的拖放信息分程传送给终端服务器会话的另一端的相应终端服务器组件。
文档编号G06F15/16GK101467139SQ200780021223
公开日2009年6月24日 申请日期2007年2月13日 优先权日2006年6月9日
发明者C·M·卡特-舒温德勒, E·索尔, N·Y·阿布多 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1