2013-06-18 16 views
10

Sto creando un programma che registra l'attività dell'utente, e vorrei poter ottenere un ID Teamviewer e inviarlo a un registro, so come inviare le informazioni al registro assegnando tali informazioni a una variabile , tuttavia non sono sicuro di come passare un ID Teamviewer a detta variabile e vorrei ricevere aiuto su questo.C'è un modo per trovare un ID Teamviewer in C#?

ne e tutto l'aiuto sarebbe apprezzato :)

+0

Apparentemente questi sono obsoleti ma un buon punto di partenza, 'VBSCRIPT' - http://www.sole.dk/vbscript-to-show-current-teamviewer-id-and-save-to-text-file/ 'C#' - http://hintdesk.com/how-to-get-id-and-pass-ofteamviewer-programatically/ – CodeCamper

+0

Grazie per la risposta rapida, tuttavia ho visto questi collegamenti mentre facevo ricerche su questo problema, sono un principiante in C# e speravo in una spiegazione più chiara –

risposta

8

Per TeamViewer 8 in Windows 8 l'ID TeamViewer è memorizzato in HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ TeamViewer \ Version8 \ ClientID

Da qui in poi è semplicemente una questione di leggere quella chiave di registro in C# e poi fare quello che vuoi con esso, se necessario, ti fornirò il codice per la lettura del registro :) Ma lo http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C lo spiega già molto bene! Buona fortuna!

+1

Questo è assolutamente geniale! Risposta fantastica grazie mille: D –

+1

Siete i benvenuti :) – Maritim

10

Questo è quello che sto usando.

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; 
    } 
+0

Anche questo ha funzionato bene = D grazie! –

+1

Le chiavi di registro sono usa e getta quindi dovrebbero essere all'interno di una dichiarazione using – NiKiZe

8

La versione 10 ha una posizione leggermente diversa nel Registro di sistema.

Il seguente codice funziona con ver. 10 e anche versioni precedenti. Ci vuole anche differenze tra 32 bit e 64 bit OS in considerazione:

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; 
    } 
} 
+1

Le chiavi di registro sono usa e getta quindi dovrebbero essere all'interno di una dichiarazione using – NiKiZe

+0

Penso che il mio metodo non perde. Ma in generale, sì, gli oggetti idisposabili devono essere gestiti correttamente. –

1

La soluzione accettata potrebbe essere corretto in alcuni casi, tuttavia il ClientID può essere situato in altre posizioni nel Registro di sistema.

  1. Dipende dal fatto che si stia utilizzando un sistema operativo a 64 bit. Su sistemi operativi a 64 bit è necessario includere \ Wow6432 \.
  2. A volte la posizione del registro termina con una versione (ad esempio \ Versione9), ma ho visto casi in cui non lo è.

posizioni possibili:

  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ TeamViewer \ Version [versione]
  • HKEY_LOCAL_MACHINE \ SOFTWARE Wow6432Node \ TeamViewer
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ TeamViewer \ Version [versione] \
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ TeamViewer \ Version
0
public static string TvId() 
{ 
    return Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\TeamViewer\\Version6", "ClientID", "FAILED").ToString(); 
} 
+0

Questa risposta potrebbe essere più concisa, ma fallirà in così tanti casi, non è una buona soluzione. Vedi la risposta di Igor Gorjanc o Devsoft per esempio. – jv42

+0

Bene, è breve e lascia al programmatore la responsabilità del percorso della versione corretta. – ateacv

+0

Abbastanza corretto, per alcuni casi d'uso specifici, potrebbe comunque essere utile. – jv42

Problemi correlati