Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / WIN_WINDOWS / lh_tools_devdiv_wpf / Windows / wcp / Speech / Src / Internal / ObjectToken / SAPICategories.cs / 1 / SAPICategories.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // Object Token // // History: // 7/1/2004 jeanfp //--------------------------------------------------------------------------- using Microsoft.Win32; using System; using System.Collections.Generic; using System.Globalization; using System.Speech.Internal.Synthesis; namespace System.Speech.Internal.ObjectTokens { ////// Summary description for SAPICategories. /// internal static class SAPICategories { //******************************************************************* // // Internal Methods // //******************************************************************* #region internal Methods static internal ObjectToken DefaultToken (string category) { Helpers.ThrowIfEmptyOrNull (category, "category"); ObjectToken token = null; #if !SPEECHSERVER // Try first to get the prefered token for the current user token = DefaultToken (@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\" + category, _defaultTokenIdValueName); #endif // IF failed try to get it for the local machine if (token == null) { token = DefaultToken (SpeechRegistryKey + category, _defaultTokenIdValueName); } return token; } ////// Retrieve the Multimedia device ID. If the entry 'DefaultTokenId' is defined in the registry /// under 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput' then a multimedia device is looked /// for with this token. Otherwise, picks the default WAVE_MAPPER is returned. /// ///static internal int DefaultDeviceOut () { int device = -1; using (ObjectTokenCategory tokenCategory = ObjectTokenCategory.Create (@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput")) { if (tokenCategory != null) { string deviceName; if (tokenCategory.TryGetString (_defaultTokenIdValueName, out deviceName)) { int pos = deviceName.IndexOf ('\\'); if (pos > 0 && pos < deviceName.Length) { using (RegistryDataKey deviceKey = RegistryDataKey.Create (deviceName.Substring (pos + 1), Registry.LocalMachine)) { if (deviceKey != null) { device = AudioDeviceOut.GetDevicedId (deviceKey.Name); } } } } } } return device; } //static internal ObjectToken DefaultDeviceIn () //{ // ObjectToken device = null; //try //{ // using (ObjectTokenCategory tokenCategory = new ObjectTokenCategory (@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput", false)) // { // string deviceName; // if (tokenCategory.TryGetString (_defaultTokenIdValueName, out deviceName)) // { // int pos = deviceName.LastIndexOf ('\\'); // if (pos > 0 && pos < deviceName.Length) // { // device = new ObjectToken (null, @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput\TokenEnums\MMAudioOut\" + deviceName.Substring (pos + 1), false); // } // } // } //} //catch (ObjectTokenException) //{ //} //return device; //} #endregion //******************************************************************** // // Internal Fields // //******************************************************************* #if SERVERTESTDLL || !SPEECHSERVER private const string SpeechRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\"; #else private const string SpeechRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Speech Server\2.0\Components\"; #endif #if SPEECHSERVER || PROMPT_ENGINE internal const string PromptVoices = SpeechRegistryKey + "PromptVoices"; internal const string CurrentUserVoices = SpeechRegistryKey + "Voices"; #else internal const string CurrentUserVoices = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\Voices"; #endif #region internal Fields internal const string Recognizers = SpeechRegistryKey + "Recognizers"; internal const string Voices = SpeechRegistryKey + "Voices"; internal const string AudioIn = SpeechRegistryKey + "AudioInput"; #endregion //******************************************************************** // // Private Methods // //******************************************************************** #region Private Methods static private ObjectToken DefaultToken (string category, string defaultTokenIdValueName) { ObjectToken token = GetPreference (category, defaultTokenIdValueName); if (token != null) { // Now do special check to see if we have another token from the same vendor with a // more recent version - if so use that. // First lets change the category to LOCAL_MACHINE using (ObjectTokenCategory tokenCategory = ObjectTokenCategory.Create (category)) { if (tokenCategory != null) { if (token != null) { foreach (ObjectToken tokenSeed in (IEnumerable ) tokenCategory) { token = GetHighestTokenVersion (token, tokenSeed, asVersionDefault); } } else { // If there wasn't a default, just pick one with the proper culture string [] sCultureId = new string [] { string.Format (CultureInfo.InvariantCulture, "{0:x}", CultureInfo.CurrentUICulture.LCID) }; foreach (ObjectToken tokenSeed in (IEnumerable ) tokenCategory) { if (tokenSeed.MatchesAttributes (sCultureId)) { token = tokenSeed; break; } } // Still nothing, picks the first one if (token == null) { foreach (ObjectToken tokenSeed in (IEnumerable ) tokenCategory) { token = tokenSeed; break; } } } } } } return token; } /// /// Try to get the prefered token for a category /// /// /// ///private static ObjectToken GetPreference (string category, string defaultLocation) { ObjectToken token = null; using (ObjectTokenCategory tokenCategory = ObjectTokenCategory.Create (category)) { if (tokenCategory != null) { string sToken; if (tokenCategory.TryGetString (defaultLocation, out sToken)) { token = tokenCategory.OpenToken (sToken); } } } return token; } /// /// Takes two tokens and compares them using version info. /// Note only tokens that match on Vendor, ProductLine, Language get compared, the pfDidCompare flag indicates this /// /// /// /// ///private static int CompareTokenVersions (ObjectToken token1, ObjectToken token2, out bool pfDidCompare) { pfDidCompare = false; RegistryDataKey attributes1 = null; RegistryDataKey attributes2 = null; attributes1 = token1.Attributes; attributes2 = token2.Attributes; // get vendor, version, language, product line for token 1 if (attributes1 != null) { string vendor1; string productLine1; string version1; string language1; attributes1.TryGetString ("Vendor", out vendor1); attributes1.TryGetString ("ProductLine", out productLine1); attributes1.TryGetString ("Version", out version1); attributes1.TryGetString ("Language", out language1); // get vendor, version, language, product line for token 2 if (attributes2 != null) { string vendor2; string productLine2; string version2; string language2; attributes2.TryGetString ("Vendor", out vendor2); attributes2.TryGetString ("ProductLine", out productLine2); attributes2.TryGetString ("Version", out version2); attributes2.TryGetString ("Language", out language2); if (((string.IsNullOrEmpty (vendor1) && string.IsNullOrEmpty (vendor2)) || (!string.IsNullOrEmpty (vendor1) && !string.IsNullOrEmpty (vendor2) && vendor1 == vendor2)) && ((string.IsNullOrEmpty (productLine1) && string.IsNullOrEmpty (productLine2)) || (!string.IsNullOrEmpty (productLine1) && !string.IsNullOrEmpty (productLine2) && productLine1 == productLine2)) && ((string.IsNullOrEmpty (language1) && string.IsNullOrEmpty (language2)) || (!string.IsNullOrEmpty (language1) && !string.IsNullOrEmpty (language2) && language1 == language2))) { pfDidCompare = true; return CompareVersions (version1, version2); } else { return -1; } } else { return 1; } } else { return -1; } } /// /// Takes two version number strings and compares them. /// If V1 or V2 invalid format then the valid string is returned as being greater. /// /// /// ///private static int CompareVersions (string sV1, string sV2) { ushort [] v1 = new ushort [4]; ushort [] v2 = new ushort [4]; bool fV1OK = ParseVersion (sV1, v1); bool fV2OK = ParseVersion (sV2, v2); if (!fV1OK && !fV2OK) { return 0; } else if (fV1OK && !fV2OK) { return 1; } else if (!fV1OK && fV2OK) { return -1; } else { for (int ul = 0; ul < 4; ul++) { if (v1 [ul] > v2 [ul]) { return 1; } else if (v1 [ul] < v2 [ul]) { return -1; } } } return 0; } /// /// Takes a version number string, checks it is valid, and fills the four /// values in the Version array. Valid version stings are "a[.b[.c[.d]]]", /// where a,b,c,d are +ve integers, 0 . 9999. If b,c,d are missing those /// version values are set as zero. /// /// /// ///private static bool ParseVersion (string s, ushort [] Version) { bool fIsValid = true; Version [0] = Version [1] = Version [2] = Version [3] = 0; if (string.IsNullOrEmpty (s)) { fIsValid = false; } else { int iPosPrev = 0; for (int i = 0; i < 4 && iPosPrev < s.Length; i++) { int iPosDot = s.IndexOf ('.', iPosPrev); // read +ve integer string sInteger = s.Substring (iPosPrev, iPosDot); ushort val; if (!ushort.TryParse (sInteger, out val) || val > 9999) { fIsValid = false; break; } Version [i] = val; iPosPrev = iPosDot + 1; } if (fIsValid && iPosPrev != s.Length) { fIsValid = false; } } return fIsValid; } private static ObjectToken GetHighestTokenVersion (ObjectToken token, ObjectToken tokenSeed, string [] criterias) { // if override and higher version - new preferred. bool fOverride = tokenSeed.MatchesAttributes (criterias); if (fOverride) { bool fDidCompare; int lRes = CompareTokenVersions (tokenSeed, token, out fDidCompare); if (fDidCompare && lRes > 0) { token = tokenSeed; } } return token; } #endregion //******************************************************************* // // Private Fields // //******************************************************************** #region private Fields private const string _defaultTokenIdValueName = "DefaultTokenId"; //private const string g_szDefaultDefaultTokenIdValueName = "DefaultDefaultTokenId"; private static readonly string [] asVersionDefault = new string [] { "VersionDefault" }; #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // // Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: // Object Token // // History: // 7/1/2004 jeanfp //--------------------------------------------------------------------------- using Microsoft.Win32; using System; using System.Collections.Generic; using System.Globalization; using System.Speech.Internal.Synthesis; namespace System.Speech.Internal.ObjectTokens { ////// Summary description for SAPICategories. /// internal static class SAPICategories { //******************************************************************* // // Internal Methods // //******************************************************************* #region internal Methods static internal ObjectToken DefaultToken (string category) { Helpers.ThrowIfEmptyOrNull (category, "category"); ObjectToken token = null; #if !SPEECHSERVER // Try first to get the prefered token for the current user token = DefaultToken (@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\" + category, _defaultTokenIdValueName); #endif // IF failed try to get it for the local machine if (token == null) { token = DefaultToken (SpeechRegistryKey + category, _defaultTokenIdValueName); } return token; } ////// Retrieve the Multimedia device ID. If the entry 'DefaultTokenId' is defined in the registry /// under 'HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput' then a multimedia device is looked /// for with this token. Otherwise, picks the default WAVE_MAPPER is returned. /// ///static internal int DefaultDeviceOut () { int device = -1; using (ObjectTokenCategory tokenCategory = ObjectTokenCategory.Create (@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput")) { if (tokenCategory != null) { string deviceName; if (tokenCategory.TryGetString (_defaultTokenIdValueName, out deviceName)) { int pos = deviceName.IndexOf ('\\'); if (pos > 0 && pos < deviceName.Length) { using (RegistryDataKey deviceKey = RegistryDataKey.Create (deviceName.Substring (pos + 1), Registry.LocalMachine)) { if (deviceKey != null) { device = AudioDeviceOut.GetDevicedId (deviceKey.Name); } } } } } } return device; } //static internal ObjectToken DefaultDeviceIn () //{ // ObjectToken device = null; //try //{ // using (ObjectTokenCategory tokenCategory = new ObjectTokenCategory (@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput", false)) // { // string deviceName; // if (tokenCategory.TryGetString (_defaultTokenIdValueName, out deviceName)) // { // int pos = deviceName.LastIndexOf ('\\'); // if (pos > 0 && pos < deviceName.Length) // { // device = new ObjectToken (null, @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\AudioOutput\TokenEnums\MMAudioOut\" + deviceName.Substring (pos + 1), false); // } // } // } //} //catch (ObjectTokenException) //{ //} //return device; //} #endregion //******************************************************************** // // Internal Fields // //******************************************************************* #if SERVERTESTDLL || !SPEECHSERVER private const string SpeechRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\"; #else private const string SpeechRegistryKey = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Speech Server\2.0\Components\"; #endif #if SPEECHSERVER || PROMPT_ENGINE internal const string PromptVoices = SpeechRegistryKey + "PromptVoices"; internal const string CurrentUserVoices = SpeechRegistryKey + "Voices"; #else internal const string CurrentUserVoices = @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\Voices"; #endif #region internal Fields internal const string Recognizers = SpeechRegistryKey + "Recognizers"; internal const string Voices = SpeechRegistryKey + "Voices"; internal const string AudioIn = SpeechRegistryKey + "AudioInput"; #endregion //******************************************************************** // // Private Methods // //******************************************************************** #region Private Methods static private ObjectToken DefaultToken (string category, string defaultTokenIdValueName) { ObjectToken token = GetPreference (category, defaultTokenIdValueName); if (token != null) { // Now do special check to see if we have another token from the same vendor with a // more recent version - if so use that. // First lets change the category to LOCAL_MACHINE using (ObjectTokenCategory tokenCategory = ObjectTokenCategory.Create (category)) { if (tokenCategory != null) { if (token != null) { foreach (ObjectToken tokenSeed in (IEnumerable ) tokenCategory) { token = GetHighestTokenVersion (token, tokenSeed, asVersionDefault); } } else { // If there wasn't a default, just pick one with the proper culture string [] sCultureId = new string [] { string.Format (CultureInfo.InvariantCulture, "{0:x}", CultureInfo.CurrentUICulture.LCID) }; foreach (ObjectToken tokenSeed in (IEnumerable ) tokenCategory) { if (tokenSeed.MatchesAttributes (sCultureId)) { token = tokenSeed; break; } } // Still nothing, picks the first one if (token == null) { foreach (ObjectToken tokenSeed in (IEnumerable ) tokenCategory) { token = tokenSeed; break; } } } } } } return token; } /// /// Try to get the prefered token for a category /// /// /// ///private static ObjectToken GetPreference (string category, string defaultLocation) { ObjectToken token = null; using (ObjectTokenCategory tokenCategory = ObjectTokenCategory.Create (category)) { if (tokenCategory != null) { string sToken; if (tokenCategory.TryGetString (defaultLocation, out sToken)) { token = tokenCategory.OpenToken (sToken); } } } return token; } /// /// Takes two tokens and compares them using version info. /// Note only tokens that match on Vendor, ProductLine, Language get compared, the pfDidCompare flag indicates this /// /// /// /// ///private static int CompareTokenVersions (ObjectToken token1, ObjectToken token2, out bool pfDidCompare) { pfDidCompare = false; RegistryDataKey attributes1 = null; RegistryDataKey attributes2 = null; attributes1 = token1.Attributes; attributes2 = token2.Attributes; // get vendor, version, language, product line for token 1 if (attributes1 != null) { string vendor1; string productLine1; string version1; string language1; attributes1.TryGetString ("Vendor", out vendor1); attributes1.TryGetString ("ProductLine", out productLine1); attributes1.TryGetString ("Version", out version1); attributes1.TryGetString ("Language", out language1); // get vendor, version, language, product line for token 2 if (attributes2 != null) { string vendor2; string productLine2; string version2; string language2; attributes2.TryGetString ("Vendor", out vendor2); attributes2.TryGetString ("ProductLine", out productLine2); attributes2.TryGetString ("Version", out version2); attributes2.TryGetString ("Language", out language2); if (((string.IsNullOrEmpty (vendor1) && string.IsNullOrEmpty (vendor2)) || (!string.IsNullOrEmpty (vendor1) && !string.IsNullOrEmpty (vendor2) && vendor1 == vendor2)) && ((string.IsNullOrEmpty (productLine1) && string.IsNullOrEmpty (productLine2)) || (!string.IsNullOrEmpty (productLine1) && !string.IsNullOrEmpty (productLine2) && productLine1 == productLine2)) && ((string.IsNullOrEmpty (language1) && string.IsNullOrEmpty (language2)) || (!string.IsNullOrEmpty (language1) && !string.IsNullOrEmpty (language2) && language1 == language2))) { pfDidCompare = true; return CompareVersions (version1, version2); } else { return -1; } } else { return 1; } } else { return -1; } } /// /// Takes two version number strings and compares them. /// If V1 or V2 invalid format then the valid string is returned as being greater. /// /// /// ///private static int CompareVersions (string sV1, string sV2) { ushort [] v1 = new ushort [4]; ushort [] v2 = new ushort [4]; bool fV1OK = ParseVersion (sV1, v1); bool fV2OK = ParseVersion (sV2, v2); if (!fV1OK && !fV2OK) { return 0; } else if (fV1OK && !fV2OK) { return 1; } else if (!fV1OK && fV2OK) { return -1; } else { for (int ul = 0; ul < 4; ul++) { if (v1 [ul] > v2 [ul]) { return 1; } else if (v1 [ul] < v2 [ul]) { return -1; } } } return 0; } /// /// Takes a version number string, checks it is valid, and fills the four /// values in the Version array. Valid version stings are "a[.b[.c[.d]]]", /// where a,b,c,d are +ve integers, 0 . 9999. If b,c,d are missing those /// version values are set as zero. /// /// /// ///private static bool ParseVersion (string s, ushort [] Version) { bool fIsValid = true; Version [0] = Version [1] = Version [2] = Version [3] = 0; if (string.IsNullOrEmpty (s)) { fIsValid = false; } else { int iPosPrev = 0; for (int i = 0; i < 4 && iPosPrev < s.Length; i++) { int iPosDot = s.IndexOf ('.', iPosPrev); // read +ve integer string sInteger = s.Substring (iPosPrev, iPosDot); ushort val; if (!ushort.TryParse (sInteger, out val) || val > 9999) { fIsValid = false; break; } Version [i] = val; iPosPrev = iPosDot + 1; } if (fIsValid && iPosPrev != s.Length) { fIsValid = false; } } return fIsValid; } private static ObjectToken GetHighestTokenVersion (ObjectToken token, ObjectToken tokenSeed, string [] criterias) { // if override and higher version - new preferred. bool fOverride = tokenSeed.MatchesAttributes (criterias); if (fOverride) { bool fDidCompare; int lRes = CompareTokenVersions (tokenSeed, token, out fDidCompare); if (fDidCompare && lRes > 0) { token = tokenSeed; } } return token; } #endregion //******************************************************************* // // Private Fields // //******************************************************************** #region private Fields private const string _defaultTokenIdValueName = "DefaultTokenId"; //private const string g_szDefaultDefaultTokenIdValueName = "DefaultDefaultTokenId"; private static readonly string [] asVersionDefault = new string [] { "VersionDefault" }; #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UserControl.cs
- LogLogRecordHeader.cs
- DynamicAttribute.cs
- TypefaceMetricsCache.cs
- CharacterMetricsDictionary.cs
- CollaborationHelperFunctions.cs
- EntityDataSourceWrapper.cs
- InvokeHandlers.cs
- AnnotationResourceChangedEventArgs.cs
- Helper.cs
- MdiWindowListItemConverter.cs
- Propagator.JoinPropagator.cs
- DataListItemEventArgs.cs
- OdbcParameter.cs
- ButtonPopupAdapter.cs
- CustomAttribute.cs
- MemoryMappedFileSecurity.cs
- SettingsPropertyValueCollection.cs
- TextEncodedRawTextWriter.cs
- EdmConstants.cs
- DbProviderFactory.cs
- RuleRefElement.cs
- BindingValueChangedEventArgs.cs
- XmlAnyAttributeAttribute.cs
- XPathException.cs
- StickyNote.cs
- ComEventsHelper.cs
- LambdaCompiler.Address.cs
- WsatServiceAddress.cs
- TextEffect.cs
- AssemblyFilter.cs
- BinaryConverter.cs
- HwndKeyboardInputProvider.cs
- Debugger.cs
- LogicalExpr.cs
- WebResourceAttribute.cs
- ContentType.cs
- NavigatingCancelEventArgs.cs
- Frame.cs
- OracleTimeSpan.cs
- MenuCommandsChangedEventArgs.cs
- PropertyOverridesDialog.cs
- FamilyTypeface.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- CorrelationManager.cs
- __FastResourceComparer.cs
- AppDomainEvidenceFactory.cs
- IDQuery.cs
- ClientBuildManagerTypeDescriptionProviderBridge.cs
- DocumentXmlWriter.cs
- WorkflowApplicationEventArgs.cs
- DesignerCategoryAttribute.cs
- MemberInfoSerializationHolder.cs
- SchemaImporterExtensionElement.cs
- TextBoxView.cs
- TypeHelper.cs
- X509ThumbprintKeyIdentifierClause.cs
- UpdateTranslator.cs
- OrderedDictionaryStateHelper.cs
- UriSection.cs
- DoubleLink.cs
- InstrumentationTracker.cs
- DoubleConverter.cs
- CommentEmitter.cs
- ScrollProperties.cs
- WebPartConnectionsConnectVerb.cs
- StrokeNodeData.cs
- TraceHwndHost.cs
- InertiaRotationBehavior.cs
- SQLByte.cs
- IriParsingElement.cs
- CodeAttributeArgument.cs
- QueryPageSettingsEventArgs.cs
- InteropBitmapSource.cs
- XmlBinaryReader.cs
- Transform3DGroup.cs
- XamlValidatingReader.cs
- PkcsUtils.cs
- DependencyPropertyConverter.cs
- DecoderFallbackWithFailureFlag.cs
- Region.cs
- TextServicesDisplayAttribute.cs
- Calendar.cs
- ToolStripItemGlyph.cs
- ColorMap.cs
- CultureMapper.cs
- EntitySetBaseCollection.cs
- FormViewRow.cs
- ExpressionStringBuilder.cs
- SelectionItemProviderWrapper.cs
- SoapRpcMethodAttribute.cs
- Attributes.cs
- ItemContainerProviderWrapper.cs
- RoleManagerModule.cs
- DbXmlEnabledProviderManifest.cs
- UnsafeNativeMethods.cs
- OracleCommandBuilder.cs
- SourceFileInfo.cs
- BitmapVisualManager.cs
- ObjectStateManagerMetadata.cs