Abstract:
A framework for providing user interaction with one or more networked devices. The invention allows for user configuration of networked computers such that each of the networked computer input and output devices interact with one another in a prescribed manner. The configuration associates relative geographic relationships for each networked computer using agent modules located on each networked computer that keeps track of the current location of a cursor based upon the geographic relationships. If the current cursor position corresponds to another networked computer, an agent module blocks incoming input streams so that they are not processed by the local computer, and transmits the input device signals to a remote agent module corresponding to the remote networked computer. The remote computer agent module injects the input device instructions into the remote system, which causes the remote computer to process the input stream from the local computer.

Description:
TECHNICAL FIELD  
       [0001]     This invention is related to control of computers, and more specifically to controlling computers via an input device.  
       BACKGROUND OF THE INVENTION  
       [0002]     The day-to-day experience of many knowledge workers typically consists of exposure to a number of computers. For example, a user may have a main office machine, a mobile machine (such as a laptop or PDA), a home machine, and the occasional foreign machines (e.g., airport kiosks, conference room PC, other user machines). Despite the fact that the same person may be using each of these machines, the machines themselves are ignorant of the each other.  
         [0003]     In some situations, the user may wish to interact with multiple computers in a manner such that work created on one machine can be transmitted to another machine without requiring traditional data transfer mechanisms (e.g., portable storage devices such as drives or memory, or email) or an explicit copy step. For example, a user may wish to show a co-worker a word processing document in progress.  
         [0004]     In other situations, a user may wish to interact with multiple computers to provide the user with access to various input and output devices at the same time, even if they are associated with different computers. For example, the user may wish to display a presentation on a conference room computer by manipulating a laptop or handheld portable computing device, e.g., PDA.  
       SUMMARY OF THE INVENTION  
       [0005]     The following presents a simplified summary of the invention in order to provide a basic understanding of some aspects of the invention. This summary is not an extensive overview of the invention. It is not intended to identify key/critical elements of the invention or to delineate the scope of the invention. Its sole purpose is to present some concepts of the invention in a simplified form as a prelude to the more detailed description that is presented later.  
         [0006]     The present invention disclosed and claimed herein, in one aspect thereof, comprises a framework for providing user interaction with one or more other networked computing devices through a first computing device. User interaction with multiple networked machines provides an improved user experience and increases overall user productivity. The invention provides an agent component that facilitates manual and automatic configuration of networked computer devices such that each of the networked computing devices input and output devices interact with one another in a prescribed manner.  
         [0007]     In another aspect thereof, the user manually configures the agent component resident on a local computing system to facilitate switching of the local input device signals to a remote computing system such that the agent of the remote computing system allows the local input device(s) to control the remote computing system. The remote input devices can also be used to control the remote computing system at the same time as the local computing devices. When the user manually signals the remote computing system that local input device control is to be switched back to the local computing system, the remote computing system signals the remote agent, the remote agent signals the local agent, and the local agent switches the local input device signals to the local computing device inputs.  
         [0008]     One method of manually switching local control to remote control is accomplished by the user pressing a button or a key (e.g., on a keyboard, or a mouse button) or voicing a command, in response to which the local agent switches local input device control to the remote computing system. Another method of manual switching that can be employed alternatively to or in combination with the above method, includes configuring a switching location of the local user interface (UI) to automatically respond to the presence of a user interface pointer in that location. Thus, when the user moves the pointer to the switching location, the local computing system signals the local agent to perform the switching function to switch the local input device signals to the remote computing system. The local agent signals the remote agent, and the remote agent routes the local input device signals to the inputs of the remote system. Similarly, manual signaling to switch remote control back to local control can be accomplished by pressing a different button or key of the local input device and/or by configuring one or more locations of the remote user interface to automatically respond to the presence of a user interface pointer in those locations. When the pointer and the location coincide, the remote computing system signals the remote agent, the remote agent signals the local agent, and the local agent no longer routes the local input device signals to the remote computing system, but routes them only to the local computing system.  
         [0009]     In yet another aspect thereof, the remote control aspect by the local computing system only occurs if the remote computing system has been properly authenticated as a member of a group of systems authorized to take part in such an exchange. This can be done manually or automatically. If manually, when the remote system is brought into a geographical area of the local system, the remote system is connected to the network, and manually configured in accordance with a network database to be a member of the group such that remote control can be performed. If automatically, when the remote system is brought into the area of the local system, the remote system automatically authenticates to the network. The network further authenticates the remote system against the network database of authorized members of the group, and then allows the local and remote agents to communicate to facilitate the control aspects of the present invention.  
         [0010]     In still another aspect of the present invention, the relative location of the remote computing system to the local computing system determines where the one or more switching locations of the user interface will be created. This can be determined manually or automatically. The remote computing system can be placed to the left of the local system, to the right, above, below, to the left and above, etc. Accordingly, it is intuitive that the UI switching location be created near the physical location of the remote computing system. Manually, the user will then configure the local computing system to include the switching location approximately on an imaginary line that extends, generally, from the center of the UI to the remote computing system.  
         [0011]     In yet another aspect thereof, the location of the remote computing system relative to the local computing system is determined automatically. This can be accomplished using, for example, a wireless triangulation system that can sense a unique tag of each of the computing systems, which tag is associated with a different physical location. The local computing system in cooperation with the local agent can then further automatically create the switching location on the UI for the user. In either case, the local computing system and the local agent will then respond when the pointer and the switching location coincide, and switch the local input device control to the remote system. Similarly, now that the relative locations are known, the remote computing system will have a corresponding remote switching UI location that can be manually or automatically created such that the user can disable remote control by moving the remote UI pointer to the remote UI switching location, which causes the remote system to signal the remote agent. The remote agent then signals the local agent to disable switching of the local input signals to the remote computing system.  
         [0012]     In a robust implementation, the full geometric relationship of the remote computing system to the local computing system can be automatically determined. That is, whether the remote computing system is placed to the left of the local system, to the right, above, below, to the left and above, facing the local system, etc. This further facilitates the automatic configuration of the corresponding UI switching locations on both the local and remote systems.  
         [0013]     In another aspect thereof, the present invention utilizes extended copy and paste functionality through the computing device system clipboard, and in combination with the agent component, provides the capability to share content (e.g., text, images, multimedia, etc.) between networked computers or systems. In a similar manner to current copy/paste implementations, the user selects the content to be copied, performs a copy operation on the content, and the selected content is automatically copied to the system clipboard on the local computing system. In an automated implementation, the local agent, sensing that the local clipboard has the content data, signals the remote computing system that clipboard data is forthcoming. The local clipboard data is then transmitted to the remote agent, and then to the remote clipboard. An application of the remote system can then access the remote clipboard data, and manipulate the data, as desired (e.g., open in a document, and save to a different location). In a manual implementation, the local agent, sensing that the local clipboard has the content data, signals the user that clipboard content is available for transmission. The user then initiates transmission of the local clipboard data to the remote computing system.  
         [0014]     To facilitate the data transfer, the local agent encapsulates the local clipboard content and transmits the content to the remote agent module. The encapsulated content can include various attributes that describe characteristics about the content such as content types, restrictions, etc. The remote agent verifies whether the encapsulated content can be copied to the remote clipboard. In one embodiment, the encapsulated content is transferable, as the remote agent places the content on the clipboard of the remote machine for manipulation.  
         [0015]     In another aspect of the present invention, the encapsulated copied content can be transmitted to some or all networked computers. Alternatively, the encapsulated contented can be transmitted to any number of networked computers that are currently being used. Computing system authentication occurs in the same manner as described above, so that every remote computing system must be authenticated as a member of a group authorized to receive the clipboard data.  
         [0016]     In yet another aspect thereof, a modified user interface is provided via the agent module that facilitates interaction between a networked computer and a mobile and/or handheld computing device having a stylus-based input device (e.g., PDA).  
         [0017]     To the accomplishment of the foregoing and related ends, certain illustrative aspects of the invention are described herein in connection with the following description and the annexed drawings. These aspects are indicative, however, of but a few of the various ways in which the principles of the invention may be employed and the present invention is intended to include all such aspects and their equivalents. Other advantages and novel features of the invention may become apparent from the following detailed description of the invention when considered in conjunction with the drawings. 
     
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0018]      FIG. 1  illustrates an agent component that facilitates the present invention.  
         [0019]      FIG. 2  illustrates a more detailed block diagram of a head-to-head arrangement of a local computing system and a remote computing system operating in accordance with the present invention.  
         [0020]      FIG. 3  illustrates a flow chart of a general process for implementation and utilization input device control in accordance with the present invention.  
         [0021]      FIG. 4  illustrates a more detailed flow chart of a process for configuring and operating the present invention.  
         [0022]      FIG. 5  illustrates an implementation of the novel aspects of the present invention in accordance with two desktop computer systems.  
         [0023]      FIG. 6  illustrates a multi-computer implementation where a first computer can route input device data to a third computer through a second computer using novel aspects of the agent component of the present invention.  
         [0024]      FIG. 7  illustrates a data transfer implementation that can be utilized in accordance with the present invention.  
         [0025]      FIG. 8  illustrates a flow chart of the process for copying content from a local system to a remote system utilizing an agent of the present invention.  
         [0026]      FIG. 9  illustrates implementation of a stylus-based device in accordance with aspects of the present invention.  
         [0027]      FIG. 10  illustrates a sample UI of a computer system for accommodating the novel aspects of the present invention.  
         [0028]      FIG. 11  illustrates a portable device that employs a user interface to emulate a touch pad for interacting with a remote computing device in accordance with capabilities of the agent component of the present invention.  
         [0029]      FIG. 12  illustrates a block diagram of a computer operable to execute the disclosed architecture.  
         [0030]      FIG. 13  illustrates a schematic block diagram of an exemplary computing environment in accordance with the present invention. 
     
    
     DETAILED DESCRIPTION OF THE INVENTION  
       [0031]     The present invention is now described with reference to the drawings, wherein like reference numerals are used to refer to like elements throughout. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the present invention. It may be evident, however, that the present invention may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to facilitate describing the present invention.  
         [0032]     As used in this application, the terms “component” and “system” are intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on a server and the server can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers.  
         [0033]     The disclosed invention, in one implementation thereof, provides a system that automatically replicates files between at least two user-computing devices to provide a seamless data processing experience. Once the user document (or data) structure is automatically updated on each machine, the user no longer has to remember how document structures differ from machine to machine. Replicating some or all of the user documents eliminates the need for the user to decide which files are needed on which machine, and makes explicit any document versioning issues.  
         [0034]     In another implementation, user computing devices can be grouped such that when members of the device group are physically close together, the devices can be linked such that one or more of the input devices of one machine can be used with each of the other computing devices. Virtual screen connections allow the user to use, for example, a mouse, of a device to which it is physically connected, to control the cursor (or pointer) for any of the other devices. Having the capability to forward all input device data allows, for example, a keyboard to follow the mouse location reducing the need for an external keyboard for all devices. For example, when a PocketPC device is docked and in the group of devices, a keyboard of a main machine can be used in accordance with the present invention to speed data entry into the PocketPC. Similarly, the user can utilize the same mouse and keyboard of a local machine to control a laptop grouped in communication with the local machine—without having to connect any new cables to the laptop in order to use the laptop.  
         [0035]     Similar to the sharing of input devices, output devices can be shared. Using Remote Desktop Protocols (RDP) a running application can be wrapped and transmitted to another computer to be displayed on the available screens. This allows an image displayed on a laptop to be displayed on the desktop computer, which typically has a display with higher resolution and better color palette.  
         [0036]     Moreover, new user interfaces can be built that take advantage of the knowledge of other owned devices, for both input and output. For example, a docked PocketPC can provide a continuously available task switcher or start menu for the computer to which it is docked. Furthermore, a section of one screen could be replicated on another device screen to provide a “ScreenCut”. Consider that if one machine was used for editing a web page, a second machine can be used to view the result in a browser. The user can drag a rectangle around the browser Reload button, and copy it to the editing machine. On the editing machine, this button shows up as a floating palette that is updated with the original region and forwards all mouse or keyboard events. Now, as the user works on the editing machine, he or she can cause the viewing machine to reload the web page just by clicking on this ScreenCut. The floating palette could be positioned anywhere that is convenient for the user and even scaled to make the duplicated elements easier to work with. In the end, the disclosed invention facilitates these capabilities such that either the application or the user can control this.  
         [0037]     Consider, for example, a POWERPOINT brand of presentation program by Microsoft Corporation, operating across all available devices. The editing windows can be placed on the various display desktops, using shortcuts to common operations on the docked PocketPC, with the final view of the current slide presented on the nearby laptop. In addition, a user can place task-related items on multiple screens just as they would position paper piles on their desktop, leveraging the excellent spatial memory abilities of the user.  
         [0038]     Traditionally, the user must manually select an output device and location for data monitoring tasks. An exception to this is MESSENGER, by Microsoft Corporation, which automatically selects the computing device that was most recently accessed. Once there is a model of the devices available, the system anticipates device changes and makes suggestions. Additionally, the user can express preferences in a meaningful fashion. Messenger can be set to always stay active on the laptop and only run on the desktop when the laptop is powered off. A multimedia file can be presented on the laptop, but the sound could be produced using the speakers of the main machine. The simple act of logging onto one network versus another can change everything from where the music is playing, to which e-mail and messaging accounts the user is monitoring.  
         [0039]     Once a collection of trusted machines is defined, there now also exists a collection of machines that are not in that group (i.e., “untrusted”). The concept of categorizing a user as a “visitor” facilitates safely doing some of the previously mentioned interaction with an “untrusted” machine. Two common situations include bringing a laptop into a conference room where it should interact with both public machines and other laptops, and interacting with a colleague&#39;s machine remotely. Visitor connections, which are temporary connections, allow a person to walk into their colleague&#39;s office and easily bring up the web page they were just viewing, or quickly share a section of their screen so a paragraph can be reviewed and edited live, instead of mailing copies of the document back and forth. In order to maintain data security, the capabilities of these connections are limited. However, even in this limited form, the user benefits greatly by the improved sharing capabilities.  
         [0040]     Referring now to  FIG. 1 , there is illustrated an agent component  100  that facilitates the present invention. The agent component  100  is software that is installed (or encoded in hardware) on a local computing system that receives one or more inputs and switches between multiple outputs in order to implement the novel aspects of the present invention. A first input  102  receives input data from at least one input mechanism that is either hardware (e.g., physically attached to or wirelessly associated with the local computing system) and/or software from a system process, and that communicates the data to the local computing system. The hardware input data can be received from a hardware device such as mouse, trackball, touch pad, pointing stick, touch screen, keyboard, stylus-based interactive pointing device, or any other suitable input device that facilitates interactive input by a user to control pointer (or cursor) movement of the local computing system. The input data  102  can also be the data related to a software process, such as the system clipboard, where the process data is received into a memory or temporary storage area for access and transmission from the local computing system to a remote computing system.  
         [0041]     A second input  104  facilitates the receipt of a routing signal (or trigger signal) that is processed by the agent component  100  to determine when to route the input data between multiple outputs, here, two outputs: a local system output  106  that routes the local input data to the local computing system for control thereof or processing thereby; and, a remote system output  108  that facilitates routing of the local input data to the remote computing system for control thereof or processing thereby. By default, the agent component  100  routes the input data to the local computing system for processing and control thereof. In one implementation, the routing signal is derived from a hardware input device such that the user control the input device to cause an associated user interface (UI) pointer to hover over switching location data represented on an x/y coordinate system of the UI. Each display element (i.e., picture element or pixel) is mapped such that the location of the pointer on the UI is known. If the pointer is moved to a zone of pixels that are mapped to indicate that the user desires to effect control of the remote system, the agent component  100  will route the input device data to the remote system output  108 , which then allows for control of the remote computing system.  
         [0042]     In another implementation, a keystroke or combination of keystrokes from a keyboard or buttons of a mouse may trigger the agent  100  to route the input device data. In still another implementation, voice commands may be employed singularly or in combination with other input signals to cause the agent  100  to route the input device data.  
         [0043]     A remote agent in the remote system works with the remote system programs to merge local input device signals with the remote system input device signals to allow the user at the local system to control the remote system using input devices of the local system and/or the remote system.  
         [0044]     The agent component  100  also receives as a third input  110  of remote system data that represents identity (or authorization) information and configuration data of a remote computing system (not shown) associated with the user. This ensures that the agent component  100  can only switch access to a verified remote computing device of the user.  
         [0045]     Where the input data is from a local software process, the agent  100  facilitates transmission of the data to the remote computing system. The present invention utilizes extended copy and paste functionality through a computing system clipboard, and in combination with the agent component  100 , provides the capability to share content (e.g., text, images, multimedia, etc.) between networked computers or devices. In a similar manner to current copy/paste implementations, the user selects the content to be copied (e.g., using a word processing application to copy document text), performs a copy operation on the content, and the selected content is automatically copied to the local clipboard on the local computing system. In an automated implementation, the local agent  100 , sensing that the local clipboard has the content data, signals the remote computing system that clipboard data is forthcoming. The local clipboard data is then transmitted to the remote agent, and then to the remote clipboard. An application of the remote system can then access the remote clipboard data, and manipulate the data, as desired (e.g., open in a document, and save to a different location). In a manual implementation, the local agent, sensing that the local clipboard has the content data, signals the user that clipboard content is available for transmission. The user then initiates transmission of the local clipboard data to the remote computing system.  
         [0046]     In another implementation, the agent component  100  facilitates the use of a modified UI, which is employed when the screens or displays of the computing devices are significantly different in size, such user interaction is impacted. The presentation of information of a large computing system display is more difficult on a smaller device display. One example includes interaction between a networked computer and a mobile and/or handheld computing device having a stylus-based input device (e.g., a personal data assistant (PDA). Such a disparity is can be manually or automatically accommodated using the agent component  100 . When the agent is made aware of the disparity in the systems, the agent facilitates activation of the modified UI for use with the smaller device.  
         [0047]     The agent  100  is made aware of the disparity via the authentication schema described herein, where a network database includes configuration information of the possible devices that can be used by the user in accordance with the novel aspects of the present invention. When the remote computing system authenticates to the network (i.e., at least the database), the corresponding remote device configuration information is retrieved and processed such that the agent  100  employs any number of the novel functions, i.e., remote computing system control, clipboard data transfer, and screen emulation.  
         [0048]     The agent component  100  essentially performs a logical AND operation on the second and third inputs ( 104  and  110 ). If the routing signal at the second input  104  corresponds to the pointer hovering in a zone associated with the user desire to route data remotely, and the remote system data verifies that the remote system is associated with the user, the agent component  100  routes the input device data at input  102  to the remote system output  108  such that the user can now control the remote system. Otherwise, if the routing signal at the second input  104  indicates that the user desires to control the remote system, but the remote system data at the third input  110  indicates that the user is not allowed access thereto, the agent  100  will continue to route the input device data to the local system output for processing by the local system.  
         [0049]     Referring now to  FIG. 2 , there is illustrated a more detailed block diagram of a head-to-head arrangement of a local computing system  200  and a remote computing system  202  operating in accordance with the present invention. The local system  200  includes a local agent component  204  operating in accordance at least with the characteristics of agent  100  of  FIG. 1 . The local system  200  also includes the following: a local system control block  206  that monitors and controls all components of the local system  200 ; one or more local input devices  208  connected to the control block  206  for inputting the input device data; a local UI  210  connected to the system block  206  that facilitates user interaction with the local system  200 , which UI  210  presents information in the form of text, graphics, and/or images; and a network interface  212  connected to the system block  206  to accommodate wired and/or wireless communication with a network  214 . The local agent  204  also connects to the system control block  206  to access UI data related to the position of the pointer, which pointer is under control of at least one of the input devices  208  the data of which is processed by the system control block  206 .  
         [0050]     The remote computing system  202  includes similar software and hardware, including a remote agent component  216  operating in accordance at least with the agent of  FIG. 1 . The remote system  202  also includes the following: a remote system control block  218  that monitors and controls all components of the remote system  202 ; one or more remote input devices  220  connected to the control block  218  for inputting the input device data; a remote UI  222  connected to the system block  218  that facilitates user interaction with the remote device  220 , which UI  222  presents information in the form of text, graphics, and/or images; and a network interface  224  connected to the system block  218  to accommodate wired and/or wireless communication with the network  214 . The remote agent  216  also connects to the system control block  218  to access UI data related to the position of the pointer, which pointer is under control of at least one of the input devices  220  and the data of which is processed by the system control block  218 .  
         [0051]     Disposed in wired or wireless communication with the network  214  is a server  226  with a database  228  of users and information associated with user computing systems. When the remote system  202  is brought into the working area of the local system  200 , automatic network connection and communication can occur such that the network systems are now made aware of the presence of the remote system  202 . This can occur by the remote system  202  conforming to network authentication services upon connecting to the network  214  or other suitable network awareness technologies. Of course, in a peer-to-peer network implementation, the server  226  and server database  228  are not required. However, the storage functions previously provided by the server database  228  are now provided by the storage mechanisms of the peer machines. Either of the local or remote agents ( 204  and  216 ) can be configured to automatically sense such a peer-to-peer network connection, and either require or not require verification of the other peer computing system.  
         [0052]     In order to provide a seamless experience in accordance with the present invention, the database  228  can include a file system that replicates files between user machines. Once the user document structure is automatically updated for each computing system, the user no longer has to remember the various document structures and how they differ from system to system. Replicating all user documents eliminates the need for the user to decide which files are needed on which machine, and makes explicit any document versioning issues. This consistency reduces the amount of effort required to locate a file. In addition, many of the user preferences are represented by files on each machine. For example, in a WINDOWS brand operating system environment, the Favorites folder, Recent documents folder and the Start Menu can all be unified in the process. Shared resources also include the copy/paste clipboard. Issues related to application licenses, privacy and unreachable network resources (which can result in a document being forked) can be considered using a replicated file system in order to maintain the user experience. Specific files can be designated for shared access between the systems.  
         [0053]     Other information can be stored in the database  228  including computing system configuration data such that when the remote system  202  is accessed from the local system  200 , the configuration data is automatically accessed or made available to the local agent  204  from the database  228  and employed to enhance the user experience. This configuration data can include, but is not limited to the use of hot keys for automatically launching and/or manipulating applications, desktop orientation and color schemes, input device settings that are suitable for using the remote computing system, and many other personal user profile settings and configurations. This is also where physical information needs to be registered and maintained.  
         [0054]     In operation, the user in control of at least one of the local input devices  208  moves the associated pointer on the local UI  210  such that the pointer hovers or impacts a switching location area of the UI  210  that facilitates triggering initiation of the routing signal. The local agent  204  performs a check with the server  226  to find the appropriate remote user computing system, the remote computing system  202  with which to facilitate routing of the input device data. Once verified, the local agent  204  communicates over the network  214  to the remote agent  216  (this can also be the peer-to-peer arrangement) to pass control of the local input device thereto. When the user desires to return to the local system  200 , he or she moves the pointer to a remote switching area of the remote UI  222  associated with triggering a return routing signal of the remote agent  216 . The remote agent  216  then sends a signal to the local agent  204  to reroute the input device data to the local system.  
         [0055]     The local UI  210  and remote UI  222  both function as a traditional user interface such that the location of a pointer presented is confined within viewable bounds of a computer display. The UI can include at least a graphical desktop of an operating system and any windows that can be presented to facilitate interactive operations by a user with the operating system and applications. Thus, as the user manipulates an input device, a corresponding pointer will be presented, the location of which on the UI indicates the intent of the user to move from accessing the local computing system to accessing the remote computing system. Certain areas of the UI can be designated for generating the routing signal that initiates switching from local to remote and remote to local. These areas can be designated during installation or subsequent setup of the agent component ( 204  and  216 ). For example, if the remote system  202  is located to the right of the local system  200 , designating any number of pixels along the right side of the UI of the local system can indicate auto-switching of the local input device data to the remote system  202  such that it would appear normally to the user that the pointer simply moves directly onto the UI of the remote system  202  without pause or hesitation. On the remote system  202 , any number of pixels along the left side of the UI can be designated to trigger the remote agent  216  to signal the local agent  204  to route the input device data locally. It would then appear to the user that the pointer simply reaches the left side if the remote UI  222  and disappears, reappearing on the local UI  210 .  
         [0056]     The user can manually configure the local agent component  204  to facilitate switching of the local input device signals to the remote computing system such that the remote agent  216  of the remote computing system  202  allows the local input device(s) to control the remote computing system  202 . The remote input devices  220  can also be used to control the remote computing device  202  at the same time as the local computing devices  208 . When the user manually signals the remote computing system  202  that local input device control is to be switched back to the local computing system  200 , the remote computing system  202  signals the remote agent  216 , the remote agent  216  signals the local agent  204 , and the local agent  204  switches the local input device signals to the local computing system inputs.  
         [0057]     One method of manually switching local control to remote control is accomplished by the user pressing a button or a key (e.g., on a keyboard, or a mouse button) or voicing a command, in response to which the local agent  204  switches local input device control to the remote computing system  202 . Another method of manual switching that can be employed alternatively to or in combination with the above method, includes configuring a switching location of the local user interface (UI) to automatically respond to the presence of a user interface pointer in that location. Thus, when the user moves the pointer to the switching location, the local computing system  200  signals the local agent  204  to perform the switching function to switch the local input device signals to the remote computing system  202 . The local agent  204  signals the remote agent  216 , and the remote agent  216  routes the local input device signals to the inputs of the remote system  202 . Similarly, manual signaling to switch remote control back to local control can be accomplished by pressing a different button or key of the local input device  208  and/or by configuring one or more locations of the remote user interface to automatically respond to the presence of a user interface pointer in those locations. When the pointer and the location coincide, the remote computing system  202  signals the remote agent  216 , the remote agent  216  signals the local agent  204 , and the local agent  204  no longer routes the local input device signals to the remote computing system  202 , but routes them only to the local computing system  200 .  
         [0058]     In another illustrative example, the user utilizes an attached mouse on the local computing system  200  to manipulate a cursor on an attached display screen. As the cursor reaches the right edge of the display screen, the cursor appears on the display screen of the remote system. The user can continue to manipulate the cursor with the local device mouse or can switch to an attached mouse of the remote system.  
         [0059]     The invention finds application to a number of other input and output devices, including microphones, joysticks, peripheral devices (e.g., printers and external drives), visual control devices, etc., to name just a few.  
         [0060]     Referring now to  FIG. 3 , there is illustrated a flow chart of a general process for implementation and utilization input device control in accordance with the present invention. While, for purposes of simplicity of explanation, the one or more methodologies shown herein, e.g., in the form of a flow chart, are shown and described as a series of acts, it is to be understood and appreciated that the present invention is not limited by the order of acts, as some acts may, in accordance with the present invention, occur in a different order and/or concurrently with other acts from that shown and described herein. For example, those skilled in the art will understand and appreciate that a methodology could alternatively be represented as a series of interrelated states or events, such as in a state diagram. Moreover, not all illustrated acts may be required to implement a methodology in accordance with the present invention.  
         [0061]     At  300 , a location of a pointer associated with a local input device is monitored. At  302 , the local agent determines if a routing signal has been received to initiate routing of input device data to a remote system. If NO, flow is back to the input of  302  to continue monitoring the pointer location. If YES, flow is from  302  to  304  to reroute processing of the input device data by the local system, and route the data to the remote agent of the remote system. The remote agent also monitors the location of the remote pointer to determine when to return control to the local computing system. If return is not indicated, flow is from  306  back to its input to continue monitoring for the return routing signal. If return is indicated, flow is from  306  to  308  to return input device data processing to the local system. The process then reaches a Stop block.  
         [0062]     Referring now to  FIG. 4 , there is illustrated a more detailed flow chart of a process for configuring and operating the present invention. At  400 , a database of user and computing system associations is created. The database can also include configuration data, location data, and user profile data that can be implemented when the user interacts with the remote system. At  402 , the local input device is maneuvered on the UI to trigger the routing signal, the receipt of which causes the local agent to route the input device data to the remote agent. At  404 , the local agent requests remote device data of the remote system from the database and verifies that the system is associated with the user. If the remote system fails verification, flow is from  406  to  408  where the user is alerted, and flow loops back to the input of  402 . If the remote system is verified, flow is from  406  to  410  to return the device data to the local agent. At  412 , the local agent routes the input device data to the remote agent. When finished with the remote device, the remote agent signals the local agent to reroute the input device data locally, as indicated at  414 . At  416 , the local agent terminates the remote routing session and routes the input device data locally. The process then reaches a Stop block.  
         [0063]     Referring now to  FIG. 5 , there is illustrated an implementation of the novel aspects of the present invention in accordance with two desktop computer systems. A first (or local) computer system  500  includes a mouse input device  502 , a keyboard  504 , a display  506 , and a chassis  508  that houses the CPU, I/O interface devices, peripheral devices, data storage, power supply, and memory. The computer  500  is disposed on a network  510 , along with a second (or remote) computer system  512 . The second computer  512  includes a mouse input device  514 , a keyboard  516 , a display  518 , an agent component, and a chassis  520  that houses the CPU, I/O interface devices, peripheral devices, data storage, power supply, and memory.  
         [0064]     When installed, the agent of the first system  500  is configured to associate a switching display area  522  with routing of local input device data to the second computer  512 . The second system  512  has a similar switching area  524  designated for signaling a desire to change routing of the local input device data. The area  524  is also configured upon installation of the agent of the second computer  512  to trigger a signal that returns processing of the local input device data to the first computer  500 . This can be performed manually or automatically. Manual configuration can be by the user accessing a graphical representation of the UI and designating one or more areas thereof for activating switching of the input device signals. Automatic configuration can include configuring default areas of the UI, or presenting a graphical icon that the user drags to a location, and confirms to the system that the location(s) have been selected. Thereafter, when the user moves the mouse  502  such that a corresponding pointer  526  moves into the area  522 , the system can require that the user interact and manually affirm that remote control is desired. Manual affirmation can include pressing a button, key, or a combination thereof for the keyboard and mouse. Alternatively, the agent automatically (without user intervention) routes the mouse data from the first computer  500  over the network  510  to the agent of the second computer  512 , which agent communicates with the control electronics of the second computer  512  to present the pointer, now pointer  528 , on the second system display  518 . The user can then manipulate programs and devices of the second computer  512  using the mouse  502  of the first computer  500 , the keyboard  504 , the mouse  514  and/or the keyboard  516 . As long as the pointer  528  is used outside of the area  524 , the user will retain control of programs and devices associated with the second system  512 , from the first system  500 .  
         [0065]     When the pointer  528  is brought back into the area  524 , the agent of the second computer  512  signals the agent of the first computer  500  via the network  510  (which can be a wired or wireless network) to reroute the input device data for processing only on the first computer  500 . Thus, pointer  528  becomes pointer  530  (formerly pointer  526 ), which reappears back on the display  506 .  
         [0066]     Note that in more robust implementations, the direction of the pointer movement can be used in combination with the location of the pointer to initiate rerouting of the input device data by the agent. Thus, the user may be able to rest the pointer in the areas ( 522  and  524 ) without the rerouting of data occurring. Still further, the velocity and/or acceleration of the pointer alone or in combination with the pointer location and/or direction of movement may be used as an indicator as to whether the user desires the rerouting of the input device data.  
         [0067]     In one implementation, the relative location of the second computing system  512  to the first computing system  500  is determined and the one or more switching locations  522  of the user interface will be created. This can be determined manually or automatically. Manual configuration can involve presenting a graphical representation of the first and second systems, such that the user simply drags the second system graphic to a location relative to the first system graphic that reflects the approximate physical orientation of the systems. In a more robust implementation, the full geometric orientation can be manually configured, such that the user can also input to the first system  500  that the second system  512  may be facing the first system  500 . The second computing system  512  can be placed to the left of the first system  500 , to the right, above, below, to the left and above, etc. Accordingly, it is intuitive that the UI switching location  522  be created near the physical location or in the direction of the second computing system  512 . Manually, the user will then configure the first computing system  500  to include the switching location  512  approximately on an imaginary line that extends, generally, from the center of the UI of the first system  500  to the second computing system  512 .  
         [0068]     The location of the second computing system  512  relative to the first computing system  500  is determined automatically. This can be accomplished using, for example, a wireless triangulation system that can sense a unique tag (not shown) of each of the computing systems ( 500  and  512 ), which tag is determined to be associated with a different physical location of the respective systems. The first computing system  500  in cooperation with the local agent can then further automatically create the switching location  522  on the UI of the first system  500  for the user. In either case, the first computing system  500  and the local agent will then respond when the pointer  526  and the switching location  522  coincide, and switch the local input device control to the second system  512 . Similarly, now that the relative locations are known, the second computing system  512  will have a corresponding remote switching UI location  524  that can be manually or automatically created such that the user can disable remote control by moving the remote UI pointer  528  to the remote UI switching location  524 , which causes the second system  512  to signal the remote agent. The remote agent then signals the local agent to disable switching of the local input signals to the second computing system  512 .  
         [0069]     In a more robust implementation, the full geometric relationship of the second computing system  512  to the first computing system  500  can be automatically determined. That is, whether the second computing system  512  is placed to the left of the first system  500 , to the right, above, below, to the left and above, facing the first system  500 , etc. This further facilitates the automatic configuration of the corresponding UI switching locations on both the first and second systems ( 500  and  512 ).  
         [0070]     Referring now to  FIG. 6 , there is illustrated a multi-computer implementation where a first computer  600  can route input device data to a third computer  604  (e.g., a laptop or notebook) through a second computer  602  using novel aspects of the agent component of the present invention. The first computer system  600  includes a mouse input device  606 , a keyboard  608 , a first display  610 , an agent component, and a chassis  612  that houses at least the CPU, I/O interface devices, peripheral devices, data storage, power supply, and memory. The first computer  600  is disposed in wired communication on a network  614  along with the second computer system  602 , while the third computer  604  is disposed in wireless communication with the network  614 . The second computer  602  includes a mouse input device  616 , a keyboard  618 , a second display  620 , an agent component, and a chassis  622  that houses at least the CPU, I/O interface devices, peripheral devices, data storage, power supply, and memory. Similarly, the third computer system  604  includes a keyboard  624 , a third display  626 , an agent component, and a chassis  628  that houses at least the CPU, I/O interface devices, peripheral devices, data storage, power supply, and memory. Since the third computer  604  does not have a mouse, the input device routing capabilities of the present invention allow for the mouse  606  and keyboard  608  to be used for controlling the third computer  604 , in addition to using the keyboard  624  of the third computer  604 .  
         [0071]     During or after installation, the agent of the first (or local) system  600  is configured (manually or automatically) to associate a first display area  630  with routing of local input device data generated from the mouse  606  and keyboard  608 , for example, to the second computer  602 . The second system  602  has a similar second display area  632  designated by the agent for signaling a desire to change routing of the local input device data back to the first computer  600 . Additionally, the second computer  602  has a third display area  634  associated with routing the local input device data received from the first computer  600  to the third computer  604 . The third computer  604  has a fourth display area  636  configured in accordance with its agent to trigger rerouting of the local input device data back to the second computer  602 . This can occur by the agent of the third computer  604  signaling the second computer agent to switch control locally to itself. Additionally, the third computer  604  can also implement a fifth display area  638  that triggers rerouting of the local input device data back to the first computer  600  by its agent signaling the local agent of the first computer  600  to reroute input data locally. The first computer  600  also includes sixth display area  640  for routing input device data directly to the third computer  604 , bypassing the second computer  602 . Thus, the agents can be configured to respond in a daisy-chain fashion to allow rerouting of the local input device data through successive computers (e.g., in an ad hoc peer-to-peer topology) or to a specific computer of three or more computer systems.  
         [0072]     The user of the first computer  600  moves a pointer  642  to the display area  630 , which triggers its resident agent to route the input device data of the mouse  606  to the corresponding computer system, here the second computer system  602 . On the second system  602 , the pointer  642  becomes a pointer  644 , which pointer  644  can be moved into the third display area  634  to further route the local input device data of the mouse  606  to the third system  604  for control thereof. The pointer  644  then becomes a pointer  646  on the third display  626 . The user can then return control to the second system  602  via the mouse  606  by moving the pointer  646  back into the fourth display area  636 , which pointer  646  becomes pointer  644  on the second display  620 . Alternatively, the pointer  646  can be moved into the fifth display area  638  of the third display  626 , which causes its agent to signal the agent of the first system  600  to reroute processing of the input device data of the mouse  606  to the first system  600 . The pointer  646  then becomes the pointer  642  on the first display  610 .  
         [0073]     As indicated previously, the agent component of the present invention provides the capability to allow the user at the first computer  600  to use the first mouse  606  to control the second computer  602 , while also using the keyboard  618  of the second computer  602  for its designed purposes. Similarly, when the input device control is from the first computer  600  to the third computer  604 , the keyboard  608  of the first computer  600  can be used to control the third computer  604  along with the keyboard  624  of the third computer  604 . Thus, the numbers of input devices that can be used in varying combinations with the disclosed agent are many.  
         [0074]     Additionally, the number and location of display areas can be designated for use in accordance with the agent in many different ways. The display areas can be located on the top or bottom of the display or corners. The agent can be configured to route input device data to another computer based upon the combination of the mouse pointer location and a depressed key of the keyboard. Still further, a voice command can be employed along with the location of the pointer to trigger routing of the data to a different computing system. In another implementation, the user can select an icon to automatically invoke routing the input device data to another machine. Thus, many different implementations can be utilized to provide a smooth transition from one computing system to another and/or to ensure that access from one system to another is authorized, e.g., through the use of an auto-login when the data routing is invoked by the local agent to a second system.  
         [0075]     Referring now to  FIG. 7 , there is illustrated a data transfer implementation that can be utilized in accordance with the present invention. The disclosed invention also facilitates sharing content (e.g., text, images, and multimedia) between computing systems utilizing extended copy and paste functionality as facilitated by a chain of system clipboards. In order to illustrate such capabilities,  FIG. 7  shows a head-to-head arrangement of two systems: a local computing system  700  and a remote computing system  702 . The local system  700  includes a local agent component  704  (similar to agents  100 ,  204 , and  216 ), a local content component  706  (e.g., a document or program) that includes content that can be copied (the content can be accessed in accordance with any manner provided to obtain text, images, video, audio, or any file content associated with programs and data of the local system  700 ), and a local memory  708  for storing the content captured via the local agent component  704 .  
         [0076]     The remote system  702  includes similar components, including a remote agent component  710  (similar to agents  100 ,  204 ,  216 , and  704 ), a remote content component  712  (e.g., a document or program) that includes content that can be pasted (the content can be accessed in accordance with any manner provided to obtain text, images, video, audio, or any file content associated with programs and data of the local system  700 ), and a remote memory  714  for storing the content captured via the remote agent component  710 . The local agent  704  and remote agent  710  communicate directly or indirectly via a connection  716  (wired or wireless). Note that the copy and paste processes do not need to be performed by the resident agent; the memory need only be accessible directly or indirectly such that the content can be handled in the desired manner to complete the desired copy or paste operation. The memories ( 708  and  714 ) can be the respective system clipboard data storage locations. Thus, the system clipboard chain can be utilized to access the clipboard data from any application.  
         [0077]     The user selects the content of the local content component  706  to be copied, which selected content is copied to the local clipboard (facilitated by the local memory  708 ) on the local system  700 . When the local agent  704  has transferred input device control of the associated local input device (not shown) to the remote agent  710 , the user can then choose to paste the local content of the local memory  708  into a document of the remote system  702  (facilitated by the remote memory  714 ). To access the local content of the local memory  708  (e.g., portions thereof associated with the clipboard) from the second system  702 , the local agent component  704  encapsulates the content from the local memory  708  and transmits the encapsulated content to the remote agent component  710 . The remote agent  710  stores the encapsulated content in one area of the remote memory  714  for later access. As an optimization, if the content is expressible in a form that is already available from both machines, e.g., a document on a networked drive or a website, only the link (e.g., UNC (universal naming convention) path or URL uniform resource locator)) need be transmitted.  
         [0078]     The encapsulated content can define various attributes about the content such as content types, restrictions, etc. Using these attributes, the remote agent  710  accesses and verifies whether the encapsulated content can be copied to the selected target application or program on the remote system  702 . In one embodiment, the encapsulated content is transferable, in response to which the remote agent  710  places the unencapsulated content on the clipboard (an area of the remote memory  714  associated with the clipboard) of the remote system  702  for later access. Using the input device of the local system  700 , the user can then select the desired program, application, or document of the remote system  702 , and perform a paste function to paste the unencapsulated content of the remote memory  714  thereinto.  
         [0079]     In another embodiment, the encapsulated content can be automatically transmitted to all networked computers associated with the user, similar to a broadcast operation. Each system clipboard of the recipient computers will then be responsible for verifying whether the encapsulated content can be copied to the selected target application or program on the remote system. Alternatively, the encapsulated contented can be transmitted to one or more networked computers that are currently being used. The computers can be associated with the user in the database or a non-user computer that offers visitor access to the user.  
         [0080]     Referring now to  FIG. 8 , there is illustrated a flow chart of the process for copying content from a local system to a remote system utilizing an agent of the present invention. At  800 , content is captured on the local system facilitated by the system clipboard and the local agent. At  802 , a determination is made as to whether the pointer location is associated with routing the input device data to a remote system. This can be a manual operation where the user controls whether the content will be transmitted to the remote system. Alternatively, no user interaction is required, wherein the local system, via the local and remote agents, automatically facilitate transmission the clipboard content from the local clipboard to the remote clipboard. If NO, flow is back to the input of  802  to continue to monitor the pointer location. If YES, flow is to  804  to encapsulate the content. At  806 , the encapsulated content is routed to the remote agent, and then to the remote memory for storage. At  808 , the remote agent verifies whether the content can be processed properly for use by the remote system. At  810 , if the content cannot be properly processed, flow is to  812  to reject the stored content and notify the user that the content cannot be used. Of course, the remote agent can request or facilitate the request of a resend of the content. Flow is then back to the input of  800 . If the content can be processed by the remote system, flow is from  810  to  814  to remove the content from the existing memory location, unencapsulate it, and place it into a memory location associated with the particular function (e.g., the clipboard). At  816 , the content is then processed by the remote system for the particular function, e.g., pasting into a document. The process then reaches a Stop block. Note that additional checks can be made to ensure that the remote system is associated with the user.  
         [0081]     Referring now to  FIG. 9 , there is illustrated implementation of a stylus-based device  900  in accordance with aspects of the present invention. The device  900  is a portable handheld unit with an antenna  902  for wireless communications. The device  900  includes a display  904  for presenting text and graphics. The display  904  also facilitates user interaction by using a stylus (or pen)  906  to control the device  900 . The device also includes other controls, inputs, and/or outputs for, e.g., making adjustments, entering data, inputting voice data, outputting audio data, and making a wired connection thereto. The device  900  includes a local agent (not shown), the configuration of which designates a switching location  908  of the display  904  to trigger the routing of input device data associated with the stylus/display interface to a remote computer  910 .  
         [0082]     The remote computer  910  includes a mouse input device  912 , a keyboard  914 , a display  916 , and a chassis  918  that houses at least the CPU, I/O interface devices, peripheral devices, data storage, power supply, and memory. The remote computer  910  also includes a remote agent that facilitates the novel aspects of the present invention. The remote agent is used to designate one or more display areas  920  for triggering routing in accordance with the present invention.  
         [0083]     Since the size of the display  904  of the device  900  relative to the display  916  is significantly different, the present invention utilizes a modified UI for facilitating interaction between the remote computer  910  and the stylus-based input device  900  (e.g., a Personal Data Assistant). In accordance with this aspect, stylus-based computing devices require direct manipulation of display objects by touching the display screen. One solution to allow the stylus-based device  900  to control the remote computer  910  is to emulate all or a portion of the target computer control elements on the device  900 . For example, graphical controls that could be replicated on the display  904  include a Start graphic, a Trash icon, My Documents icon, and a dropdown menu and the associated menu options. Accordingly, the user could directly select the emulated display objects on the emulated display  904  to facilitate control of the remote system  910 .  
         [0084]     Note that since the portable device  900  is in direct communication with the remote computer  910 , network authorization is not necessarily required, as with some previously mentioned embodiments. It is to be appreciated that the local agent can include capabilities for listing or identifying devices suitable for communicating with the host system. Thus, the user of the remote system  910  can configure the internal remote agent to communicate with the device  900  any time the device  900  is within a suitable range for performing stable communications. Authorization to communicate can be as simple as transmitting a unique ID of the device  900  to the remote agent for comparison with an approved device table stored on the remote system  910 . If the unique ID is listed in the table, communications therebetween can proceed. Of course, this process can be performed such that the device  900  includes an approved device table against which a unique ID of the remote system  910  is checked.  
         [0085]     Referring now to  FIG. 10 , there is illustrated a sample UI  1000  of a computer system for accommodating the novel aspects of the present invention. During or after installation of the agent component, one or more regions of the display can be designated for triggering routing of the input device data to a remote device. Here, a region  1002 , which can be made invisible to the user, as indicated by the dashed line, is mapped to trigger routing of input device control. By moving a pointer  1004  into the region  1002 , the agent component is signaled that coordinates of the pointer  1004  coincide with one or more coordinates of the region  1002 . The agent then routes pointer control (as associated with one or more local input devices, e.g., a mouse and a keyboard) to a remote pointer (or program cursor) of a remote system. Of course, a number of regions can be employed in various shapes and sizes, and located in many different areas of the UI  1000  to trigger routing of input device control to other computing devices.  
         [0086]     In an alternative implementation, the local UI  1000  includes icons that are graphical representations of devices associated with the user. Here, the user also utilizes a portable terminal device (PTD)  1006 , a laptop  1008 , and a second desktop machine  1010 . The agent can be configured to allow the user to simply select one of the icons, e.g., the PTD  1006 , such that after being selected, the agent automatically routes input device data to the PTD  1006  for control thereof. Similarly, the user can select the laptop icon  1008  to initiate input device control of the laptop. Finally, the user can select the desktop icon  1010  to initiate input device interaction therewith via the agent.  
         [0087]     The UI  1000  also includes typical graphics and controls to allow the user to launch applications and interact with the local computing system and remote systems. For example, a Start graphic selection  1012  allows the user to select an application to launch. Two application graphics ( 1014  and  1016 ) allow quick launching of the respective applications. A My Computer icon  1018  allows the user to access files and devices of the local system.  
         [0088]     Referring now to  FIG. 11 , there is illustrated a portable device  1100  that employs a user interface  1102  to emulate a touch pad for interacting with a remote computing device  1104  in accordance with capabilities of the agent component of the present invention. The portable device  1100  includes a display  1106  designed to accommodate touch interaction. The emulated touch pad interface  1102  provides for control of a pointer  1108  (or cursor) of the remote computing device  1104  using a PDA, for example. The emulated touch-pad interface  1102  is similar to a laptop computer touch-pad in which a movement in the form of strokes by a finger  1110 , for example, along the touch-pad results in a relative movement of the pointer  1108  on a display screen  1112  of the remote computing device  1104 . Further, tap movements on the touch pad interface  1102  are processed by the agent to correspond to single and double click inputs typically employed to make selections and/or launch applications. These inputs are transmitted to the remote agent of the remote system  1104 , and therefrom, communicated to the operating system for application according to the current process. The emulated touch pad interface  1102  can also include emulated buttons (not shown) for registering single and double click inputs. Because the display  1106  facilitates the touch pad interface  1102 , the user can focus on movement of the pointer  1108  of the remote display screen  1112  without having to repeatedly reference the portable device  1100 , which provides improved usability.  
         [0089]     In a more robust implementation, auto-scaling can be facilitated by the agent such that presentation of larger graphics of the remote system  1104  can be utilized by the device  1100 . Auto-scaling can employ compression (or elimination) of space (e.g., blank space) that does not provide any meaningful function or purpose related to interacting with the portable device  1100 . Thus, only control objects of the remote system  1104  will be displayed on the device  1100 . Auto-scaling can also include segmenting the remote display  1112  into smaller sections each of which can be presented on the portable device  1100 . The agent can also be employed to anticipate next screen on the device  1100  based on the direction of movement of the finger on the touch pad.  
         [0090]     Referring now to  FIG. 12 , there is illustrated a block diagram of a computer operable to execute the disclosed architecture. In order to provide additional context for various aspects of the present invention,  FIG. 12  and the following discussion are intended to provide a brief, general description of a suitable computing environment  1200  in which the various aspects of the present invention may be implemented. While the invention has been described above in the general context of computer-executable instructions that may run on one or more computers, those skilled in the art will recognize that the invention also may be implemented in combination with other program modules and/or as a combination of hardware and software. Generally, program modules include routines, programs, components, data structures, etc., that perform particular tasks or implement particular abstract data types. Moreover, those skilled in the art will appreciate that the inventive methods may be practiced with other computer system configurations, including single-processor or multiprocessor computer systems, minicomputers, mainframe computers, as well as personal computers, band-held computing devices, microprocessor-based or programmable consumer electronics, and the like, each of which may be operatively coupled to one or more associated devices. The illustrated aspects of the invention may also be practiced in distributed computing environments where certain tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.  
         [0091]     With reference again to  FIG. 12 , there is illustrated an exemplary environment  1200  for implementing various aspects of the invention includes a computer  1202 , the computer  1202  including a processing unit  1204 , a system memory  1206  and a system bus  1208 . The system bus  1208  couples system components including, but not limited to, the system memory  1206  to the processing unit  1204 . The processing unit  1204  may be any of various commercially available processors. Dual microprocessors and other multi-processor architectures may also be employed as the processing unit  1204 .  
         [0092]     The system bus  1208  can be any of several types of bus structure that may further interconnect to a memory bus (with or without a memory controller), a peripheral bus, and a local bus using any of a variety of commercially available bus architectures. The system memory  1206  includes read only memory (ROM)  1210  and random access memory (RAM)  1212 . A basic input/output system (BIOS) is stored in a non-volatile memory  1210  such as ROM, EPROM, EEPROM, which BIOS contains the basic routines that help to transfer information between elements within the computer  1202 , such as during start-up.  
         [0093]     The computer  1202  further includes a hard disk drive  1214 , a magnetic disk drive  1216 , (e.g., to read from or write to a removable disk  1218 ) and an optical disk drive  1220 , (e.g., reading a CD-ROM disk  1222  or to read from or write to other high capacity optical media such as Digital Video Disk (DVD)). The hard disk drive  1214 , magnetic disk drive  1216  and optical disk drive  1220  can be connected to the system bus  1208  by a hard disk drive interface  1224 , a magnetic disk drive interface  1226  and an optical drive interface  1228 , respectively. The drives and their associated computer-readable media provide nonvolatile storage of data, data structures, computer-executable instructions, and so forth. For the computer  1202 , the drives and media accommodate the storage of broadcast programming in a suitable digital format. Although the description of computer-readable media above refers to a hard disk, a removable magnetic disk and a CD, it should be appreciated by those skilled in the art that other types of media which are readable by a computer, such as zip drives, magnetic cassettes, flash memory cards, digital video disks, cartridges, and the like, may also be used in the exemplary operating environment, and further that any such media may contain computer-executable instructions for performing the methods of the present invention.  
         [0094]     A number of program modules can be stored in the drives and RAM  1212 , including an operating system  1230 , one or more application programs  1232 , other program modules  1234  and program data  1236 . It is appreciated that the present invention can be implemented with various commercially available operating systems or combinations of operating systems.  
         [0095]     A user can enter commands and information into the computer  1202  through a keyboard  1238  and a pointing device, such as a mouse  1240 . Other input devices (not shown) may include a microphone, an IR remote control, a joystick, a game pad, a satellite dish, a scanner, or the like. These and other input devices are often connected to the processing unit  1204  through a serial port interface  1242  that is coupled to the system bus  1208 , but may be connected by other interfaces, such as a parallel port, a game port, a universal serial bus (“USB”), an IR interface, etc. A monitor  1244  or other type of display device is also connected to the system bus  1208  via an interface, such as a video adapter  1246 . In addition to the monitor  1244 , a computer typically includes other peripheral output devices (not shown), such as speakers, printers etc.  
         [0096]     The computer  1202  may operate in a networked environment using logical connections via wired and/or wireless communications to one or more remote computers, such as a remote computer(s)  1248 . The remote computer(s)  1248  may be a workstation, a server computer, a router, a personal computer, portable computer, microprocessor-based entertainment appliance, a peer device or other common network node, and typically includes many or all of the elements described relative to the computer  1202 , although, for purposes of brevity, only a memory storage device  1250  is illustrated. The logical connections depicted include a local area network (LAN)  1252  and a wide area network (WAN)  1254 . Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.  
         [0097]     When used in a LAN networking environment, the computer  1202  is connected to the local network  1252  through a wired or wireless communication network interface or adapter  1256 . The adaptor  1256  may facilitate wired or wireless communication to the LAN  1252 , which may also include a wireless access point disposed thereon for communicating with the wireless adaptor  1256 . When used in a WAN networking environment, the computer  1202  typically includes a modem  1258 , or is connected to a communications server on the LAN, or has other means for establishing communications over the WAN  1254 , such as the Internet. The modem  1258 , which may be internal or external and a wired or wireless device, is connected to the system bus  1208  via the serial port interface  1242 . In a networked environment, program modules depicted relative to the computer  1202 , or portions thereof, may be stored in the remote memory storage device  1250 . It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers may be used.  
         [0098]     The computer  1202  is operable to communicate with any wireless devices or entities operably disposed in wireless communication, e.g., a printer, scanner, desktop and/or portable computer, portable data assistant, any piece of equipment or location associated with a wirelessly detectable tag (e.g., a kiosk, news stand, restroom), and telephone. This includes at least Wi-Fi and Bluetooth™ wireless technologies. Thus, the communication may be a predefined structure as with conventional network or simply an ad hoc communication between at least two devices.  
         [0099]     Wi-Fi, or Wireless Fidelity, allows connection to the Internet from a couch at home, a bed in a hotel room or a conference room at work, without wires. Wi-Fi is a wireless technology like a cell phone that enables such devices, e.g., computers, to send and receive data indoors and out; anywhere within the range of a base station. Wi-Fi networks use radio technologies called IEEE 802.11 (a, b, g, etc.) to provide secure, reliable, fast wireless connectivity. A Wi-Fi network can be used to connect computers to each other, to the Internet, and to wired networks (which use IEEE 802.3 or Ethernet). Wi-Fi networks operate in the unlicensed 2.4 and 5 GHz radio bands, with an 11 Mbps (802.11b) or 54 Mbps (802.11a) data rate or with products that contain both bands (dual band), so the networks can provide real-world performance similar to the basic 10BaseT wired Ethernet networks used in many offices.  
         [0100]     Referring now to  FIG. 13 , there is illustrated a schematic block diagram of an exemplary computing environment  1300  in accordance with the present invention. The system  1300  includes one or more client(s)  1302 . The client(s)  1302  can be hardware and/or software (e.g., threads, processes, computing devices). The client(s)  1302  can house cookie(s) and/or associated contextual information by employing the present invention, for example. The system  1300  also includes one or more server(s)  1304 . The server(s)  1304  can also be hardware and/or software (e.g., threads, processes, computing devices). The servers  1304  can house threads to perform transformations by employing the present invention, for example. One possible communication between a client  1302  and a server  1304  may be in the form of a data packet adapted to be transmitted between two or more computer processes. The data packet may include a cookie and/or associated contextual information, for example. The system  1300  includes a communication framework  1306  (e.g., a global communication network such as the Internet) that can be employed to facilitate communications between the client(s)  1302  and the server(s)  1304 .  
         [0101]     Communications may be facilitated via a wired (including optical fiber) and/or wireless technology. The client(s)  1302  are operably connected to one or more client data store(s)  1308  that can be employed to store information local to the client(s)  1302  (e.g., cookie(s) and/or associated contextual information). Similarly, the server(s)  1304  are operably connected to one or more server data store(s)  1310  that can be employed to store information local to the servers  1304 .  
         [0102]     What has been described above includes examples of the present invention. It is, of course, not possible to describe every conceivable combination of components or methodologies for purposes of describing the present invention, but one of ordinary skill in the art may recognize that many further combinations and permutations of the present invention are possible. Accordingly, the present invention is intended to embrace all such alterations, modifications and variations that fall within the spirit and scope of the appended claims. Furthermore, to the extent that the term “includes” is used in either the detailed description or the claims, such term is intended to be inclusive in a manner similar to the term “comprising” as “comprising” is interpreted when employed as a transitional word in a claim.