Есть ли способ найти идентификатор Teamviewer в С#?

Я делаю программу, которая регистрирует активность пользователя, и я хочу получить идентификатор Teamviewer и отправить его в журнал, я знаю, как отправить информацию в журнал, назначив эту информацию переменная, однако я не уверен, как передать идентификатор Teamviewer указанной переменной и хотел бы помочь в этом.

Любая помощь будет оценена:)

Ответ 1

Для TeamViewer 8 в Windows 8 идентификатор TeamViewer хранится в HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version8\ClientID

Отныне это просто вопрос чтения этого раздела реестра на С#, а затем делать все, что вы хотите с ним, при необходимости я буду предоставлять код для чтения реестра:) Но http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C объясняет это действительно хорошо уже! Удачи!

Ответ 2

Это то, что я использую.

    public static string GetTeamviewerID()
    {
        var versions = new[] {"4", "5", "5.1", "6", "7", "8"}.Reverse().ToList(); //Reverse to get ClientID of newer version if possible

        foreach (var path in new[]{"SOFTWARE\\TeamViewer","SOFTWARE\\Wow6432Node\\TeamViewer"})
        {
            if (Registry.LocalMachine.OpenSubKey(path) != null)
            {
                foreach (var version in versions)
                {
                    var subKey = string.Format("{0}\\Version{1}", path, version);
                    if (Registry.LocalMachine.OpenSubKey(subKey) != null)
                    {
                        var clientID = Registry.LocalMachine.OpenSubKey(subKey).GetValue("ClientID");
                        if (clientID != null) //found it?
                        {
                            return Convert.ToInt32(clientID).ToString();
                        }
                    }
                }
            }
        }
        //Not found, return an empty string
        return string.Empty;
    }

Ответ 3

Версия 10 имеет немного другую позицию в реестре.

Следующий код работает с ver. 10, а также более старые версии. Он также учитывает различия между 32-битной и 64-разрядной ОС:

long GetTeamViewerId()
{
    try
    {
        string regPath = Environment.Is64BitOperatingSystem ? @"SOFTWARE\Wow6432Node\TeamViewer" : @"SOFTWARE\TeamViewer";
        RegistryKey key = Registry.LocalMachine.OpenSubKey(regPath);
        if (key == null)
            return 0;
        object clientId = key.GetValue("ClientID");
        if (clientId != null) //ver. 10
            return Convert.ToInt64(clientId);
        foreach (string subKeyName in key.GetSubKeyNames().Reverse()) //older versions
        {
            clientId = key.OpenSubKey(subKeyName).GetValue("ClientID");
            if (clientId != null)
                return Convert.ToInt64(clientId);
        }
        return 0;
    }
    catch (Exception e)
    {
        return 0;
    }
}

Ответ 4

Принятое решение может быть правильным в некоторых случаях, однако ClientID может находиться в других местах в реестре.

  • Это зависит от того, используете ли вы 64-разрядную ОС. В 64-разрядной ОС вам необходимо включить \Wow6432 \.
  • Иногда местоположение реестра заканчивается версией (например,\Version9), но я видел случаи, когда это не так.

Возможные местоположения:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version [версия]
  • HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\TeamViewer
  • HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer\Version [версия]
  • HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer\Version

Ответ 5

public static string TvId()
{
    return Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\TeamViewer\\Version6", "ClientID", "FAILED").ToString();
}