有没有办法在c#中找到Teamviewer ID?
我正在制作一个记录用户活动的程序,我希望能够获得Teamviewer ID并将其发送到日志,我知道如何通过将该信息分配给变量来将信息发送到日志,但是我不确定如何将Teamviewer ID传递给所述变量,并希望获得相关帮助有没有办法在c#中找到Teamviewer ID?,c#,C#,我正在制作一个记录用户活动的程序,我希望能够获得Teamviewer ID并将其发送到日志,我知道如何通过将该信息分配给变量来将信息发送到日志,但是我不确定如何将Teamviewer ID传递给所述变量,并希望获得相关帮助 非常感谢所有帮助:)对于Windows 8中的TeamViewer 8,TeamViewer ID存储在HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version8\ClientID中 从现在开始,只需在C#中
非常感谢所有帮助:)对于Windows 8中的TeamViewer 8,TeamViewer ID存储在HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version8\ClientID中
从现在开始,只需在C#中读取注册表项,然后根据需要对其执行任何操作,如果需要,我将提供注册表读取代码:),但已经很好地解释了它!祝你好运 这就是我正在使用的
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;
}
版本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;
}
}
在某些情况下,接受的解决方案可能是正确的,但是ClientID可以位于注册表中的其他位置
- HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\TeamViewer\Version[版本]
- HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node\TeamViewer
- HKEY\U LOCAL\U MACHINE\SOFTWARE\TeamViewer\Version[版本]
- HKEY\U本地\U机器\软件\团队查看器\版本
VBSCRIPT
-C#
-感谢您的快速响应,但是我在研究这个问题时看到了这些链接,我是C#的初学者,希望能有一个更清晰的解释这绝对是太棒了!非常好的回答,非常感谢:请看一下我的答案,还有其他注册表位置,您需要查看:注册表项是一次性的,所以应该在using语句中注册表项是一次性的,所以应该在using语句中。我想我的方法不会泄漏。但总的来说,是的,IDisposable对象应该得到适当的处理。这个答案可能更简洁,但在很多情况下都会失败,这不是一个好的解决方案。例如,请参阅Igor Gorjanc或Devsoft的答案。它很短,让程序员负责正确的版本路径。公平地说,对于某些特定的用例,它可能仍然有用。
public static string TvId()
{
return Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\TeamViewer\\Version6", "ClientID", "FAILED").ToString();
}