專利名稱::通用用戶界面命令體系結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)和用戶界面,尤其涉及通用用戶界面命令體系結(jié)構(gòu)。
背景技術(shù):
:當(dāng)計(jì)算機(jī)技術(shù)在進(jìn)步和發(fā)展時(shí),計(jì)算機(jī)呈現(xiàn)給用戶的用戶界面(UI)也在進(jìn)步和發(fā)展。圖形用戶界面(GUI)已成為了常見物,從而產(chǎn)生了用戶通常易于交互的用戶界面??蓪?duì)用戶界面使用允許以不同的方式向用戶呈現(xiàn)命令選項(xiàng)的許多不同的呈現(xiàn)模型,諸如菜單、工具條、按鈕、鏈接等等。當(dāng)設(shè)計(jì)這些GUI時(shí)遇到的一個(gè)問(wèn)題是可用于GUI的不同呈現(xiàn)模型。通常,命令的提供者必須為要包括該命令的GUI支持的每一不同的呈現(xiàn)模型編寫單獨(dú)的描述和接口。這導(dǎo)致命令提供者一方的額外和重復(fù)的工作。在提供者編寫命令之后開發(fā)新呈現(xiàn)模型的情況下會(huì)導(dǎo)致其它問(wèn)題一因?yàn)榫帉懨畹奶峁┱卟恢涝撔碌某尸F(xiàn)模型,因此他或她通常無(wú)法編寫支持該新呈現(xiàn)模型的命令。由此,具有一種實(shí)現(xiàn)減少這些問(wèn)題的命令的方法將是有益的。發(fā)明概述此處描述了一種通用用戶界面命令體系結(jié)構(gòu)。根據(jù)某些方面,描述了一種允許應(yīng)用程序主存用于在計(jì)算設(shè)備上呈現(xiàn)的命令的通用體系結(jié)構(gòu)。該體系結(jié)構(gòu)包括命令主機(jī)和命令代理程序。命令主機(jī)提供可呈現(xiàn)多個(gè)用戶界面命令的工作空間。命令代理程序標(biāo)識(shí)對(duì)命令的多個(gè)支持的模式,并且進(jìn)一步與命令主機(jī)協(xié)商以確定多個(gè)所支持的模式中的哪一個(gè)可用于該命令。根據(jù)某些方面,描述了一種可用于允許應(yīng)用程序主存命令的應(yīng)用程序編程接口(API)。該API包括例如展示模式枚舉的命令代理程序組件。響應(yīng)于諸如命令主機(jī)等請(qǐng)求者調(diào)用模式枚舉,命令代理程序組件對(duì)與組件相關(guān)聯(lián)的特定命令返回由該組件支持的多個(gè)不同呈現(xiàn)模型的列表。根據(jù)某些方面,討論了一種描述注冊(cè)命令以供應(yīng)用程序激活的方法的激活機(jī)制。該激活機(jī)制通過(guò)標(biāo)識(shí)包括一個(gè)或多個(gè)自變量的對(duì)象定義來(lái)創(chuàng)建命令代理程序。對(duì)于作為非文字自變量的一個(gè)或多個(gè)自變量中的每一個(gè),遞歸地標(biāo)識(shí)基于該自變量的一個(gè)或多個(gè)附加對(duì)象定義。然后創(chuàng)建命令代理程序作為由所標(biāo)識(shí)的對(duì)象定義所定義的對(duì)象。附圖簡(jiǎn)述全文中使用相同的標(biāo)號(hào)來(lái)引用相同的組件和/或特征。圖1示出了其中使用通用用戶界面命令體系結(jié)構(gòu)的一個(gè)示例計(jì)算設(shè)備。圖2和3各自更詳細(xì)地示出了一個(gè)示例性通用UI命令體系結(jié)構(gòu)。圖4是示出用于使用通用UI命令體系結(jié)構(gòu)來(lái)呈現(xiàn)命令的示例過(guò)程的流程圖。圖5是示出用于創(chuàng)建命令代理程序的示例組件的框圖。圖6示出了用于對(duì)象定義的示例數(shù)據(jù)結(jié)構(gòu)。圖7是示出用于創(chuàng)建命令代理程序的示例過(guò)程的流程圖。圖8示出了可用于實(shí)現(xiàn)此處所描述的技術(shù)的一個(gè)通用計(jì)算機(jī)環(huán)境。較佳實(shí)施例的詳細(xì)描述此處描述了一種通用用戶界面命令。根據(jù)某些方面,描述了一種允許應(yīng)用程序主存命令以在計(jì)算設(shè)備上呈現(xiàn)的通用體系結(jié)構(gòu)。該命令可由與應(yīng)用程序相同的設(shè)計(jì)者或作者編寫,或者可由其它方(例如,由第三方開發(fā)者)編寫。另外,描述了一種可用于允許應(yīng)用程序主存命令的應(yīng)用程序編程接口(API)。此外,討論了一種描述可注冊(cè)命令以供應(yīng)用程序激活的方法的激活機(jī)制。通用UI命令體系結(jié)構(gòu)圖1示出了其中使用通用用戶界面命令體系結(jié)構(gòu)的一個(gè)示例計(jì)算設(shè)備102。計(jì)算設(shè)備102包括均支持通用UI命令體系結(jié)構(gòu)106的多個(gè)(x個(gè))應(yīng)用程序104。UI命令體系結(jié)構(gòu)106允許應(yīng)用程序104以通用的方式主存不同的命令,如將在下文中更詳細(xì)討論的。命令可由與創(chuàng)作應(yīng)用程序104相同的一方(或多方)創(chuàng)作,或者可由不同方創(chuàng)作。計(jì)算設(shè)備102表示具有呈現(xiàn)用戶界面的處理器或控制器的各種不同的設(shè)備中的任一種。這些設(shè)備的示例包括臺(tái)式計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、筆記本計(jì)算機(jī)、手持式或便攜式計(jì)算機(jī)、娛樂(lè)設(shè)備、游戲控制臺(tái)、個(gè)人數(shù)字助理(PDA)、蜂窩或移動(dòng)電話等等。應(yīng)用程序104表示各種應(yīng)用程序中的任一種。這些應(yīng)用程序的示例包括操作系統(tǒng)、休閑程序、實(shí)用程序、教育程序、生產(chǎn)程序、財(cái)務(wù)程序等等。圖2更詳細(xì)示出了一個(gè)示例通用UI命令體系結(jié)構(gòu)106。命令體系結(jié)構(gòu)106包括命令主機(jī)130和多個(gè)(y個(gè))命令代理程序132??稍诿铙w系結(jié)構(gòu)106中包括任意數(shù)量的命令代理程序132。另外,盡管圖2中示出了多個(gè)命令代理程序132,但作為替代可在命令體系結(jié)構(gòu)106中僅包括單個(gè)命令代理程序。命令體系結(jié)構(gòu)106被稱為UI命令體系結(jié)構(gòu)是因?yàn)轶w系結(jié)構(gòu)106是為用于UI命令而設(shè)計(jì)的,UI命令是經(jīng)由UI呈現(xiàn)以供用戶選擇的命令。命令體系結(jié)構(gòu)106允許創(chuàng)作或編寫命令以經(jīng)由用戶界面呈現(xiàn)給用戶并由用戶選擇。命令體系結(jié)構(gòu)106可支持任何類型的命令,諸如訪問(wèn)資源(例如,諸如文件、存儲(chǔ)設(shè)備、輸入設(shè)備、輸出設(shè)備等)的命令、向用戶呈現(xiàn)內(nèi)容的命令(例如,回放音頻文件或音頻/視頻文件、打印出數(shù)據(jù)的硬拷貝等)、允許用戶導(dǎo)航到特定位置(例如,文件、網(wǎng)絡(luò)位置、控制面板等)的命令等等。命令主機(jī)130是提供可放置命令以供呈現(xiàn)的外殼或工作空間的任何應(yīng)用程序(諸如,圖1的應(yīng)用程序104)的至少一部分。命令主機(jī)可提供單個(gè)這樣的外殼或工作空間,并且多個(gè)不同的命令主機(jī)可同時(shí)提供不同的外殼或工作空間。這些工作空間的示例包括窗口或顯示器的其它部分、可聽列表等等。命令主機(jī)130支持用于呈現(xiàn)命令的一種或多種模式,也稱為一種或多種呈現(xiàn)模型。這些不同的模式或呈現(xiàn)模型指的是可經(jīng)由用戶界面向用戶呈現(xiàn)命令的不同方式。模式或呈現(xiàn)模型的示例包括菜單、菜單列表、上下文菜單、任務(wù)欄、按鈕、鏈接(例如,超鏈接)等等。這些不同的模式或呈現(xiàn)模型通常包括諸如在GUI中可視地顯示命令,盡管也可使用其它呈現(xiàn)方式(例如,可聽地呈現(xiàn)命令)。每一命令代理程序132是位于命令主機(jī)130和該命令的最終處理程序(稱為命令提供者,如下文更詳細(xì)討論的)之間的中介。每一命令代理程序132與一特定命令相關(guān)聯(lián)。命令代理程序132枚舉該命令所支持的模式,并就對(duì)該命令使用哪一模式與命令主機(jī)130進(jìn)行協(xié)商。如果命令代理程序132支持一特定模式,則命令代理程序132可創(chuàng)建與該模式相關(guān)聯(lián)的特定命令提供者并將其給予命令主機(jī)130。該協(xié)商是經(jīng)由接口134執(zhí)行的。在某些實(shí)施例中,每一命令代理程序132展示一應(yīng)用程序編程接口(API)。該API可由命令主機(jī)130在協(xié)商過(guò)程中調(diào)用。這一API的一個(gè)示例在下文中更詳細(xì)地討論。UI命令體系結(jié)構(gòu)106被稱為是通用的是因?yàn)樵搮f(xié)商過(guò)程以及單個(gè)命令代理程序能為其相關(guān)聯(lián)的命令支持的模式的多樣性??墒褂猛幻畲沓绦騺?lái)允許以各種不同的呈現(xiàn)模型呈現(xiàn)命令,且由此被視為是通用的。命令主機(jī)130在每次命令主機(jī)的執(zhí)行開始時(shí)與命令代理程序132協(xié)商??墒共煌拿畲沓绦?32對(duì)命令主機(jī)130可訪問(wèn),從而允許其相關(guān)聯(lián)的命令由命令主機(jī)130通過(guò)UI來(lái)呈現(xiàn)。使命令代理程序132對(duì)命令主機(jī)130可訪問(wèn)的一種方式是通過(guò)以下更詳細(xì)討論的命令代理程序激活機(jī)制。命令主機(jī)130也可在不同的時(shí)刻,諸如只要選擇有改變(例如,選擇UI中的哪一(些)項(xiàng))、只要命令上下文有改變(諸如UI類型的改變(例如,從可視UI變?yōu)榭陕燯I的改變)、UI格式的改變(例如,對(duì)窗口重定大小)、UI內(nèi)容的改變(例如,從作為操作系統(tǒng)的命令主機(jī)執(zhí)行一不同的應(yīng)用程序)等等)時(shí)與命令代理程序132協(xié)商。作為這一協(xié)商的一個(gè)示例,假定應(yīng)用程序可呈現(xiàn)同時(shí)具有菜單和按鈕模式兩者的用戶界面。在該示例中,命令主機(jī)130可與命令代理程序132協(xié)商以確定使用這兩種模式(菜單和/或按鈕)中的哪一種。假定命令代理程序132與使用打印機(jī)生成所選數(shù)據(jù)的硬拷貝的打印命令相關(guān)聯(lián)。還假定命令代理程序132支持按鈕模式以及列表模式。命令主機(jī)130可與命令代理程序132協(xié)商,并確定主機(jī)130和代理程序132兩者同時(shí)支持的唯一模式是按鈕模式(代理程序132不支持菜單模式,而主機(jī)130不支持列表模式)。由此,協(xié)商將導(dǎo)致選擇按鈕模式。應(yīng)當(dāng)注意,在某些實(shí)施例中,命令主機(jī)130可支持比命令代理程序132所支持的更多的模式。另外,命令主機(jī)UO可具有對(duì)可將命令從一種模式轉(zhuǎn)換成另一種模式的程序或其它資源的訪問(wèn)。繼續(xù)前述示例,命令主機(jī)130可具有對(duì)將用于按鈕模式中的命令的信息轉(zhuǎn)換成可用于菜單模式中的命令的程序的訪問(wèn)。由此,在協(xié)商過(guò)程中,命令主機(jī)130可選擇按鈕模式,然后將所接收到的關(guān)于按鈕模式中的打印命令的信息轉(zhuǎn)換成菜單模式。這一過(guò)程允許例如命令代理程序132與在命令代理程序132生成之后創(chuàng)建的且命令代理程序132毫不知情的模式一起使用。還應(yīng)當(dāng)注意,命令代理程序132可按不同的順序來(lái)枚舉其模式。在某些實(shí)施例中,命令代理程序132按照偏好的順序(例如,命令代理程序132或命令代理程序132的作者偏愛的由命令主機(jī)130選擇模式的順序)來(lái)枚舉其模式。然而,在某些實(shí)現(xiàn)中,命令主機(jī)130可選擇忽略命令代理程序132偏愛的順序。也可替換地使用其它排序,諸如隨機(jī)順序、字母順序等等。命令代理程序132也可枚舉不同的命令組。這些組是對(duì)命令主機(jī)130的關(guān)于特定命令應(yīng)彼此靠近的指示。通常,在某些實(shí)施例中,不要求命令主機(jī)130遵循由這些指示提供的指導(dǎo),但是通常試圖遵循這些指導(dǎo)。在某些實(shí)施例中,命令代理程序132也可以是用于一個(gè)或多個(gè)命令代理程序的容器。例如,命令代理程序可支持作為菜單項(xiàng)的一種呈現(xiàn)模式,在該呈現(xiàn)模式中,可將命令作為UI中的單個(gè)菜單項(xiàng)來(lái)呈現(xiàn)。命令代理程序也可支持作為菜單列表的呈現(xiàn)模式,在該呈現(xiàn)模式中,命令代理程序是用于多個(gè)其它命令代理程序的容器,這些其它命令代理程序中的每一個(gè)以UI中的菜單項(xiàng)列表來(lái)顯示。圖3更詳細(xì)示出了一個(gè)示例通用UI命令體系結(jié)構(gòu)106。命令主機(jī)130如上所述與命令代理程序132協(xié)商模式。另外,圖3中示出了命令上下文140和命令提供者142。在某些實(shí)施例中,命令主機(jī)130、命令代理程序132、命令上下文140和命令提供者142的每一個(gè)在通信上彼此耦合,從而允許它們彼此通信。在某些實(shí)施例中,命令主機(jī)130、命令代理程序132、命令上下文140和命令提供者142的每一個(gè)都是一個(gè)對(duì)象,且能夠調(diào)用其它對(duì)象的方法、枚舉、屬性等。命令提供者142是特定命令的最終處理程序。命令提供者142控制調(diào)用命令時(shí)允許的各種動(dòng)作(例如,響應(yīng)于對(duì)諸如打印命令等命令的用戶選擇而涉及的動(dòng)作)。命令提供者142通常包含只要調(diào)用特定命令時(shí)就執(zhí)行的指令。命令提供者142是由命令代理程序132在完成了與命令主機(jī)130的模式協(xié)商之后實(shí)例化的對(duì)象。不同的命令提供者與命令代理程序132支持的每一模式相關(guān)聯(lián)。由此,當(dāng)模式協(xié)商導(dǎo)致特定模式時(shí),命令代理程序132為該特定模式實(shí)例化一對(duì)象。所實(shí)例化的對(duì)象也被傳遞到命令主機(jī)130,從而允許命令主機(jī)130與命令提供者142交互。應(yīng)當(dāng)注意,在某些情況下,命令主機(jī)130可與命令代理程序132協(xié)商多種呈現(xiàn)模型或模式。在這一情況下,命令代理程序132對(duì)多個(gè)呈現(xiàn)模型或模式中的每一個(gè)實(shí)例化多個(gè)命令提供者142中的一個(gè),并且將每一如此實(shí)例化的命令提供者142傳遞到命令主機(jī)130。在替換實(shí)施例中,命令代理程序132可與一個(gè)或多個(gè)命令提供者142組合。在這些實(shí)施例中,無(wú)需實(shí)例化單獨(dú)的命令提供者142。相反,在命令主機(jī)130與命令代理程序132協(xié)商了模式之后,命令主機(jī)130可與作為該命令的最終處理程序的命令主機(jī)130而非命令提供者142交互。命令上下文140是由命令主機(jī)130提供且可由命令代理程序132訪問(wèn)的上下文信息的列表。命令上下文140中包括的上下文信息可以變化。上下文信息指的是例如描述用戶界面的信息、描述命令主機(jī)130的信息、描述用戶界面中當(dāng)前正在顯示什么和/或如何顯示它的信息、關(guān)于可用資源的信息等等。上下文信息的具體示例包括當(dāng)前選中UI中呈現(xiàn)的什么項(xiàng)(如果有)、命令所處的區(qū)域的大小(例如,以像素表示)、UI中當(dāng)前是否正呈現(xiàn)特定項(xiàng)或特征、特定資源是否在計(jì)算設(shè)備上可用、計(jì)算設(shè)備耦合到什么其它組件(例如,打印機(jī)當(dāng)前是否耦合到計(jì)算設(shè)備)等等。不同的命令代理程序132能對(duì)不同的上下文信息感興趣,且某些命令代理程序132可能對(duì)任何上下文信息都不感興趣。當(dāng)特定的命令代理程序132期望知道特定的上下文信息時(shí),該特定命令代理程序132將與命令上下文140交互以獲得該期望的上下文信息。還應(yīng)當(dāng)注意,命令代理程序132支持的呈現(xiàn)模型可以基于命令上下文140而改變。例如,命令代理程序132可在特定組件(諸如打印機(jī)、個(gè)人音頻播放器、揚(yáng)聲器等)耦合到計(jì)算設(shè)備的情況下支持一種特定的呈現(xiàn)模型,-但是在該特定組件沒有耦合到該計(jì)算設(shè)備的情況下不支持該特定呈現(xiàn)模型。作為另一示例,命令代理程序132可支持基于由命令主機(jī)130提供的工作空間的大小的不同呈現(xiàn)模型。通用UI命令體系結(jié)構(gòu)106便于創(chuàng)作命令。實(shí)現(xiàn)這一便利的一種方式是通過(guò)使用命令代理程序132??山?jīng)由同一命令代理程序132來(lái)訪問(wèn)命令的所有處理程序,而非要求作者為多個(gè)不同的呈現(xiàn)模型將同一命令進(jìn)行多次不同的注冊(cè)。另外,可對(duì)不同的模式共享公共的功能,諸如要為該命令顯示的顯示名稱或圖標(biāo),或當(dāng)用戶選中該命令時(shí)要采取的調(diào)用動(dòng)作。這一共享例如可通過(guò)每一命令提供者142引用包含當(dāng)與命令提供者142相關(guān)聯(lián)的命令由用戶選中時(shí)執(zhí)行的指令集的同一對(duì)象來(lái)實(shí)現(xiàn)?;蛘?,某些公共功能可由命令提供者132變?yōu)閷?duì)命令主機(jī)130可用,而非在相關(guān)聯(lián)的命令提供者142中實(shí)現(xiàn)或通過(guò)其來(lái)訪問(wèn)。圖4是示出用于使用通用UI命令體系結(jié)構(gòu)106來(lái)呈現(xiàn)命令的示例過(guò)程180的流程圖。過(guò)程180在軟件中執(zhí)行,盡管過(guò)程180的替換方面可以在固件、硬件或固件、硬件和/或軟件的組合中執(zhí)行。最初,命令主機(jī)和命令代理程序協(xié)商一模式(動(dòng)作182)。在某些實(shí)施例中,這一協(xié)商是通過(guò)命令代理程序向命令主機(jī)標(biāo)識(shí)它所支持的模式,且命令主機(jī)將這些模式與命令主機(jī)所支持的模式進(jìn)行比較,然后命令主機(jī)選擇命令主機(jī)和命令代理程序都支持的模式之一來(lái)執(zhí)行的。或者,在其它實(shí)施例中,該協(xié)商可采用其它形式。例如,命令主機(jī)可向命令代理程序標(biāo)識(shí)它所支持的模式,命令代理程序?qū)⑦@些模式與命令代理程序所支持的模型進(jìn)行比較,然后命令代理程序選擇命令主機(jī)和命令代理程序都支持的模式之一。作為另一示例,命令主機(jī)可審閱它所支持的模式的列表,并對(duì)每一這樣的模式向命令代理程序査詢命令代理程序是否支持該模式一一旦命令主機(jī)標(biāo)識(shí)了它所支持的同樣也被命令代理程序所支持的模式之一,命令主機(jī)就可停止査詢命令代理程序。一旦協(xié)商了模式,命令代理程序?qū)嵗騽?chuàng)建與協(xié)商的模式相關(guān)聯(lián)的命令提供者(動(dòng)作184)。在某些實(shí)現(xiàn)中,命令提供者是通過(guò)命令主機(jī)調(diào)用由命令代理程序展示的GetProvider(獲得提供者)方法來(lái)實(shí)例化的。GetProvider方法將在下文詳細(xì)討論。命令主機(jī)然后基于動(dòng)作184中實(shí)例化或創(chuàng)建的命令提供者將命令放置在用戶界面中(動(dòng)作186)。這一命令放置指的是在用戶界面中定位命令的圖標(biāo)、名稱和/或其它標(biāo)識(shí)符。如上所述,協(xié)商模式可能不是命令主機(jī)實(shí)際用于呈現(xiàn)命令的模式(相反,命令主機(jī)可對(duì)協(xié)商模式使用從命令提供者獲得的信息來(lái)使用不同的模式呈現(xiàn)命令)。命令主機(jī)然后與命令提供者交互(動(dòng)作188)。這一交互包括,例如呈現(xiàn)命令的用戶界面以及在適當(dāng)時(shí)(例如,在用戶調(diào)用命令的情況下)調(diào)用命令的行為。示例API實(shí)現(xiàn)以下是實(shí)現(xiàn)上述通用UI命令體系結(jié)構(gòu)106的一個(gè)示例API。表I中列出了/VoWc/erCfl&g07(提供者類別)和C卵te^Oty'e"Desc〃jt"o"(上下文對(duì)象描述)。Ccwtoc9ty'e"Z)e5c">"o"用作Comma"(iCo"torf(命令上下文)對(duì)象持有且由主機(jī)提供的一個(gè)單獨(dú)的上下文數(shù)據(jù)的名稱。/VowWwO^goo;用于確定所描述的上下文數(shù)據(jù)的易失性。易失性上下文值在改變?nèi)魏沃鳈C(jī)上下文值時(shí)會(huì)離開該命令上下文。非易失性值留在上下文中。<table>tableseeoriginaldocumentpage14</column></row><table>publicvirtualProviderCategoryProviderCategory{get;}在提供者類別中檢索由該ContextObjectDescription表示的該條上下文信息。提供者類別幫助CommandContext管理該上下文值的生存期。如果類別是易失性的,則只要設(shè)置了某一主機(jī)值上下文就擦除該值。如果類別是非易失性的,則不從上下文中移除該值。publicContextObjectDescription(ProviderCategoryproviderCategory);構(gòu)造ContextObjectDescription。]_表II中列出了Co"toc^>ty'ectt(上下文對(duì)象)類。在某些實(shí)施例中,在Co"fex96>cfc靜態(tài)類中保存一組預(yù)定義的CowfexZOty'e"Z)escn》"'om。Comma;WCo"tocf也可保持不是該預(yù)定義列表的一部分的一組可擴(kuò)展_^_publicstaticclassContextObjects〃(ItemCollection)GetObject(ContextObjects.Selectedltems)publicstaticContextObjectDescriptionSelectedltems;CommandContext映射到的對(duì)象是ItemCollection(項(xiàng)集合)類型,并表示主機(jī)中當(dāng)前選中的項(xiàng)。這些項(xiàng)是當(dāng)被調(diào)用時(shí)應(yīng)當(dāng)應(yīng)用命令的項(xiàng)?!?Item)GetObject(ContextObjects.FolderItem)publicstaticContextObjectDescriptionFolderltem;CommandContext映射到的對(duì)象是Item(項(xiàng))類型,并表示命令主機(jī)中當(dāng)前查看的文件夾?!?COMObject)GetObject(ContextObjects.ViewSite)publicstaticContextObjectDescriptionViewSite;_這允許命令直接與其命令主機(jī)交談(例如,它直接向命令主機(jī)實(shí)現(xiàn)提供指針)。注意,使用ViewSite(査看地點(diǎn))會(huì)打破封裝,因?yàn)槔硐氲兀顚?shí)現(xiàn)不應(yīng)取決于特定的命令主機(jī)實(shí)現(xiàn)。]_表III中歹(J出了Gomma"c/Go"&xf。Cb附附o"^/Cb"fexf是4每Co"tecf(9ty'e"D^c;^f/o似映射到對(duì)象值的索引器。ComwawdCowtexf也具有當(dāng)改變上下文時(shí)激發(fā)的事件。CommawdCowfex^類包括由圖3的命令上下文140展示、且由命令主機(jī)130和/或命令代理程序132調(diào)用的屬性、方法和枚舉。_表III_publicdelegatevoidCommandContextHandler(ContextObjectDescription)這是"上下文改變"事件的事件類型。ContextObjectDescription參數(shù)指定上下文中哪一對(duì)象實(shí)際改變。publicclassCommandContextpubliceventCommandContextHandlerContextChanged;當(dāng)上下文改變時(shí)激發(fā)。protectedvirtualvoidOnContextChanged(ContextObjectDescription);當(dāng)上下文改變時(shí)激發(fā);派生類應(yīng)調(diào)用這一基本實(shí)現(xiàn)。publicobjectthis[ContextObjectDescriptionname]get;set;這是Comwa"(iCo"fexZ白勺"屬性包";它將Cowtexf06_/e"Z)Mcn;p"ow映射到受管對(duì)象。受管對(duì)象的類型是由ContextObjectDescription的提供者<table>tableseeoriginaldocumentpage17</column></row><table>表VI中列出了Commaw^n^w(命令代理程序)類。Cowwaw^wfer類包括由命令代理程序132展示的、且可由圖3的命令主機(jī)130調(diào)用的屬性、方法和枚舉。表VIpublicabstractclassCommandBrokerpublicvirtualstringIdentity{get;}默認(rèn)為最派生類型的名稱,這是命令代理程序的身份。身份應(yīng)當(dāng)是唯一的,且命令主機(jī)能夠確定如何使用它。publicvirtualCommandContextContextget;set;獲得或設(shè)置命令代理程序上的命令上下文。命令上下文如上所述。publicclassGroup{}staticpublicGroupUngrouped;在某些實(shí)現(xiàn)中,僅有一個(gè)標(biāo)準(zhǔn)組,即"未分組"組。然而命令代理程序和命令主機(jī)可擴(kuò)展該列表并用其自己的語(yǔ)義含義來(lái)創(chuàng)建新組。publicvirtualIEnumerableGroups{get;}按偏好順序排列的命令代理程序支持的組的列表。publicvirtualIEnumerableModes{get;}按偏好順序排列的命令代理程序支持的模式的列表。publicvirtualobjectGetProvider(ModeDescriptionmode);命令提供者是該模式的實(shí)際命令實(shí)現(xiàn)。命令主機(jī)用該代理程序支持的模式描述調(diào)用該方法,且代理程序必須通過(guò)返回正確的類型(由模式描述的"類型"字段確定)來(lái)履行合約。protectedCommandContextHandlerContextChangedHandlerget;set;__200480042691.6的上下文上的上下文改變事件。1_表VII中列出了命令提供者接口的一個(gè)示例。這是用于圖3的示例命令提供者142的接口。所列出的示例是用于支持"任務(wù)按鈕"模式的命令的接口,即/:Ta^^爐o,xP,'oW^r(任務(wù)按鈕提供者接口)。/ra^rBw加MiVov/c/er包括可由命令主機(jī)訪問(wèn)并使用的兩個(gè)串(ShortTitle(短標(biāo)題)和LongTMe(長(zhǎng)標(biāo)題))。//wageSowce(圖像源)是當(dāng)與該命令按鈕提供者相關(guān)聯(lián)的命令被用戶選中時(shí)執(zhí)行的指令集。當(dāng)選中該命令時(shí),通過(guò)命令主機(jī)調(diào)用/7^^Wto"/VoWfi^./wvofe^來(lái)調(diào)用該指令集。/尸ravWwC/w"g^(提供者改變接口)是命令提供者可實(shí)現(xiàn)來(lái)向命令主機(jī)給出改變通知的接口。iVov/c^C/wwge//a"Wer(提供者改變處理程序)是聲明從//Vov/cferC/zcmgM內(nèi)激發(fā)的iVov/ArC^wg^(提供者改變)事件的類型的受管委托。命令主機(jī)可使用尸rov睡rC/w唯W事件來(lái)告知何時(shí)應(yīng)向命令提供者重新査詢某一特定狀態(tài)。例如,如果/ra^^組朋尸raWofer的"ShortTitle"改變(例如,由于選擇改變),則命令提供者可經(jīng)由尸rov油rC72""g^/事件通知命令主機(jī)其狀態(tài)已改變。在該示例中,響應(yīng)于用戶通過(guò)與UI交互來(lái)改變選擇,命令主機(jī)改變命令上下文內(nèi)的"選中"狀態(tài),這導(dǎo)致命令上下文向命令提供者激發(fā)改變通知。作為該上下文改變事件的結(jié)果,命令提供者決定它希望改變其ShortTitle,因此它激發(fā)命令主機(jī)正在監(jiān)聽的/VoWcferOzangW事件。命令主機(jī)經(jīng)由它所具有的PraWfi^C/zaMgeifam//"類型的方法接收PwVfeK7/^Mg^/事件。作為該事件的結(jié)果,命令主機(jī)向命令提供者重新查詢其ShortText(短文本),LongText(長(zhǎng)文本)、IsEnabled(是否啟用)等,從而獲得給定其新狀態(tài)時(shí)重新表示該命令的足夠信息。命令主機(jī)使用該新信息來(lái)更新與該命令相關(guān)聯(lián)的UI。_表VII_publicdelegatevoidProviderChangeHandler();publicinterfaceIProviderChangesJ_<table>tableseeoriginaldocumentpage20</column></row><table>另外,可任選地包括實(shí)現(xiàn)用于編寫要在此處所討論的通用UI命令體系結(jié)構(gòu)中使用的命令的標(biāo)準(zhǔn)邏輯的"助手(helper)"類。助手類在單個(gè)類中包括上述各個(gè)接口以便于使用此處所討論的通用UI命令體系結(jié)構(gòu)來(lái)創(chuàng)作命令。命令代理程序作者然后可從該助手類進(jìn)行派生,并可覆蓋其功能的任何期望的部分。表VIII列出了一個(gè)示例助手類五xp/om《owna"d(Explorer命令),它可例如用于不同版本的Windows⑧操作系統(tǒng)中的Explorer。_表vni_<table>tableseeoriginaldocumentpage20</column></row><table><formula>formulaseeoriginaldocumentpage21</formula>命令代理程序激活機(jī)制圖2和3的命令代理程序132可用各種常規(guī)方式中的任一種來(lái)創(chuàng)建。在某些實(shí)施例中,使用一種采用激活程序的特定命令代理程序激活機(jī)制來(lái)創(chuàng)建命令代理程序132,如下所述。這一創(chuàng)建也稱為實(shí)例化或構(gòu)造。圖5是示出用于創(chuàng)建命令代理程序的示例組件的框圖。圖5示出了激活程序202和定義源204。定義源202包括命令代理程序定義204,它定義了如何實(shí)現(xiàn)特定的命令代理程序132。激活程序202訪問(wèn)定義源202以檢索命令代理程序定義204,然后如定義204中所定義的那樣創(chuàng)建命令代理程序132。定義源202可以是各種不同源中的任一種。例如,定義源202可以是Windows操作系統(tǒng)的注冊(cè)表、數(shù)據(jù)庫(kù)、文件(例如,以XML(可擴(kuò)展標(biāo)記語(yǔ)言)文件或某一其它格式)等等。命令代理程序定義204也可采用各種不同的形式。在某些實(shí)施例中,命令代理程序定義204按照其構(gòu)造函數(shù)形參描述了一個(gè)或多個(gè)對(duì)象。這些對(duì)象描述(此處也稱為關(guān)鍵名)描述了要被實(shí)例化或創(chuàng)建以創(chuàng)建命令代理程序132的對(duì)象。每一對(duì)象描述可具有零個(gè)或多個(gè)構(gòu)造函數(shù)形參。構(gòu)造函數(shù)形參可以是文字的(例如,串、數(shù)字、XML文檔、或字節(jié)數(shù)組)或非文字的(例如,另一對(duì)象描述)。在對(duì)象描述具有一個(gè)或多個(gè)非文字形參的情況下,這些非文字形參中的每一個(gè)也被遞歸地實(shí)例化或創(chuàng)建,直到實(shí)例化或創(chuàng)建了所有的對(duì)象。圖6示出了用于對(duì)象定義220的一個(gè)示例數(shù)據(jù)結(jié)構(gòu)。一個(gè)或多個(gè)這樣的對(duì)象定義共同構(gòu)成了圖5的命令代理程序定義204。由此,命令代理程序的示例數(shù)據(jù)結(jié)構(gòu)是一個(gè)或多個(gè)對(duì)象定義200數(shù)據(jù)結(jié)構(gòu)的集合。對(duì)象定義200包括程序集字段或部分222、類型字段或部分224、形參字段或部分226、以及文字定義字段或部分228。這些部分222、224、226和228中的每一個(gè)儲(chǔ)存表示所定義的對(duì)象的不同方面的各種數(shù)據(jù),如下所述。程序集部分222指示可從其實(shí)例化該命令代理程序的程序集。在某些實(shí)現(xiàn)中,程序集部分222指示包含要實(shí)例化的命令代理程序的代碼的受管程序集(dll)的"強(qiáng)名"(strongname)。強(qiáng)名指的是按照名稱、版本、公鑰令牌和文化唯一地標(biāo)識(shí)程序集(例如,盤上)的名稱。類型部分224包括由對(duì)象定義220定義的對(duì)象的標(biāo)識(shí)符。通常該標(biāo)識(shí)符是字母數(shù)字串,盡管可替換地使用其它字符或符號(hào)作為標(biāo)識(shí)符。不同程序集中的不同對(duì)象定義可在其各自的類型部分24中具有相同的標(biāo)識(shí)符。類型部分224中的標(biāo)識(shí)符結(jié)合程序集部分222中的程序集允許唯一地標(biāo)識(shí)對(duì)象。包括了形參部分226以標(biāo)識(shí)由對(duì)象定義220定義的對(duì)象的形參。特定對(duì)象可能沒有任何形參,在這一情況下,無(wú)需包括形參部分226(或者可以包括但為空,或者包括關(guān)于沒有形參的指示)。如上所述,形參可以是文字或非文字的。對(duì)于每一非文字形參,存在定義作為該非文字形參的對(duì)象的另一對(duì)象定義220。對(duì)于每一文字形參,存在文字定義字段228中定義該文字(例如,標(biāo)識(shí)特定串、特定數(shù)字、特定XML文檔、或特定字節(jié)數(shù)組)的定義。如果由對(duì)象定義220定義的對(duì)象沒有任何形參,則無(wú)需包括文字定義部分226(或者可以包括但為空,或者包括關(guān)于沒有任何文字的指示)。圖7是示出用于創(chuàng)建命令代理程序的示例過(guò)程240的流程圖。過(guò)程240由圖5的激活程序200實(shí)現(xiàn),且通常在軟件中執(zhí)行(盡管過(guò)程240的至少一部分可替換地在硬件、固件或硬件、固件和軟件的組合中執(zhí)行)。最初,標(biāo)識(shí)頂層對(duì)象定義(動(dòng)作242)。然后訪問(wèn)所標(biāo)識(shí)的對(duì)象定義(動(dòng)作244)并標(biāo)識(shí)所標(biāo)識(shí)的對(duì)象定義的任何形參(動(dòng)作246)。然后檢査是否有動(dòng)作246中標(biāo)識(shí)的為非文字的任何形參(動(dòng)作248)。如果沒有這樣的形參(例如,沒有形參或者所有形參是文字),則過(guò)程240完成分析所標(biāo)識(shí)的對(duì)象定義(動(dòng)作250)。然而,如果存在為非文字的至少一個(gè)形參,則標(biāo)識(shí)每一非文字形參(動(dòng)作252)。這些非文字形參中的每一個(gè)是另一對(duì)象定義。過(guò)程240然后返回到動(dòng)作244以分析所標(biāo)識(shí)的非文字形參中的每一個(gè)。由此,過(guò)程240繼續(xù)遞歸地分析命令代理程序定義中的每一對(duì)象定義,直到按照文字定義了所有對(duì)象定義(或者沒有形參)。在按照文字定義了所有對(duì)象定義(或者沒有形參)之后,通過(guò)對(duì)每一對(duì)象調(diào)用構(gòu)造函數(shù)來(lái)實(shí)例化由這些對(duì)象定義,因而由命令代理程序定義的各個(gè)對(duì)象(動(dòng)作254)。如此定義的每一對(duì)象然后可通過(guò)向上返回通過(guò)定義對(duì)象工作來(lái)實(shí)例化或創(chuàng)建。例如,激活程序200可實(shí)例化或創(chuàng)建僅按照文字定義的對(duì)象(或沒有形參的對(duì)象),然后使用這些對(duì)象來(lái)實(shí)例化或創(chuàng)建按照剛才實(shí)例化或創(chuàng)建的這些對(duì)象定義的對(duì)象,依此類推。當(dāng)實(shí)例化了頂層對(duì)象定義時(shí),實(shí)例化了命令代理程序。表IX列出了名為"FooBroker"的命令代理程序的命令定義的一個(gè)示例。表IX<table>tableseeoriginaldocumentpage23</column></row><table><table>tableseeoriginaldocumentpage24</column></row><table>如可從表IX的示例中看到的,頂層對(duì)象定義(或關(guān)鍵名)VTest用程序集部分、類型部分、形參部分和文字部分(標(biāo)識(shí)為title行)來(lái)定義。這些部分中的每一個(gè)在表IX的頂層對(duì)象定義示例中為單獨(dú)的一行。程序集部分指示從其實(shí)例化該命令代理程序的程序集(FooAssembly)。類型部分指示由該對(duì)象定義所定義的對(duì)象類型(FooBroker)。形參部分標(biāo)識(shí)用于該對(duì)象定義的兩個(gè)形參(title和bar)。title是在文字定義部分中定義的串,它是West對(duì)象定義的標(biāo)題行,為"Hello,World!"bar形參是另一對(duì)象,它在下一對(duì)象定義中定義。在對(duì)象的實(shí)例化期間,圖5的激活程序200搜索定義源202以標(biāo)識(shí)位于頂層對(duì)象定義VTest下方的另一對(duì)象定義,該對(duì)象定義也是bar對(duì)象的對(duì)象定義。該對(duì)象定義是VTesAbar關(guān)鍵名。VTestMDar關(guān)鍵名也用程序集部分、類型部分、形參部分和標(biāo)題部分(其每一個(gè)是表IX中的一行)來(lái)定義。程序集部分指示從其例示該命令代理程序的程序集(FooAssembly)。這是與頂層關(guān)鍵名VTest中標(biāo)識(shí)的相同的命令主機(jī)。類型部分指示由該對(duì)象定義所定義的對(duì)象類型(BarObject)。形參部分標(biāo)識(shí)用于該對(duì)象定義的兩個(gè)形參(count和snoo)。count是在文字定義部分中定義的整數(shù),它是、TestMmr對(duì)象定義的count行,為十六進(jìn)制值"38"。snoo形參是另一對(duì)象,它在下一對(duì)象定義中定義。在對(duì)象的實(shí)例化期間,圖5的激活程序200搜索定義源202以標(biāo)識(shí)位于VTes他ar對(duì)象定義下方的另一對(duì)象定義,該對(duì)象定義也是snoo對(duì)象的對(duì)象定義。該對(duì)象定義是、TestMaiAsno0關(guān)鍵名。\Test\bar\snoo關(guān)鍵名也用程序集部分和類型部分來(lái)定義。snoo對(duì)象的對(duì)象定義沒有形參,因此對(duì)象定義中不包括形參部分或文字定義部分。程序集部分指示從其例示該命令代理程序的程序集(FooAssembly)。這是與頂層關(guān)鍵名VTest和\Test\bar關(guān)鍵名中標(biāo)識(shí)的相同的命令主機(jī)。類型部分指示由該對(duì)象定義所定義的對(duì)象類型(SnooObject)。表X列出了支持此處所討論的命令代理程序激活的一個(gè)示例API。以上討論的每一對(duì)象定義或關(guān)鍵名是用表X中的""/vfl"OMDe力mY/o"(激活定義接口)接口來(lái)封裝的。程序集(Assembly)字段和類型(Type)字段都是Z4c//vfl//o"D^"http:///ow接口的屬性。當(dāng)存在時(shí),每一形參和文字定義是/D^m'"o"五/eme"K定義元素接口)。<<table>tableseeoriginaldocumentpage25</column></row><table>示例計(jì)算機(jī)環(huán)境圖8示出了通用計(jì)算機(jī)環(huán)境300,它可用于實(shí)現(xiàn)此處所描述的技術(shù)。計(jì)算機(jī)環(huán)境300僅為計(jì)算環(huán)境的一個(gè)示例,并非暗示對(duì)計(jì)算機(jī)和網(wǎng)絡(luò)體系結(jié)構(gòu)的使用范圍或功能的局限。也不應(yīng)將計(jì)算機(jī)環(huán)境300解釋為對(duì)示例性計(jì)算機(jī)環(huán)境300中示出的任一組件或其組合具有任何依賴或需求。計(jì)算機(jī)環(huán)境300包括計(jì)算機(jī)302形式的通用計(jì)算設(shè)備。計(jì)算機(jī)302可以是例如圖1的計(jì)算設(shè)備102。計(jì)算機(jī)302也可以是作為多媒體演示的源的編碼器設(shè)備。計(jì)算機(jī)302的組件可包括但不限于,一個(gè)或多個(gè)處理器或處理單元304、系統(tǒng)存儲(chǔ)器306以及將包括處理器304的各類系統(tǒng)組件耦合至系統(tǒng)存儲(chǔ)器306的系統(tǒng)總線308。系統(tǒng)總線308表示若干種總線結(jié)構(gòu)類型的一種或多種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線、加速圖形端口、以及使用各類總線體系結(jié)構(gòu)的處理器或局部總線。作為示例,這類體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線以及外圍部件互連(PCI)總線,也稱為Mezzanine總線。計(jì)算機(jī)302通常包括各種計(jì)算機(jī)可讀介質(zhì)。這類介質(zhì)可以是可由計(jì)算機(jī)302訪問(wèn)的任一可用介質(zhì),包括易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。系統(tǒng)存儲(chǔ)器306包括諸如隨機(jī)存取存儲(chǔ)器(RAM)310等易失性存儲(chǔ)器,和/或諸如只讀存儲(chǔ)器(ROM)312等非易失性存儲(chǔ)器形式的計(jì)算機(jī)可讀介質(zhì)。基本輸入/輸出系統(tǒng)(BIOS)314包括如在啟動(dòng)時(shí)幫助在計(jì)算機(jī)302內(nèi)的元件之間傳輸信息的基本例程,通常儲(chǔ)存在ROM312中。RAM310通常包含處理單元304立即可訪問(wèn)或者當(dāng)前正在操作的數(shù)據(jù)和/或程序模塊。計(jì)算機(jī)302也可包括其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。作為示例,圖8示出了對(duì)不可移動(dòng)、非易失性磁介質(zhì)(未示出)進(jìn)行讀寫的硬盤驅(qū)動(dòng)器316,對(duì)可移動(dòng)、非易失性磁盤320(如,"軟盤")進(jìn)行讀寫的磁盤驅(qū)動(dòng)器318以及對(duì)可移動(dòng)、非易失性光盤324,如CD-ROM、DVD-ROM或其它光介質(zhì)進(jìn)行讀寫的光盤驅(qū)動(dòng)器322。硬盤驅(qū)動(dòng)器316、磁盤驅(qū)動(dòng)器318和光盤驅(qū)動(dòng)器322的每一個(gè)通過(guò)一個(gè)或多個(gè)數(shù)據(jù)介質(zhì)接口326連接到系統(tǒng)總線308。或者,硬盤驅(qū)動(dòng)器316、磁盤驅(qū)動(dòng)器318和光盤驅(qū)動(dòng)器322可通過(guò)一個(gè)或多個(gè)接口(未示出)連接到系統(tǒng)總線308。盤驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)302提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的非易失性存儲(chǔ)。盡管示例示出了硬盤316、可移動(dòng)磁盤320和可移動(dòng)光盤324,然而可以理解,可儲(chǔ)存可由計(jì)算機(jī)訪問(wèn)的數(shù)據(jù)的其它類型的計(jì)算機(jī)可讀介質(zhì),如磁帶盒或其它磁存儲(chǔ)設(shè)備、閃存卡、CD-ROM、數(shù)字多功能盤(DVD)或其它光存儲(chǔ)、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)等,也可用于實(shí)現(xiàn)示例性計(jì)算系統(tǒng)和環(huán)境°任意數(shù)量的程序模塊可儲(chǔ)存在硬盤316、磁盤320、光盤324、ROM312和/或RAM310中,作為示例,包括操作系統(tǒng)326、一個(gè)或多個(gè)應(yīng)用程序328、其它程序模塊330以及程序數(shù)據(jù)332。這些操作系統(tǒng)326、一個(gè)或多個(gè)應(yīng)用程序328、其它程序模塊330和程序數(shù)據(jù)332(或其某一組合)中的每一個(gè)可實(shí)現(xiàn)支持分布式文件系統(tǒng)的常駐組件的全部或部分。用戶可以通過(guò)諸如鍵盤334和定點(diǎn)設(shè)備336(如,"鼠標(biāo)")等輸入設(shè)備向計(jì)算機(jī)302輸入命令和信息。其它輸入設(shè)備338(未具體示出)可包括麥克風(fēng)、操縱桿、游戲墊、圓盤式衛(wèi)星天線、串行端口、掃描儀和/或其類似物。這些和其它輸入設(shè)備通過(guò)耦合至系統(tǒng)總線308的輸入/輸出接口340連接到處理單元304,但也可以通過(guò)其它接口和總線結(jié)構(gòu)連接,如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器342或其它類型的顯示設(shè)備也通過(guò)接口,如視頻適配器344連接到系統(tǒng)總線30S。除監(jiān)視器342之外,其它輸出外圍設(shè)備可包括諸如揚(yáng)聲器(未示出)和打印機(jī)346等組件,它們可通過(guò)輸入/輸出接口340連接到計(jì)算機(jī)302。計(jì)算機(jī)302可以使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),如遠(yuǎn)程計(jì)算設(shè)備348的邏輯連接在網(wǎng)絡(luò)化環(huán)境中操作。作為示例,遠(yuǎn)程計(jì)算設(shè)備348可以是個(gè)人計(jì)算機(jī)、便攜式計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)計(jì)算機(jī)、對(duì)等設(shè)備或其它普通網(wǎng)絡(luò)節(jié)點(diǎn)等等。遠(yuǎn)程計(jì)算設(shè)備348被示為可包括此處相對(duì)于計(jì)算機(jī)302所描述的許多或所有元件和特征的便攜式計(jì)算機(jī)。計(jì)算機(jī)302和遠(yuǎn)程計(jì)算機(jī)348之間的邏輯連接被描述為局域網(wǎng)(LAN)350和一般的廣域網(wǎng)(WAN)352。這類網(wǎng)絡(luò)環(huán)境常見于辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)以及因特網(wǎng)。當(dāng)在LAN網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)時(shí),計(jì)算機(jī)302通過(guò)網(wǎng)絡(luò)接口或適配器354連接至局域網(wǎng)350。當(dāng)在WAN網(wǎng)絡(luò)環(huán)境中實(shí)現(xiàn)時(shí),計(jì)算機(jī)302通常包括調(diào)制解調(diào)器356或用于通過(guò)廣域網(wǎng)352建立通信的其它裝置。調(diào)制解調(diào)器356可以對(duì)計(jì)算機(jī)302是內(nèi)置或外置的,它可通過(guò)輸入/輸出接口340或其它適當(dāng)?shù)臋C(jī)制連接至系統(tǒng)總線308。可以理解,示出的網(wǎng)絡(luò)連接是示例性的,也可以使用在計(jì)算機(jī)302和348之間建立通信鏈路的其它裝置。在諸如用計(jì)算環(huán)境300示出的網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算機(jī)302描述的程序模塊或其部分可儲(chǔ)存在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。作為示例,遠(yuǎn)程應(yīng)用程序358駐留在遠(yuǎn)程計(jì)算機(jī)348的存儲(chǔ)器設(shè)備中。為說(shuō)明起見,應(yīng)用程序和諸如操作系統(tǒng)等其它可執(zhí)行程序組件在此處被示出為離散的框,盡管可以認(rèn)識(shí)到,這些程序和組件在不同的時(shí)刻駐留在計(jì)算設(shè)備302的不同存儲(chǔ)組件中,并由計(jì)算機(jī)的數(shù)據(jù)處理器執(zhí)行。各種模塊和技術(shù)在此可在諸如程序模塊等可由一個(gè)或多個(gè)計(jì)算機(jī)或其它設(shè)備執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述。一般而言,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。通常,程序模塊的功能可如各實(shí)施例中所需地組合或分布。這些模塊和技術(shù)的一種實(shí)現(xiàn)可被儲(chǔ)存在某一形式的計(jì)算機(jī)可讀介質(zhì)上或通過(guò)其來(lái)發(fā)送。計(jì)算機(jī)可讀介質(zhì)可以是可由計(jì)算機(jī)訪問(wèn)的任何可用介質(zhì)。作為示例而非局限,計(jì)算機(jī)可讀介質(zhì)包括"計(jì)算機(jī)存儲(chǔ)介質(zhì)"和"通信介質(zhì)"。"計(jì)算機(jī)存儲(chǔ)介質(zhì)"包括以用于儲(chǔ)存諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任一方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性,可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ)、磁盒、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可以用來(lái)儲(chǔ)存所期望的信息并可由計(jì)算機(jī)訪問(wèn)的任一其它介質(zhì)。"通信介質(zhì)"通常具體化為諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)。通信介質(zhì)還包括任一信息傳送介質(zhì)。術(shù)語(yǔ)"已調(diào)制數(shù)據(jù)信號(hào)"指以對(duì)信號(hào)中的信息進(jìn)行編碼的方式設(shè)置或改變其一個(gè)或多個(gè)特征的信號(hào)。作為示例而非局限,通信介質(zhì)包括有線介質(zhì),如有線網(wǎng)絡(luò)或直接連線連接,以及無(wú)線介質(zhì),如聲學(xué)、RF、紅外和其它無(wú)線介質(zhì)。上述任一的組合也應(yīng)當(dāng)包括在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。盡管以上描述使用了對(duì)結(jié)構(gòu)特征和/或方法動(dòng)作專用的語(yǔ)言,但可以理解,所附權(quán)利要求書中定義的本發(fā)明不限于所描述的具體特征或動(dòng)作。相反,公開了這些具體特征和動(dòng)作作為實(shí)現(xiàn)本發(fā)明的示例性形式。權(quán)利要求1.一個(gè)或多個(gè)其上儲(chǔ)存多個(gè)指令的計(jì)算機(jī)可讀介質(zhì),當(dāng)所述指令由一個(gè)或多個(gè)處理器執(zhí)行時(shí),使所述一個(gè)或多個(gè)處理器與命令代理程序協(xié)商在經(jīng)由用戶界面呈現(xiàn)命令時(shí)要使用的呈現(xiàn)模型;以及基于所協(xié)商的呈現(xiàn)模型獲得與所述命令相關(guān)聯(lián)的命令提供者。2.如權(quán)利要求1所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述指令還使所述一個(gè)或多個(gè)處理器響應(yīng)于所述命令隨后由用戶調(diào)用來(lái)與所述命令提供者交互。3.如權(quán)利要求l所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述指令還使所述一個(gè)或多個(gè)處理器令上下文信息對(duì)所述命令代理程序可用。4.如權(quán)利要求1所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,使所述一個(gè)或多個(gè)處理器協(xié)商呈現(xiàn)模型的所述指令還使所述一個(gè)或多個(gè)處理器從所述命令代理程序獲得所述命令代理程序支持的一個(gè)或多個(gè)呈現(xiàn)模型的列表;以及選擇所述命令代理程序支持的所述一個(gè)或多個(gè)呈現(xiàn)模型中的至少一個(gè)。5.如權(quán)利要求4所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,使所述一個(gè)或多個(gè)處理器協(xié)商呈現(xiàn)模型的所述指令還使所述一個(gè)或多個(gè)處理器向所述命令代理程序通知所選擇的呈現(xiàn)模型。6.如權(quán)利要求5所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,使所述一個(gè)或多個(gè)處理器向所述命令代理程序通知所選擇的呈現(xiàn)模型的所述指令還使所述一個(gè)或多個(gè)處理器調(diào)用由所述命令代理程序展示的GetProvider方法,并將所選擇的呈現(xiàn)模型作為所述GetProvider方法的參數(shù)包括在內(nèi)。7.如權(quán)利要求1所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)指令還使所述一個(gè)或多個(gè)處理器與多個(gè)其它命令代理程序協(xié)商在呈現(xiàn)與所述多個(gè)其它命令代理程序相關(guān)聯(lián)的多個(gè)其它命令時(shí)要使用的呈現(xiàn)模型;以及基于所協(xié)商的呈現(xiàn)模型獲得與所述多個(gè)其它命令相關(guān)聯(lián)的多個(gè)其它命令提供者的標(biāo)識(shí)符。8.如權(quán)利要求1所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)指令是支持所述命令代理程序不支持的一個(gè)或多個(gè)呈現(xiàn)模型的命令主機(jī)的一部分。9.如權(quán)利要求1所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,使所述一個(gè)或多個(gè)處理器與所述命令代理程序協(xié)商的所述指令還使所述一個(gè)或多個(gè)處理器訪問(wèn)由組件展示的模式枚舉;以及響應(yīng)于訪問(wèn)所述模式枚舉,接收所述命令代理程序?qū)λ雒钪С值亩鄠€(gè)不同呈現(xiàn)模型的列表。10.如權(quán)利要求1所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述指令還使所述一個(gè)或多個(gè)處理器通過(guò)以下步驟創(chuàng)建所述命令代理程序;標(biāo)識(shí)包括一個(gè)或多個(gè)形參的對(duì)象定義;對(duì)所述一個(gè)或多個(gè)形參中的每一非文字形參,基于所述形參遞歸地標(biāo)識(shí)一個(gè)或多個(gè)其它對(duì)象定義;以及創(chuàng)建由所標(biāo)識(shí)的對(duì)象定義所定義的對(duì)象作為所述命令代理程序。11.一個(gè)或多個(gè)其上儲(chǔ)存實(shí)現(xiàn)命令代理程序的多個(gè)指令的計(jì)算機(jī)可讀介質(zhì),所述多個(gè)指令在由一個(gè)或多個(gè)處理器執(zhí)行時(shí)使所述一個(gè)或多個(gè)處理器向請(qǐng)求者標(biāo)識(shí)所述命令代理程序支持的多個(gè)呈現(xiàn)模型,所述命令代理程序與一特定命令相關(guān)聯(lián);以及與所述請(qǐng)求者協(xié)商要使用所述多個(gè)呈現(xiàn)模型中的哪一個(gè)來(lái)經(jīng)由用戶界面呈現(xiàn)所述命令。12.如權(quán)利要求ll所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)指令還使所述一個(gè)或多個(gè)處理器基于所協(xié)商的呈現(xiàn)模型為所述命令創(chuàng)建命令提供者;以及向所述請(qǐng)求者通知所述命令提供者。13.如權(quán)利要求12所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,使所述一個(gè)或多個(gè)處理器創(chuàng)建所述命令提供者的所述指令包括使所述一個(gè)或多個(gè)處理器實(shí)例化所述命令提供者的指令。14.如權(quán)利要求ll所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)指令還使所述一個(gè)或多個(gè)處理器訪問(wèn)命令上下文;以及至少部分地基于所述命令上下文確定向所述請(qǐng)求者標(biāo)識(shí)所述命令代理程序支持的多個(gè)呈現(xiàn)模型中的哪一個(gè)。15.如權(quán)利要求ll所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,使所述一個(gè)或多個(gè)處理器協(xié)商要使用多個(gè)呈現(xiàn)模型中的哪一個(gè)來(lái)呈現(xiàn)命令的指令包括使所述一個(gè)或多個(gè)處理器從所述請(qǐng)求者接收所述多個(gè)呈現(xiàn)模型之一的標(biāo)識(shí)的指令。16.如權(quán)利要求ll所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述請(qǐng)求者包括命令主機(jī)。17.如權(quán)利要求ll所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)指令還使所述一個(gè)或多個(gè)處理器展示一模式枚舉;以及通過(guò)響應(yīng)于所述請(qǐng)求者調(diào)用所述模式枚舉,向所述請(qǐng)求者返回所述命令代理程序支持的多個(gè)呈現(xiàn)模型的列表,來(lái)標(biāo)識(shí)所述命令代理程序支持的多個(gè)呈現(xiàn)模型。18.—種系統(tǒng),包括命令主機(jī),用于提供可呈現(xiàn)多個(gè)用戶界面命令的工作空間;以及通信上耦合到所述命令主機(jī)的命令代理程序,用于為一命令標(biāo)識(shí)多個(gè)支持的模式,并且還用于與所述命令主機(jī)協(xié)商以確定要對(duì)所述命令使用多個(gè)支持的模式中的哪一個(gè)。19.如權(quán)利要求18所述的系統(tǒng),其特征在于,還包括通信上耦合到所述命令主機(jī)的多個(gè)其它命令代理程序,所述多個(gè)其它命令代理程序中的每一個(gè)用于為多個(gè)不同的命令中的一個(gè)標(biāo)識(shí)多個(gè)支持的模式,且所述多個(gè)其它命令代理程序中的每一個(gè)還用于與所述命令主機(jī)協(xié)商以確定要對(duì)該特定命令使用所述多個(gè)支持的模式中的哪一個(gè)。20.如權(quán)利要求18所述的系統(tǒng),其特征在于,還包括由所述命令代理程序基于要用于所述命令的所確定的模式創(chuàng)建的命令提供者,用于控制當(dāng)調(diào)用所述命令時(shí)要遵循的動(dòng)作。21.如權(quán)利要求18所述的系統(tǒng),其特征在于,還包括通信上耦合到所述命令代理程序的命令上下文,用于標(biāo)識(shí)關(guān)于所述命令代理程序所使用的系統(tǒng)的信息。22.—個(gè)或多個(gè)其上儲(chǔ)存描述組件的多個(gè)指令的計(jì)算機(jī)可讀介質(zhì),所述組件在被創(chuàng)建時(shí)用于展示一模式枚舉;以及響應(yīng)于請(qǐng)求者調(diào)用所述模式枚舉,向所述請(qǐng)求者返回所述組件對(duì)與所述組件相關(guān)聯(lián)的特定命令支持的一個(gè)或多個(gè)呈現(xiàn)模型的列表。23.如權(quán)利要求22所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件是通過(guò)被實(shí)例化來(lái)創(chuàng)建的。24.如權(quán)利要求22所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件在被創(chuàng)建時(shí)還具有標(biāo)識(shí)所述組件的身份屬性。25.如權(quán)利要求22所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件在被創(chuàng)建時(shí)還用于展示允許設(shè)置所述命令的命令上下文的第一屬性。26.如權(quán)利要求22所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件在被創(chuàng)建時(shí)還具有允許標(biāo)識(shí)所述特定命令所屬的一個(gè)或多個(gè)組的組屬性。27.如權(quán)利要求22所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件在被創(chuàng)建時(shí)還用于展示一組枚舉;以及響應(yīng)于所述請(qǐng)求者調(diào)用所述組枚舉,向所述請(qǐng)求者返回所述組件支持的一個(gè)或多個(gè)組的列表。28.如權(quán)利要求22所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件在被創(chuàng)建時(shí)還用于展示一獲得提供者屬性,所述獲得提供者屬性具有作為呈現(xiàn)模型的標(biāo)識(shí)符的參數(shù);以及響應(yīng)于所述請(qǐng)求者調(diào)用所述獲得提供者屬性,創(chuàng)建為所標(biāo)識(shí)的呈現(xiàn)模型實(shí)現(xiàn)所述特定命令的命令提供者組件。29.如權(quán)利要求28所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件用于通過(guò)實(shí)例化所述命令提供者組件來(lái)創(chuàng)建所述命令提供者組件。30.如權(quán)利要求22所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述組件在被創(chuàng)建時(shí)還具有只要所述特定命令的上下文改變就激發(fā)的命令上下文處理程序?qū)傩浴?1.—種方法,包括訪問(wèn)由組件展示的模式枚舉;以及響應(yīng)于訪問(wèn)所述模式枚舉,接收所述組件對(duì)與所述組件相關(guān)聯(lián)的特定命令支持的一個(gè)或多個(gè)呈現(xiàn)模型的列表。32.如權(quán)利要求31所述的方法,其特征在于,還包括訪問(wèn)所述組件的身份屬性以檢索所述組件的身份。33.如權(quán)利要求31所述的方法,其特征在于,還包括訪問(wèn)所述組件的允許設(shè)置所述組件的命令上下文的第一屬性。34.如權(quán)利要求31所述的方法,其特征在于,還包括訪問(wèn)所述組件的組枚舉;以及響應(yīng)于訪問(wèn)所述組枚舉,接收所述組件支持的一個(gè)或多個(gè)組的列表。35.如權(quán)利要求31所述的方法,其特征在于,還包括訪問(wèn)所述組件的獲得提供者屬性;將所述組件支持的一個(gè)或多個(gè)呈現(xiàn)模型之一的標(biāo)識(shí)符作為訪問(wèn)所述獲得提供者屬性時(shí)的參數(shù)包括在內(nèi);以及響應(yīng)于訪問(wèn)所述獲得提供者屬性,接收實(shí)現(xiàn)被標(biāo)識(shí)為所述參數(shù)的呈現(xiàn)模型的特定命令的命令提供者組件的標(biāo)識(shí)符。36.—個(gè)或多個(gè)其上儲(chǔ)存創(chuàng)建命令代理程序的多個(gè)指令的計(jì)算機(jī)可讀介質(zhì),所述多個(gè)指令在由一個(gè)或多個(gè)處理器執(zhí)行時(shí)使所述一個(gè)或多個(gè)處理器標(biāo)識(shí)包括一個(gè)或多個(gè)形參的對(duì)象定義;對(duì)所述一個(gè)或多個(gè)形參中的每一非文字形參,基于所述形參遞歸地標(biāo)識(shí)一個(gè)或多個(gè)其它對(duì)象定義;以及創(chuàng)建由所標(biāo)識(shí)的對(duì)象定義所定義的對(duì)象作為所述命令代理程序。37.如權(quán)利要求36所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)指令還使所述一個(gè)或多個(gè)處理器標(biāo)識(shí)與所述命令代理程序相關(guān)聯(lián)的頂層對(duì)象定義作為所述對(duì)象定義。38.如權(quán)利要求36所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,使所述一個(gè)或多個(gè)處理器創(chuàng)建由所標(biāo)識(shí)的對(duì)象定義所定義的對(duì)象的多個(gè)指令還使所述一個(gè)或多個(gè)處理器實(shí)例化由所標(biāo)識(shí)的對(duì)象定義所定義的對(duì)象。39.如權(quán)利要求36所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述多個(gè)指令還使所述一個(gè)或多個(gè)處理器標(biāo)識(shí)Windows⑧操作系統(tǒng)的注冊(cè)表中的對(duì)象定義。40.如權(quán)利要求36所述的一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì),其特征在于,所述對(duì)象定義包括儲(chǔ)存表示由第一對(duì)象定義所定義的對(duì)象的標(biāo)識(shí)符的數(shù)據(jù)的類型字段,以及儲(chǔ)存表示一個(gè)或多個(gè)其它對(duì)象定義的數(shù)據(jù)的形參字段。41.一種其上儲(chǔ)存有數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀介質(zhì),所述數(shù)據(jù)結(jié)構(gòu)包括第一對(duì)象定義,包括儲(chǔ)存表示由所述第一對(duì)象定義所定義的對(duì)象的標(biāo)識(shí)符的數(shù)據(jù)的類型字段,以及儲(chǔ)存表示一個(gè)或多個(gè)其它對(duì)象定義的數(shù)據(jù)的形參字段;以及由所述形參字段標(biāo)識(shí)的第二對(duì)象定義,其中在對(duì)所述第一對(duì)象定義的處理操作期間,檢査所述形參字段以標(biāo)識(shí)所述第二對(duì)象定義。42.如權(quán)利要求41所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述數(shù)據(jù)結(jié)構(gòu)包括定義命令代理程序的數(shù)據(jù)。43.如權(quán)利要求41所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述第一對(duì)象定義還包括儲(chǔ)存表示創(chuàng)建所述第一對(duì)象定義的命令主機(jī)的標(biāo)識(shí)符的數(shù)據(jù)的程序集字段。全文摘要一種通用用戶界面命令體系結(jié)構(gòu)的某些方面允許應(yīng)用程序主存命令以供在計(jì)算設(shè)備上呈現(xiàn)。命令可由與應(yīng)用程序相同的設(shè)計(jì)者或作者來(lái)編寫,或者可由其它方(例如,由第三方開發(fā)者)來(lái)編寫。該通用UI命令體系結(jié)構(gòu)的其它方面描述了可用于允許應(yīng)用程序主存命令的應(yīng)用程序編程接口(API)。該通用UI命令體系結(jié)構(gòu)的其它方面描述了應(yīng)用程序可用于激活注冊(cè)的命令的激活機(jī)制。文檔編號(hào)G06F9/44GK101421685SQ200480042691公開日2009年4月29日申請(qǐng)日期2004年7月22日優(yōu)先權(quán)日2004年5月3日發(fā)明者M(jìn)·M·米勒,P·A·莫里諾三世,Z·B·奧丁斯-盧卡斯申請(qǐng)人:微軟公司