2008-11-07 3 views
3

Некоторые программы читают название компании, которое вы ввели при установке Windows и отобразили ее в программе. Как это делается? Они просто читают имя из реестра?Как читать «название компании» из Windows с помощью C#?

+0

System.Environment.CompanyName было бы круто. – 2008-11-07 16:07:36

ответ

1

Проверьте API SystemParametersInfo и константой с именем SPI_GETOEMINFO

int details = SystemParametersInfo(SPI_GETOEMINFO, OEMInfo.Capacity, OEMInfo, 0); 
     if (details != 0) 
     { 
      MessageBox.Show(OEMInfo.ToString()); 
     } 

Это возвратит CompanyName для OEM. Я не думаю, что вы должны ввести название компании при установке окон, только имя компьютера (я могу ошибаться)

Вы можете увидеть все константы и примеры здесь:
http://pinvoke.net/default.aspx/Enums.SystemMetric

+0

Я предполагаю, что вы вызываете SystemParametersInfo из user32.dll. Откуда вы получаете константы? – epotter 2009-07-16 21:12:19

+1

@epotter: http://pinvoke.net/default.aspx/Enums.SystemMetric – Stefan 2009-07-21 11:43:25

11

Если вы хотите зарегистрированную компанию имя, введенное в реестре, вы можете получить его от:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization 

Использование класса реестра вы можете сделать что-то вдоль этих линий:

string org = (string)Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion", "RegisteredOrganization", ""); 
3

для Windows хранит зарегистрированное название фирмы в реестре по адресу:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization 

Импорт следующее:

using Microsoft.Win32; 

Считать значение ключа реестра требуется, например, так:

RegistryKey hklm = Registry.LocalMachine; 
hklm = hklm.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); 
Object obp = hklm.GetValue("RegisteredOrganization");` 
Console.WriteLine("RegisteredOrganization :{0}",obp);` 

Или один вкладыш, как предложено Xiaofu.

Однако правильный способ заключается в использовании двойной обратной косой черты. Это связано с тем, что обратная косая черта является символом escape-функции C#, то есть вы можете вставить символ новой строки, используя \ n или tab, используя \ t, чтобы позволить C# знать, что мы хотим иметь простой обратный слэш, а не некоторый экранированный символ, мы должны использовать два обратных слэша (\) или использовать @ перед строкой, как (@ «\ SomeString»):

string org = (string)Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\\Software\\Microsoft\\Windows NT\\CurrentVersion", "RegisteredOrganization", ""); 

Примечание: ключ RegisteredOrganization не гарантируется содержать значение, так как он может не иметь были заполнены во время установки ОС. Поэтому всегда используйте блок try/catch или проверяйте возвращаемое значение.

0

Я не мог найти метод или свойство в .NET, который получает вам информацию, но я нашел TechNote, который говорит, какой ключ реестра содержит информацию:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\RegisteredOrganization 

http://support.microsoft.com/kb/310441

4

Вы можете прочитайте это Используя WMI, он выглядит так, как будто вы после класса Win32_OperatingSystem, а элемент Organization этого класса содержит название компании.

Приведенный ниже код представляет собой консольное приложение с зарегистрированным пользователем и организацией. Чтобы запустить его, вам нужно добавить ссылку на System.Management.dll в проект.Там должна быть только один объект управления, поэтому Еогеасп, вероятно, излишний, не совсем уверен, что лучшая практика, которая была бы:

using System; 
using System.Management; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ManagementClass c = new ManagementClass("Win32_OperatingSystem"); 

      foreach (ManagementObject o in c.GetInstances()) 
      { 
       Console.WriteLine("Registered User: {0}, Organization: {1}", o["RegisteredUser"], o["Organization"]); 
      } 
      Console.WriteLine("Finis!"); 
      Console.ReadKey(); 
     } 
    } 
} 
-1

мне не нравится иметь текстовый у вызовы реестра в моей бизнес-коде, и Я не поклонник классов утилиты, поэтому я написал метод расширения, который получает название компании из реестра.

using Microsoft.Win32; 

namespace Extensions 
{ 
    public static class MyExtensions 
    { 
     public static string CompanyName(this RegistryKey key) 
     { 
      // this string goes in my resources file usually 
      return (string)key.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion").GetValue("RegisteredOrganization"); 
     } 
    } 
} 

Тогда я могу легко получить это значение:

RegistryKey key = Registry.LocalMachine; 
return key.CompanyName(); 

Ничего особенного, просто похорошел способ борьбы с часто извлекаемыми значениями реестра.

Смежные вопросы