Files
TSAnmeldung/TSAnmeldung/Main.vb

376 lines
13 KiB
VB.net

Imports System
Imports System.Diagnostics
Imports System.Threading
Imports System.Diagnostics.Eventing.Reader
Public Class Main
Public WithEvents mstsc As New Process
Public sAppPath As String = Application.StartupPath
Public LDAP As String
Public autoconnect, autologoff As Boolean
Public debug As Boolean = False
Public ConBroker As String
Public ConString As String
Public ConType As String
Public MAC As String
Public ClientMode As Boolean
Dim lastupdate As DateTime
Private Sub Main_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Text = ""
Me.Text = "TSAnmeldung " & My.Resources.ProgVersion
SendEvents()
WoBinIch()
mstsc.EnableRaisingEvents = True
Try
Dim GroupList As List(Of String) = cRes.GetUserGroupMembership(Environment.UserName, LDAP)
For Each group As String In GroupList
If group = "CN=SG_DEBUG" Then
debug = True
Timer2.Enabled = True
End If
Next
Catch ex As Exception
End Try
Dim i As Integer
For Each s As String In Environment.GetCommandLineArgs
If i > 0 Then
If s = "/d" Or s = "-d" Then
autoconnect = False
autologoff = False
cRes.LocalUser.FillWithLoggedOnUser(False) : Report() : TimerReport.Enabled = True
ElseIf s = "/c" Or s = "-c" Then
autoconnect = False
autologoff = False
ClientMode = True
cboxStandort.Enabled = False
cRes.LocalUser.FillWithLoggedOnUser(False)
Anmeldung.deleteHostCred("rdpintern.verag.ag")
Anmeldung.deleteHostCred("remote.verag.ag")
Else
autoconnect = True
cRes.LocalUser.FillWithLoggedOnUser(False) : Report() : TimerReport.Enabled = True
End If
End If
i += 1
Next
If Environment.GetCommandLineArgs.Length = 1 Then
cRes.LocalUser.FillWithLoggedOnUser(False) : Report() : TimerReport.Enabled = True
End If
' MsgBox(autoconnect)
Timer1.Enabled = autoconnect
'cRes.LocalUser.FillWithLoggedOnUser(False)
cRes.LocalTeamviewerID = getTeamViewerID()
' Report()
Dim meh As New cPascom
meh.Anmelden()
End Sub
Public Function Report()
lastupdate = Date.Now
Dim ds As New DataSet
cSQL.SQL2DS("select * from TbL_ThinClients where Benutzeranmeldename = '" & cRes.LocalUser.BenutzeranmeldeName & " ' ", ds)
If Not ds.Tables(0).Rows.Count = 0 Then
RemoveSitzung()
End If
cSQL.InsertSQL("TbL_ThinClients", "(Benutzeranmeldename, Name, TeamviewerID, LastReport, ClientName, Domain, Company, SystemUpTime) VALUES (
'" & cRes.LocalUser.BenutzeranmeldeName & "',
'" & cRes.LocalUser.Name & "',
'" & cRes.LocalTeamviewerID & "',
'" & Date.Now & "',
'" & cRes.LocalUser.Hostname & "',
'" & cRes.LocalUser.Domäne & "',
'" & cRes.LocalUser.Company & "',
'" & cRes.getuptime(True) & "')")
End Function
Sub RemoveSitzung()
cSQL.DeleteSQL("TbL_ThinClients", "Benutzeranmeldename = '" & cRes.LocalUser.BenutzeranmeldeName & " ' ")
End Sub
Public Sub WoBinIch()
'MsgBox(Environment.UserDomainName)
Select Case Environment.UserDomainName
Case "VERAGOST"
cboxStandort.SelectedItem = "VERAG SUB (rdpintern.verag.ag)"
LDAP = "LDAP://DC=VERAG,DC=OST,DC=DMN"
autoconnect = True
autologoff = True
Case "VERAG-SBG"
cboxStandort.SelectedItem = "VERAG SBG (terminalsbg.verag.ag)"
LDAP = "LDAP://DC=VERAG-SBG,DC=LOCAL"
autoconnect = True
autologoff = True
Case "IMEX"
cboxStandort.SelectedItem = "VERAG SUB (rdpintern.verag.ag)"
LDAP = "LDAP://DC=IMEX,DC=LOCAL"
autoconnect = True
autologoff = True
Case Else
autoconnect = False
autologoff = False
End Select
'If Environment.UserDomainName = "VERAGOST" Then
' cboxStandort.SelectedItem = "VERAG SUB (rdpintern.verag.ag)"
' LDAP = "LDAP://DC=VERAG,DC=OST,DC=DMN"
' autoconnect = True
' autologoff = True
'ElseIf Environment.UserDomainName = "VERAG-SBG" Then
' cboxStandort.SelectedItem = "VERAG SBG (terminalsbg.verag.ag)"
' LDAP = "LDAP://DC=VERAG-SBG,DC=LOCAL"
' autoconnect = True
' autologoff = True
'Else
' autoconnect = False
' autologoff = False
'End If
If sAppPath Like "*\bin\Debug" Or Environment.UserName = "miesenbeck" Or Environment.UserName = "Administrator" Or autologoff = False Then
autoconnect = False
Me.ControlBox = True
End If
If Not LoadParameters(Environment.UserName, ConType, ConString) = False Then
cboxStandort.SelectedItem = "Personalisiert"
'ConString = LoadParameters(Environment.UserName)
End If
'Select Case Environment.UserName
' Case "miesenbeck"
' cboxStandort.SelectedItem = "Personalisiert"
' Case "bluxbauer"
' cboxStandort.SelectedItem = "Personalisiert"
'End Select
End Sub
Public Function rdp(host As String, Optional ByVal options As String = "", Optional ByVal rdpfile As String = "")
'Dim mstsc As New Process()
' mstsc.EnableRaisingEvents = True
If rdpfile = "" Then
mstsc.StartInfo.FileName = "mstsc.exe"
mstsc.StartInfo.UseShellExecute = False
mstsc.StartInfo.Arguments = " /v: " & host & " " & options
mstsc.Start()
Else
mstsc.StartInfo.FileName = "mstsc.exe"
mstsc.StartInfo.UseShellExecute = False
mstsc.StartInfo.Arguments = " \\verag.ost.dmn\NETLOGON\RDPs\" & rdpfile
mstsc.Start()
End If
Do
If Process.GetProcessesByName("mstsc").Length > 0 Then
Thread.Sleep(500)
Else
LogOff()
'Process.Start("shutdown", "-l")
'MsgBox("LogOff")
Exit Function
End If
Application.DoEvents()
Loop
End Function
Public Function killpro(processname As String)
For Each p As Process In Process.GetProcessesByName(processname)
p.Kill()
Next
End Function
Private Sub btnResetSession_Click(sender As Object, e As EventArgs) Handles btnResetSession.Click
killpro("mstsc")
'rdp("rdpintern.verag.ag", "/noConsentPrompt /multimon /control")
If ClientMode = False Then
connect()
Else
Dim frm As New Anmeldung
frm.Show()
Me.WindowState = FormWindowState.Minimized
End If
End Sub
Private Sub connect()
Select Case cboxStandort.SelectedItem
Case "Personalisiert"
If ConType = "rdp" Then
rdp(-1, -1, ReturnTerminalserver())
Else
' MsgBox(ConString)
rdp(ConString, "/multimon")
End If
Case Else
If cRes.CheckTermServer(ReturnTerminalserver()) Then
rdp(ReturnTerminalserver(), "/multimon")
Else
autologoff = False
autoconnect = False
MsgBox("Verbindung konnte nicht aufgebaut werden (Server" & ReturnTerminalserver() & " ist nicht erreichbar)")
End If
End Select
End Sub
Private Sub btnLogOFF_Click(sender As Object, e As EventArgs) Handles btnLogOFF.Click
System.Diagnostics.Process.Start("shutdown", "-l")
End Sub
Public Sub SendEvents()
Dim query As New EventLogQuery("System", PathType.LogName)
Dim watcher As New EventLogWatcher(query)
AddHandler watcher.EventRecordWritten, AddressOf watcher_EventRecordWritten
watcher.Enabled = True
Console.ReadLine()
End Sub
Public Sub watcher_EventRecordWritten(sender As Object, e As EventRecordWrittenEventArgs)
'Console.WriteLine(e.EventRecord.ToXml())
If e.EventRecord.ProviderName = "uwfvol" Then
' MsgBox("EventID: " & e.EventRecord.Id & vbCrLf & "Info: " & e.EventRecord.Properties(0).Value)
If debug Then cRes.sendmsg("192.168.0.121", "EventID " & e.EventRecord.Id & "bei Benutzer " & Environment.UserName & " auf Rechner: " & Environment.MachineName & ", Uptime: " & cRes.getuptime())
If e.EventRecord.Id = 2 Then
MsgBox("Speicherauslastung am ThinClient ist kritisch und daher sollte dieser ehestmöglich neu gestartet werden!" & vbCrLf & "Wenn diese Meldung ÖFTER auftritt, bitte bei Sebastian (DW 861) Bescheid geben.", MsgBoxStyle.Critical, "Kritische Speicherauslastung")
cRes.bringtofocus("mstsc.exe")
End If
End If
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Timer1.Enabled = False
'MsgBox("Tick")
connect()
End Sub
Private Sub btnShutdown_Click(sender As Object, e As EventArgs) Handles btnShutdown.Click
If MsgBox("ThinClient ausschalten?", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then
System.Diagnostics.Process.Start("shutdown", "-s -t 0")
End If
End Sub
Private Sub Main_Closed(sender As Object, e As EventArgs) Handles Me.Closed
LogOff()
End Sub
Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
cRes.Log2NAS("meh", "\\192.168.0.253\backup\temp_Sebastian\Logs\" & Environment.UserName & ".txt")
End Sub
Public Sub LogOff()
RemoveSitzung()
If sAppPath Like "*\bin\Debug" Or Environment.UserName = "miesenbeck" Or Environment.UserName = "Administrator" Or autologoff = False Then
Me.ControlBox = True
Else
Try
System.Diagnostics.Process.Start("shutdown", "-l")
Catch
End Try
End If
End Sub
Public Function ReturnTerminalserver()
If cboxStandort.SelectedItem = "VERAG SUB (rdpintern.verag.ag)" Then Return "rdpintern.verag.ag"
If cboxStandort.SelectedItem = "VERAG SBG (terminalsbg.verag.ag)" Then Return "terminalsbg.verag.ag"
If cboxStandort.SelectedItem = "BACKUP" Then
If cRes.CheckTermServer("192.168.0.235") Then Return "192.168.0.235" : Exit Function
If cRes.CheckTermServer("192.168.0.101") Then Return "192.168.0.101" : Exit Function
If cRes.CheckTermServer("192.168.0.92") Then Return "192.168.0.92" : Exit Function
End If
If cboxStandort.SelectedItem = "Personalisiert" Then
Return ConString
End If
End Function
Public Function LoadParameters(ByVal Benutzername As String, ByRef _ConType As String, ByRef _ConString As String)
Try
Dim lines = IO.File.ReadAllLines("\\dc01.verag.ost.dmn\NETLOGON\TSAnmeldung.ini")
Dim colCount = lines.First.Split(";"c).Length
For Each line In lines
Dim objFields = From field In line.Split(";"c)
'Select Case objFields(0).ToString
' Case Benutzername
If String.Compare(Benutzername, objFields(0).ToString, True) = 0 Then
_ConType = objFields(1).ToString
_ConString = objFields(2).ToString
Return True
Exit Function
End If
' End Select
Next
Return False
Catch ex As Exception
' MsgBox("Fehler beim Lesen TSAnmeldung.ini: " & vbCrLf & ex.Message)
End Try
End Function
Private Sub TimerReport_Tick(sender As Object, e As EventArgs) Handles TimerReport.Tick
Report()
End Sub
Private Sub TelAnmelden_Click(sender As Object, e As EventArgs) Handles TelAnmelden.Click
Dim meh As New cPascom
meh.Anmelden()
'If meh.Anmelden() = True Then
' Label1.Text = "Telefon (neu) verbunden"
'Else
' Label1.Text = "Telefon nicht ermittelbar"
'End If
End Sub
Function getTeamViewerID()
Dim Reg As String = Nothing
If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\TeamViewer", "ClientIDOfTSUser", Nothing) Is Nothing Then
If My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\TeamViewer", "ClientID", Nothing) Is Nothing Then
Reg = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer", "ClientID", Nothing)
Else
Reg = My.Computer.Registry.GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\TeamViewer", "ClientID", Nothing)
End If
Else
Reg = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\TeamViewer", "ClientIDOfTSUser", Nothing)
End If
Label1.Text = "TV ID: " & Reg
Label1.Visible = True
Return Reg
End Function
End Class