TeamViewerIDをVB.netで確認する方法


パソコンを遠隔操作できるソフトでTeamViewer(チームビューアー)というものがあります。
顧客の遠隔サポートで使っている企業もあると思います。
チームビューアーIDがわからなくなってしまった場合、利用者に電話で、

スタート→全てのプログラムの中のTeamViewerを見つけてください。
カタカナのチームじゃなくて、アルファベットでTから始まる…

こんなやり取りするの面倒です。

このようなやり取りをすることなく、チームビューアーIDを確認したい場合、
自社のアプリからチームビューアーを呼ぶボタンをつければよいです。

32ビットと、64ビットの場合があるので、次のコードでTeamViewer.exeを呼び出せば良いです。

    If IO.File.Exists("C:\\Program Files\\TeamViewer\\TeamViewer.exe") Then  
        Process.Start("C:\\Program Files\\TeamViewer\\TeamViewer.exe")  
    ElseIf IO.File.Exists("C:\\Program Files (x86)\\TeamViewer\\TeamViewer.exe") Then  
        Process.Start("C:\\Program Files (x86)\\TeamViewer\\TeamViewer.exe")  
    End If  

チームビューアーIDをプログラムから直接取得したい場合は、TeamViewer.exeと同じフォルダにあるログファイルの中にIDが書いてあるので、それを参照します。
TeamViewer11の場合は、「TeamViewer11_Logfile.log」、
TeamViewer12の場合は、「TeamViewer12_Logfile.log」です。

次のコードで、チームビューアーIDを取得できます。

    Dim sTeamViewerDir As String  
    Dim sLogFileName As String  
    Dim iVersion As Integer  
    'C:\\Program Files、または、C:\\Program Files (x86)にログファイルがあるので、  
    '両方チェックして、TeamViewerのフォルダを特定します。  
    If IO.Directory.Exists("C:\\Program Files\\TeamViewer") Then  
        sTeamViewerDir = "C:\\Program Files\\TeamViewer"  
    ElseIf IO.Directory.Exists("C:\\Program Files (x86)\\TeamViewer") Then  
        sTeamViewerDir = "C:\\Program Files (x86)\\TeamViewer"  
    End If  
    'TeamViewerは毎年バージョンアップするので、  
    'TeamViewer10からTeamViewer20までチェックして、最新のログファイルを見つけます。  
    For iVersion = 10 To 20  
        If IO.File.Exists(sTeamViewerDir & "\\TeamViewer" & CStr(iVersion) & "\_Logfile.log") Then  
            sLogFileName = sTeamViewerDir & "\\TeamViewer" & CStr(iVersion) & "\_Logfile.log"  
        End If  
    Next  
    'ログファイルが見つかったら、中身を読取ります。  
    If sLogFileName <> "" Then  
        Dim sLogText As String  
        Dim sTeamViewerID As String  
        Dim sLogLines() As String  
        Dim objFS As IO.FileStream  
        Dim objSR As IO.StreamReader  
        objFS = IO.File.Open(sLogFileName, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)  
        objSR = New IO.StreamReader(objFS, System.Text.Encoding.GetEncoding(932))  
        sLogText = objSR.ReadToEnd  
        objSR.Close()  
        objFS.Close()  
        If sLogText <> "" Then  
            '改行コードで文字列を分割します。  
            sLogLines = sLogText.Split(vbCrLf)  
            Dim iLine As Integer  
            For iLine = 0 To UBound(sLogLines)  
                If sLogLines(iLine) <> "" Then  
                    '先頭のvbLFを削除して、「ID:」で始まる列を見つけます。  
                    sLogLines(iLine) = sLogLines(iLine).Replace(vbLf, "")  
                    If sLogLines(iLine).StartsWith("ID:") = True Then  
                        '余分な文字を削除して、チームビューアーIDを抽出します。  
                        sTeamViewerID = sLogLines(iLine).Replace("ID:", "")  
                        sTeamViewerID = sTeamViewerID.Replace(" ", "")  
                    End If  
                End If  
            Next  
            If sTeamViewerID <> "" Then  
                MessageBox.Show("チームビューアーIDは、" & sTeamViewerID & "です。")  
            End If  
        End If  
    End If  

ログファイルは、Teamviewer関係の何かにより使用中なので、FileStreamとStreamReaderでアクセスすることで、共有違反エラーを回避しました。
VB.netで使用中のテキストファイルを読み取る方法