[Microsoft代理程式從 Windows 7 開始已被取代,而且可能無法在後續版本的 Windows 中使用。]
Microsoft Agent 伺服器會維護使用者目前可用的命令清單。 此清單包含伺服器為一般互動定義的命令,例如隱藏和Microsoft Agent 屬性、可用用戶端清單(但非輸入-主動)客戶端的清單,以及目前使用中用戶端所定義的命令。 前兩組命令是全域命令;也就是說,無論輸入主動客戶端為何,隨時都可以使用它們。 用戶端定義的命令只有在該客戶端為輸入作用中時才能使用。
藉由查詢 IAgentCommands 的 IAgentCharacter介面,擷取 IAgentCommands 介面。 每個Microsoft Agent 用戶端應用程式都可以定義稱為 Commands 集合的命令集合。 若要將 Command 新增至集合,請使用 Add 或 Insert 方法。 雖然您可以使用 IAgentCommand 方法來指定 Command 的 屬性, 為了獲得最佳程式碼效能,請在初始設定新 Command屬性時,指定 IAgentCommands::Add 或 IAgentCommands::Insert 方法的所有属性。 您可以使用 IAgentCommand 方法來查詢或變更屬性設定。
針對 Commands 集合中每個 命令,您可以判斷命令是否出現在字元的彈出視窗、語音命令視窗、兩者或兩者都沒有。 例如,如果您想要命令出現在字元的快捷功能表上,請設定命令的 Caption,並 Visible 屬性。 若要在 Voice Commands Window中顯示命令,請設定命令的 Caption 和 Voice 屬性。
使用者只能在用戶端應用程式為輸入作用中且字元可見時,才能存取 Commands 集合中的個別命令。 因此,您通常會想要設定 Caption、VoiceCaption,以及 Voice 属性,Commands 集合物件以及集合中的命令,因為這會將您 Commands 集合的專案放在字元的彈出視窗和語音命令視窗中。 當使用者選擇其 Commands 專案來切換至用戶端時,伺服器會自動讓您的用戶端輸入使用中,使用 IAgentNotifySink::ActivateInputState,並在其集合中 命令。 伺服器也會通知用戶端不再使用 IAgentNotifySink::ActivateInputState 事件。 這可讓伺服器只呈現並接受套用至目前輸入作用中用戶端內容的 命令。 它也有助於避免客戶端之間 命令-name 衝突。
用戶端也可以明確要求使用 IAgentCharacter::Activate方法輸入-主動用戶端。 此方法也支援將應用程式設定為不是輸入-主動用戶端。 在與另一個應用程式共用字元時,您可能會想要使用此方法,在應用程式視窗取得焦點時,將應用程式設定為輸入-主動,而不會在失去焦點時輸入主動。
同樣地,您可以使用 IAgentCharacter::Activate,將應用程式設定為字元的使用中用戶端。 使用中用戶端是當其字元為最上層字元時,接收輸入的用戶端。 當此狀態變更時,伺服器會向應用程式通知應用程式 IAgentNotifySinkEx::ActiveClientChange 事件。
當顯示字元的快捷功能表時,變更 Commands 集合的屬性,或在其集合中的命令不會顯示,直到使用者重新顯示功能表為止。 不過,開啟時,語音命令視窗會在發生變更時顯示變更。
IAgentCommands 會定義介面,讓應用程式能夠新增、移除、設定及查詢 命令 集合的屬性。 這些函式也可從 IAgentCommandsEx取得。
命令 集合可以同時以命令的形式出現在快捷功能表和字元的 [語音命令視窗] 中。 若要讓 命令 集合出現,您必須設定其 Caption 屬性。 下表摘要說明 Commands 集合的屬性如何影響其呈現方式。
| Caption 屬性 | Voice-Caption 屬性 | Voice 屬性 | Visible 屬性 | 出現在字元的快捷功能表中 | 出現在語音命令視窗中 |
|---|---|---|---|---|---|
| 是的 | 是的 | 是的 | 真 | 是,使用 Caption | 是,使用 VoiceCaption |
| 是的 | 是的 | 否 2012 | 真 | 是,使用 Caption | 不 |
| 是的 | 是的 | 是的 | 假 | 不 | 是,使用 VoiceCaption |
| 是的 | 是的 | 否 2012 | 假 | 不 | 不 |
| 否 2012 | 是的 | 是的 | 真 | 不 | 是,使用 VoiceCaption |
| 否 2012 | 是的 | 是的 | 假 | 不 | 是,使用 VoiceCaption |
| 否 2012 | 是的 | 否 2012 | 真 | 不 | 不 |
| 否 2012 | 是的 | 否 2012 | 假 | 不 | 不 |
| 是的 | 否 2012 | 是的 | 真 | 是,使用 Caption | 是,使用 Caption |
| 是的 | 否 2012 | 否 2012 | 真 | 是的 | 不 |
| 是的 | 否 2012 | 是的 | 假 | 不 | 是,使用 Caption |
| 是的 | 否 2012 | 否 2012 | 假 | 不 | 不 |
| 否 2012 | 否 2012 | 是的 | 真 | 不 | 否 2012 |
| 否 2012 | 否 2012 | 是的 | 假 | 不 | 否 2012 |
| 否 2012 | 否 2012 | 否 2012 | 真 | 不 | 不 |
| 否 2012 | 否 2012 | 否 2012 | 假 | 不 | 不 |
2 如果屬性設定為 null。 在某些程式設計語言中,空字串可能無法解譯為與 Null 字串相同。
超音命令仍可供語音存取。
以 Vtable 順序 方法
| IAgentCommands 方法 | 描述 |
|---|---|
| GetCommand | 從 Commands 集合擷取 Command 物件。 |
| GetCount | 傳回 Commands 集合中 Commands 數目的值。 |
| SetCaption | 設定 Commands 集合 Caption 屬性的值。 |
| GetCaption | 傳回 Commands 集合的 Caption 屬性值。 |
| SetVoice | 設定 Commands 集合的 Voice 屬性值。 |
| GetVoice | 傳回 Commands 集合的 Voice 屬性值。 |
| SetVisible | 設定 Commands 集合的 Visible 屬性值。 |
| GetVisible | 傳回 Commands 集合的 Visible 屬性值。 |
| 新增 | 將 Command 物件新增至 Commands 集合。 |
| 插入 | 在 Commands 集合中插入 Command 物件。 |
| 移除 | 拿掉 Commands 集合中的 Command 物件。 |
| RemoveAll | 從 Commands 集合中移除所有 Command 物件。 |