2013-06-18 36 views
10

Robię program, który rejestruje aktywność użytkownika i chciałbym móc uzyskać identyfikator Teamviewer i wysłać go do dziennika, wiem, jak wysłać informacje do dziennika, przypisując tę ​​informację do zmiennej jednak nie jestem pewien, jak przekazać identyfikator teamviewera do wspomnianej zmiennej i chciałbym uzyskać pomoc w tej sprawie.Czy istnieje sposób na znalezienie ID Teamviewer w języku C#?

Wszelka pomoc będzie mile widziane :)

+0

Podobno są przestarzałe, ale to dobre miejsce, aby rozpocząć, '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-of-teamviewer-programatically/ – CodeCamper

+0

Dzięki za szybką odpowiedź, jednak widziałem te linki robiąc badania na ten temat problem, jestem początkujący w C# i był nadzieją dla jaśniejszego wyjaśnienia –

Odpowiedz

8

Dla TeamViewer 8 w systemie Windows 8, TeamViewer ID są przechowywane w HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ TeamViewer \ Version8 \ ClientID

Stąd na nim jest po prostu kwestia odczytywania tego klucza rejestru w języku C#, a następnie rób, co chcesz z nim, w razie potrzeby dostarczy kod do odczytu rejestru :) Ale http://www.codeproject.com/Articles/3389/Read-write-and-delete-from-registry-with-C wyjaśnia to naprawdę dobrze już! Powodzenia!

+1

to jest absolutnie genialne! Fantastyczna odpowiedź Dziękuje bardzo: D –

+1

Jesteś bardzo mile widziane :) – Maritim

10

To jest to, czego używam.

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

To działało również dobrze = D Dziękuje! –

+1

klucze rejestru są jednorazowe więc powinno być w użyciu instrukcji – NiKiZe

8

Wersja 10 ma nieco inną pozycję w rejestrze.

Poniższy kod działa z ver. 10, a także starsze wersje. Zajmuje również różnice między 32 bit i 64-bitowym systemie operacyjnym pod uwagę:

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

klucze rejestru są jednorazowego użytku, tak powinno być w użyciu instrukcji – NiKiZe

+0

myślę, że moja metoda nie przecieka. Ale ogólnie mówiąc, tak, obiekty IDisposable powinny być traktowane poprawnie. –

1

Przyjęte rozwiązanie może być prawidłowa, w niektórych przypadkach, jednak ClientID mogą znajdować się w innych miejscach w rejestrze.

  1. To zależy od tego, czy używasz 64-bitowego systemu operacyjnego. W 64-bitowym systemie operacyjnym musisz uwzględnić \ Wow6432 \.
  2. Czasami lokalizacja rejestru kończy się wersją (na przykład \ Version9), ale widziałem przypadki, w których się nie znajduje.

Możliwe lokalizacje:

  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ TeamViewer \ Version [wersja]
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ TeamViewer
  • HKEY_LOCAL_MACHINE \ SOFTWARE \ TeamViewer \ Version [wersja]
  • 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

Ta odpowiedź może być bardziej zwięzła, ale w wielu przypadkach zawiedzie, nie jest to dobre rozwiązanie. Zobacz odpowiedź od Igora Gorjanca lub Devsoft na przykład. – jv42

+0

Cóż, jest krótki i pozostawia programistom odpowiedzialność za poprawną wersję ścieżki. – ateacv

+0

Wystarczająco uczciwe, w niektórych konkretnych przypadkach może się przydać pomoc. – jv42

Powiązane problemy