Abstract:
A method to globally place a feedback button in every dialog box, message box, and top-level window in every application and message box in an operating system to provide a user with the opportunity to provide feedback for the dialog box, message box, or top-level window. The system checks a setting to determine if and what type of box/window that a feedback button will be placed and if the setting is enabled, a feedback button with customizable text will be placed on the box/window when the box/window is displayed if the type of window being displayed matches the type specified as having a feedback button. The system loads a program file that provides instructions to the user on how to provide feedback to a developer or system administrator when the user selects the feedback button. Once the user enters feedback, this feedback is sent to wherever the program file designated the information to be sent. Information about the box/window being displayed, including information about how the application got to the point of displaying the box/window, is sent along with the feedback. The user may also be sent to a website to allow the user to see what other people have reported about the box/window.

Description:
TECHNICAL FIELD 
     This invention relates generally to networked communications, and more particularly to a system and method to allow a user to provide feedback on a dialog box or message box the user sees. 
     BACKGROUND OF THE INVENTION 
     Continued advances in computer processor technology have led to not only increased performance, but also increased performance expectations by the users of such computer equipment. These increased user expectations extend not only to the computer equipment, but also to the applications and operating systems installed on the computer equipment. The industry has responded by creating applications and operating systems that take full advantage of these performance enhancements. However, as additional functionality was added, these applications generally became more complex, increasing the likelihood of the user seeking help and errors occurring. In response, developers added additional error messages and dialog boxes and other windows (messages/windows) in an effort to help the user and also to notify the user that an error had occurred or that more information is needed, etc. 
     As programs and operating systems evolved, these error messages and dialog boxes often became irrelevant and unintelligible to the average user. In addition, an application working on one version of an operating system often would produce unintelligible messages on an upgraded version of the operating system. As a result, both the error messages and the dialog boxes often ended up irritating and confusing the user. Many users provided comments and other feedback to the developer or a system administrator about these messages/windows in the hope that this information would be used to fix the problems in the application. However, quite often, this feedback was of no use to the developer/administrator as the developer/administrator did not know which message/window about which the user was commenting or the sequence of events that led the user to see the message/window. 
     Recently, some industry members began placing buttons within the error messages that allow the user to provide feedback for that particular error message by clicking on the button. When the button is pressed, the user is provided a dialog box in which to enter comments. The comments are then sent to the developer or administrator along with an identification of the particular error message on which the user is commenting. These buttons require the application developer to add additional code to the core software for each error message on which the developer wants feedback. In view of the number of error messages that may occur, the amount of feedback code becomes significant. 
     While this approach provides advantages over the prior methods of providing user feedback, the inability of this approach to support existing applications and the effort of coding and debugging the required messages/windows to provide this functionality has become apparent. In order for this approach to work for an existing application, the application must be upgraded with the additional code to add the buttons. If the developer misses putting a button on an error message, there is often no way to know which error message is being commented on by the user. As a result of these problems, developers are not getting valuable feedback that would allow them to fix problems in the code. 
     SUMMARY OF THE INVENTION 
     In view of the above described problems existing in the art, the present invention provides a system that provides a way for a user to give feedback to developers and system administrators on any application. The system provides a mechanism for globally or selectively placing a feedback icon in every dialog box, message box, and top-level window in every application and message box in the system to provide the user with the opportunity to provide feedback for the dialog box, message box, or top-level window. A key feature of the instant invention is that the feedback icon can be placed in an existing application without requiring any changes to the existing application. 
     In order to provide this mechanism, the operating system is modified to provide the feedback icon or button in the message box, dialog box, or top-level window (hereinafter box/window) being displayed. The system checks a setting and if the setting is enabled, a feedback icon will be placed on the box/window when the box/window is displayed. The setting can be selectively set by developers or globally set by the operating system. The text in the feedback button can be customized through provision of a custom dll. 
     When a user logs on or when an application is started, the system checks to see if the feedback icon setting is enabled and determines the text to be displayed within the feedback button. The system also determines in what type of box/window the feedback icon will be placed. If the type of window being displayed matches the type specified as requiring a feedback icon, the system adds the feedback icon into the caption bar of the window being displayed. 
     If the user clicks on the feedback icon, the system loads a program file that provides instructions to the user on how to provide feedback to a developer or system administrator. Once the user enters feedback, this feedback is sent to wherever the program file designated the information be sent. Information about the box/window being displayed, including information about how the application got to the point of displaying the box/window, is sent along with the feedback. Additionally, the user may also be sent to a website to allow the user to see what other people have reported about the box/window. In addition to user comments, the system retrieves stack trace information. This detailed feedback, including the trace information on how the program came to display the box/window, provides a significant benefit to the developer and the user. The developer obtains useful information on how to improve the application and the user obtains a more useful application after the developer fixes the problems. 
     Additional features and advantages of the invention will be made apparent from the following detailed description of illustrative embodiments which proceeds with reference to the accompanying figures. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       While the appended claims set forth the features of the present invention with particularity, the invention, together with its objects and advantages, may be best understood from the following detailed description taken in conjunction with the accompanying drawings of which: 
         FIG. 1  is a block diagram generally illustrating an exemplary computer system on which the present invention resides; 
         FIG. 2  shows relevant portions of an exemplary operating system for hosting the invention; 
         FIG. 3  shows a prior art window; 
         FIG. 4  shows a window having a comments button in the caption bar of a window in accordance with the teachings of the instant invention; 
         FIG. 5  is a flow chart of a process for obtaining feedback from a user; and 
         FIG. 6  shows a dialog box for entering comments in accordance with the teachings of the instant invention. 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     Turning to the drawings, wherein like reference numerals refer to like elements, the invention is illustrated as being implemented in a suitable computing environment. Although not required, the invention will be described in the general context of computer-executable instructions, such as program modules, being executed by a personal computer. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Moreover, those skilled in the art will appreciate that the invention may be practiced with other computer system configurations, including hand-held devices, multiprocessor systems, microprocessor based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, and the like. The invention may also be practiced in distributed computing environments where 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. 
     With reference to  FIG. 1 , an exemplary system for implementing the invention includes a general purpose computing device in the form of a conventional personal computer  20 , including a processing unit  21 , a system memory  22 , and a system bus  23  that couples various system components including the system memory to the processing unit  21 . The system bus  23  may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. The system memory includes read only memory (ROM)  24  and random access memory (RAM)  25 . A basic input/output system (BIOS)  26 , containing the basic routines that help to transfer information between elements within the personal computer  20 , such as during start-up, is stored in ROM  24 . The personal computer  20  further includes a hard disk drive  27  for reading from and writing to a hard disk, not shown, a magnetic disk drive  28  for reading from or writing to a removable magnetic disk  29 , and an optical disk drive  30  for reading from or writing to a removable optical disk  31  such as a CD ROM or other optical media. The hard disk drive  27 , magnetic disk drive  28 , and optical disk drive  30  are connected to the system bus  23  by a hard disk drive interface  32 , a magnetic disk drive interface  33 , and an optical disk drive interface  34 , respectively. The drives and their associated computer-readable media provide nonvolatile storage of computer readable instructions, data structures, program modules and other data for the personal computer  20 . Although the exemplary environment described herein employs a hard disk, a removable magnetic disk  29 , and a removable optical disk  31 , it will be appreciated by those skilled in the art that other types of computer readable media which can store data that is accessible by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, random access memories, read only memories, and the like may also be used in the exemplary operating environment. 
     A number of program modules may be stored on the hard disk, magnetic disk  29 , optical disk  31 , ROM  24  or RAM  25 , including an operating system  35 , one or more applications programs  36 , other program modules  37 , and program data  38 . A user may enter commands and information into the personal computer  20  through input devices such as a keyboard  40  and a pointing device  42 . Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit  21  through a serial port interface  46  that is coupled to the system bus, but may be connected by other interfaces, such as a parallel port, game port or a universal serial bus (USB). A monitor  47  or other type of display device is also connected to the system bus  23  via an interface, such as a video adapter  48 . In addition to the monitor, personal computers typically include other peripheral output devices, not shown, such as speakers and printers. 
     The personal computer  20  may operate in a networked environment using logical connections to one or more remote computers, such as a remote computer  49 . The remote computer  49  may be another personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the personal computer  20 , although only a memory storage device  50  has been illustrated in FIG.  1 . The logical connections depicted in  FIG. 1  include a local area network (LAN)  51  and a wide area network (WAN)  52 . Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet. 
     When used in a LAN networking environment, the personal computer  20  is connected to the local network  51  through a network interface or adapter  53 . When used in a WAN networking environment, the person computer  20  typically includes a modem  54  or other means for establishing communications over the WAN  52 . The modem  54 , which may be internal or external, is connected to the system bus  23  via the serial port interface  46 . In a networked environment, program modules depicted relative to the personal computer  20 , or portions thereof, may be stored in the remote memory storage device. 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. 
     In the description that follows, the invention will be described with reference to acts and symbolic representations of operations that are performed by one or more computer, unless indicated otherwise. As such, it will be understood that such acts and operations, which are at times referred to as being computer-executed, include the manipulation by the processing unit of the computer of electrical signals representing data in a structured form. This manipulation transforms the data or maintains it at locations in the memory system of the computer, which reconfigures or otherwise alters the operation of the computer in a manner well understood by those skilled in the art. The data structures where data is maintained are physical locations of the memory that have particular properties defined by the format of the data. However, while the invention is being described in the foregoing context, it is not meant to be limiting as those of skill in the art will appreciate that various of the acts and operation described hereinafter may also be implemented in hardware. 
       FIG. 2  shows the relevant components of an exemplary operating system  100  in which the invention operates. While operating system  100  is illustrated as the Microsoft Windows operating system, one skilled in the art will recognize that the instant invention is also applicable to other operating systems such as Linux, Mac OS, FreeBSD, Unix, etc. and is not limited to any one operating system environment. Interface component  102  communicates with other components and with software such as application programs  104  outside the operating system. Registry  106  is a database used to store configuration information. The registry  106  contains information that operating system  100  continually references during operation, such as profiles for each user, preferences for the current user, the applications  104  installed on the computer  20  and the types of documents each application  104  can create, property sheet settings for folders and application icons, what hardware exists on the system, and which ports  46  ( FIG. 1 ) are being used. In other operating systems, this information may be in other forms of configuration files. 
     In the exemplary operating system, an I/O subsystem  108  supervises both file storage and other input/output devices and facilities. Requests for file or I/O services are routed between an application program or other source and hardware devices such as  110  and  112  via one or more layers of device drivers such as  114  and  116  respectively. Device  110  might be a hardware module such as a memory. Device  112  is a monitor with its video adapter  118 . Filter drivers such as  120  and  122  can intercept data, file handles, and other information, based upon certain characteristics or events. Filter drivers can also process data internally as shown at  120 . They can also pass information back and forth to programs such as  124 , which can be located within the operating system kernel layer or at any other point in the software architecture of system  20 . Components can be dedicated to a single function, or, more often, can be programmed to carry out multiple functions, either sequentially or concurrently. A digital signal processor, for example, can execute many different functions such as frequency filtering, gain change, and acoustic effects. 
     I/O manager  108  controls the flow of information, symbolized at  126  and  128 , with stack  130  of control packets each associated with different items of information, or with packages for those items. Each packet, called an I/O request packet (IRP) is an entry in the stack  130 . I/O manager  108  executes them at the appropriate times for transporting the data or other information among the attached drivers, programs, and hardware devices. A control packet is like a job order directing a module to perform a specified task upon designated data frames. Stack  132  represents a region of reserved memory in system memory  22  ( FIG. 1 ) in which applications  104  store status data such as procedure and function call addresses, passed parameters, and sometimes local variables. Stack  132  is continually updated as applications perform tasks. 
     Window manager  134  implements the subsystem that builds and controls the common visual aspects of windows in the exemplary operating system  100 . The window is the basic building block for displaying information in the graphical environment of the exemplary operating system  100 . Window manager  134  manages how each window relates to all other windows in terms of visibility, ownership, and parent/child relationship and uses this information when creating, displaying, and destroying a window. Window manager  134  creates and displays message boxes, dialog boxes, and windows at the request of the application program  104  or at the request of other components of operating system  100 . 
     When the operating system  100  initializes, window manager  134  creates a window known as the desktop window. The desktop window is sized to cover the entire display area on monitor  112 . All other windows are displayed upon the desktop window. The operating system  100  classifies windows in a parent/child form of relationship. The desktop window is at the top of the window hierarchy. The next level of window in the window hierarchy of the operating system  100  is called a top-level window and is a child window of the desktop window. Top-level windows have only one parent window and that is the desktop window. Windows inside of a top-level window are child windows. For example, when an application  104  is loaded, the main window of that application is a top-level window. All other windows within the main window are child windows. Other windows classified as top-level windows include hard error message boxes, message boxes, and dialog boxes. 
     There are several types of windows that window manager  134  creates, displays and destroys. The type of window that most applications use as their main window is a window that has a caption and a border. Pop-up windows such as dialog boxes and message boxes also may have a caption bar and a border.  FIG. 3  shows a window  136  having a caption bar  138  and a border  140 . Windows with captions have a title field  142  and may also have a minimize box  144  that minimizes the window when a user clicks on it, a maximize box  146  that maximizes the window when the user clicks on it, a close box  148  that closes the window when the user clicks on it, and a system menu box  150  that provides the user with an interface to specified system commands. These commands include restore a minimized window, move the window with the keyboard, size the window with the keyboard, minimize the window, maximize the window, and close the window. The remaining portion of the window is an application area  152  for the application  104  to use. Within the application area  152  are the application&#39;s toolbars, document window, menu system, etc. 
     Whenever a top-level window is to be displayed within the desktop window, the window manager  134  checks to determine if a feedback icon or button is to be added to the window. In the illustrative operating system  100 , window manager  134  checks within the registry  106  to see if a feedback icon should be shown in the window  136 . Note that a feedback or comments button could also be used. In one embodiment, the feedback icon can be displayed on only hard error messages, message boxes, dialog boxes, on all top-level windows or on no windows. Window manager  134  checks the registry  106  to determine in which type of window to add a feedback button and what text should be displayed in the feedback button. Any user having system administrator privileges can provide and set the registry settings that enable the feedback icon to be displayed and the type of box, message, or window in which to display the feedback icon. It should be noted that the text is customizable and is configured within the registry  106 . If the type of window being created by the window manager  134  matches one of the type specified in the registry  106  as having a feedback button, the window manager will add a feedback button  154  in the caption bar  138  as illustrated in FIG.  4 . 
       FIG. 5  shows a flow diagram of the steps taken to provide feedback from a user. Steps  162 - 176  are representative of the steps the window manager  134  and other operating system components take when an application  104  is running. When the user logs on or an application starts (step  160 ), window manager  134  checks the registry to determine the type, if any, of window to add a comment button  154  and the text of the comment button (step  162 ). When window manager  134  receives a request to create a window  136  from an application  104  or another component of the operating system  100  (step  164 ), window manager  134  determines whether the type of window to be created matches one of the window types specified as having a feedback button (step  166 ). If the type of window being created does not match the window type specified, a window  136  is created without the comments button (step  168 ). If the window type being created does match the window type specified, a window  136  is created with the comment button  154  (step  170 ). 
     When window manager  134  detects when the user selects the comment button  154 , window manager  134  looks for and loads an external program file and an application programming interface (API) (step  174 ). The external program file, which is a dynamic link library (dll) in the exemplary operating system  100 , contains instructions and text on what should be presented to the user to obtain her feedback. A default file is provided by the operating system  100 . Note that this file can be enhanced, replaced, customized, etc. by the developer or system administrator. The operating system  100  also provides a default API. The default API sends any comments provided by the user and other information to a central server for analysis. This API can be enhanced, replaced, customized, etc. by the developer or system administrator. The screen cursor shape may be changed when the user moves the cursor over the comment button  154 . The window manager  134  provides the dll with the handle to the window being displayed and a stack trace. The stack trace describes the steps the application  104  and operating system  100  took to get to the point of displaying the window. It describes the procedure and function call addresses, passed parameters, and local variables stored in stack  132 . With the window handle, the component that provided the resources for the message or dialog box to be loaded and the program that created the window can be determined. The developer or system administrator can provide a dll that has program specific instructions. One situation where this might arise is when there are multiple programs in various stages of development or when the developer or system administrator wants to provide a different message depending on the skill level of the user. The dll may be also programmed to gather any other information the developer or system administrator considers relevant. This could include a machine&#39;s configuration such as what video card, audio card, etc. are on the machine as some error messages may only show up on a particular machine configuration. 
     In one embodiment, this external program file is named, for example, comments_button.dll and it displays a dialog box  178  (see  FIG. 6 ) asking the user to enter comments and feedback on that specific message or window being displayed. Once the user enters her comments, this information, along with the information about the window, is sent back to a server for analysis by the developer or system administrator via the default API. 
     In an alternative embodiment, the dll in conjunction with the API sends the user to a web site that collects data about the message or window being displayed. The dll and API also allows the user to see what other users have reported about the message or window being displayed, which potentially gives the user more information on the particular message or window. 
     In view of the many possible embodiments to which the principles of this invention may be applied, it should be recognized that the embodiment described herein with respect to the drawing figures is meant to be illustrative only and should not be taken as limiting the scope of invention. For example, those of skill in the art will recognize that the elements of the illustrated embodiment shown in software may be implemented in hardware and vice versa or that the illustrated embodiment can be modified in arrangement and detail without departing from the spirit of the invention. Therefore, the invention as described herein contemplates all such embodiments as may come within the scope of the following claims and equivalents thereof.