Alles macht sich selbstständig - Text aus Msg und MsgBox verschwindet, OpenFiledialog öffnet sich willkürlich

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Alles macht sich selbstständig - Text aus Msg und MsgBox verschwindet, OpenFiledialog öffnet sich willkürlich

    Hallo zusammen,

    nachdem ihr mir letztens so gut helfen konntet wende ich mich mit einer neuen Frage an euch: (ok besser mit zwei Fragen)

    Ich habe einen Code, welcher mir aus einer RDP-Verbindung den Hostname ausliest und in der Variable "GetWTSQueryHost" speichert.
    Soweit funktioniert das auch klasse.

    Aber wenn ich innerhalb eines E-Mail Bodys (SMTP) versuche auf diese GetWTSQueryHost zuzugreifen, schneidet der mir die E-Mail ab:

    VB.NET-Quellcode

    1. Msg.Body = ("Folgender Problembericht wurde von " & Environment.UserName & " übermittelt:" & vbNewLine & Problembeschreibung_input.Text & vbCrLf & vbNewLine & vbCrLf & "Daten zur verwendeten Hardware: " & vbCrLf & vbCrLf & "Computername / Hostname / ggf. ThinClient-Server: " & Environment.MachineName & " " & vbNewLine & " / ThinClient-Hostname: " & [color=#ff6600]Hauptfenster.GetWTSQueryHost(-1)[/color] & vbCrLf & "Benutzername: " & Environment.UserName & vbCrLf & OSinhalt & vbCrLf & vbNewLine & vbCrLf & "Laufwerke: " & vbCrLf & vbCrLf & tmplocaldriinhalt & vbNewLine & vbNewLine & "Netzwerk: " & vbCrLf & vbNewLine & tmpipinhalt & vbNewLine & tmpmacinhalt & vbNewLine & vbNewLine & vbNewLine & "Drucker:" & vbNewLine & vbNewLine & tmpprintinhalt)


    Nach dem Aufruf durch "Hauptfenster.GetWTSQueryHost(-1)" war es das - der Rest fehlt.


    Ich habe schon versucht, diesen Aufruf in einen String zu packen und auszulesen, ob GetWTSQueryHost einen Wert liefert und wenn ja, tcl_hostname.text durch den Inhalt aus GetWTSQueryhost zu ersetzen:

    VB.NET-Quellcode

    1. Public Sub hostnametcl()
    2. If GetWTSQueryHost(-1) > 1 Then
    3. tcl_hostname.Text = GetWTSQueryHost(-1)
    4. Else
    5. tcl_hostname.Text = "nicht vorhanden"
    6. End If
    7. End Sub


    Zwar zeigt er mir so alle Informationen an, allerdings spuckt er dann nur noch "nicht vorhanden" aus - obwohl ein Wert vorliegt.

    Was mache ich falsch?


    Zur zweiten Frage:

    In meinem Formular hat der Benutzer die Möglichkeit, eine Datei auszuwählen, die als Anhang an die Mail gefügt wird.

    VB.NET-Quellcode

    1. Public Sub datei_anhaengen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles datei_anhaengen.Click
    2. Anhang_laden()
    3. End Sub
    4. Public Sub Anhang_laden()
    5. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    6. Dim dateiname As String = IO.Path.GetFileName(OpenFileDialog1.FileName)
    7. Dim kurztext As String = dateiname.Substring(0, 7)
    8. OpenFileDialog1.Multiselect = False
    9. Dim Anhangsdatei As String = OpenFileDialog1.FileName
    10. anhang_text.Text = "Anhang: " & kurztext & "..."
    11. End If
    12. End Sub



    in der Msg.Attachment.New sieht es wie folgt aus:

    VB.NET-Quellcode

    1. Msg.Attachments.Add(New System.Net.Mail.Attachment(OpenFileDialog1.FileName))


    Nun läuft es aber auf eine Fehlermeldung heraus, wenn der Benutzer keine Datei anhängt. (Kann die Datei ... OpenFileDialog1 nicht finden...)

    Also hab ich auch da eine Abfrage durchgeführt:

    VB.NET-Quellcode

    1. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    2. Msg.Attachments.Add(New System.Net.Mail.Attachment(OpenFileDialog1.FileName))
    3. end if

    ..
    ..
    myserver.send(msg)


    Jetzt ist zwar die Fehlermeldung weg, allerdings öffnet der nach dem Klick auf den "Senden"-Button automatisch das OpenFileDialog1. Erst wenn ich dort dann auf abbrechen drücke, funktioniert es und er sendet die E-Mail ohne Anhang.


    Ideen?

    Lieben Dank,

    Matthias aka Pindoyu

    pindoyu schrieb:

    Was mache ich falsch?
    Ggf. >=?

    VB.NET-Quellcode

    1. If GetWTSQueryHost(-1) >= 1 Then

    ---

    VB.NET-Quellcode

    1. OpenFileDialog1.Multiselect = False
    muss vor OpenFileDialog1.ShowDialog stehen, um da aktiv zu sein.
    Um Deinen merkwürdigen Ablauf zu analysieren, poste bitte mal den gesamten Code, um alles ordentlich zu sehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Code des Problemberichts-Fensters:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System
    3. Imports System.Management
    4. Public Class Problembericht
    5. Dim tmpipinhalt As String = My.Computer.FileSystem.ReadAllText(Hauptfenster.tmpipspeicherdatei)
    6. Dim tmpmacinhalt As String = My.Computer.FileSystem.ReadAllText(Hauptfenster.tmpmacspeicherdatei)
    7. Dim tmplocaldriinhalt As String = My.Computer.FileSystem.ReadAllText(Hauptfenster.tmplocaldrispeicherdatei)
    8. Dim tmpprintinhalt As String = My.Computer.FileSystem.ReadAllText(Hauptfenster.tmpprintspeicherdatei)
    9. Dim OSinhalt As String = "Betriebssystem: " & Hauptfenster.GetOSVersion() & " x" & Hauptfenster.GetArchitektur() & ": (" & Environment.OSVersion.ToString & ")"
    10. Dim msgbox_senden As String
    11. Dim drvs As String() = Environment.GetLogicalDrives()
    12. 'E-Mail senden und tmp-Dateien löschen
    13. Private Sub Senden_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Senden_btn.Click
    14. msgbox_senden = MsgBox("Ihre Problembeschreibung wird zusammen mit detaiierten Computerinformationen an das IT-team gesendet", MsgBoxStyle.YesNo, "Senden der Informationen bestätigen")
    15. If msgbox_senden = MsgBoxResult.Yes Then
    16. 'Aufruf der Routine zum senden
    17. 'Bestimmen der Variablen
    18. Dim Msg As New Net.Mail.MailMessage
    19. Dim myCredentials As New System.Net.NetworkCredential
    20. 'Festlegen der SMTP-Benutzernamen
    21. myCredentials.UserName = "bla"
    22. myCredentials.Password = "test1234"
    23. 'Deaktivieren des HTML-Bodys
    24. Msg.IsBodyHtml = False
    25. 'Festlegen des SMTP-Servers
    26. Dim mySmtpsvr As New Net.Mail.SmtpClient()
    27. mySmtpsvr.Host = "blablabla"
    28. mySmtpsvr.Port = 25
    29. mySmtpsvr.UseDefaultCredentials = True
    30. 'mySmtpsvr.Credentials = myCredentials
    31. Try
    32. Msg.From = New Net.Mail.MailAddress("Ticketanfrage@intern")
    33. Msg.To.Add("IT@me.de") 'IT-Service-Desk als Empfänger festlegen
    34. Msg.Subject = "Ticketanfrage " & Environment.MachineName & " / " & Hauptfenster.GetWTSQueryHost(-1) & " -- " & Environment.UserName
    35. Msg.Body = ("Folgender Problembericht wurde von " & Environment.UserName & " übermittelt:" & vbNewLine & Problembeschreibung_input.Text & vbCrLf & vbNewLine & vbCrLf & "Daten zur verwendeten Hardware: " & vbCrLf & vbCrLf & "Computername / Hostname / ggf. ThinClient-Server: " & Environment.MachineName & " " & vbNewLine & "ThinClient-Hostname: " & (Hauptfenster.GetWTSQueryHost(-1)) & vbCrLf & "Benutzername: " & Environment.UserName & vbCrLf & OSinhalt & vbCrLf & vbNewLine & vbCrLf & "Laufwerke: " & vbCrLf & vbCrLf & tmplocaldriinhalt & vbNewLine & vbNewLine & "Netzwerk: " & vbCrLf & vbNewLine & tmpipinhalt & vbNewLine & tmpmacinhalt & vbNewLine & vbNewLine & vbNewLine & "Drucker:" & vbNewLine & vbNewLine & tmpprintinhalt)
    36. Msg.Attachments.Add(New System.Net.Mail.Attachment(OpenFileDialog1.FileName))
    37. mySmtpsvr.Send(Msg)
    38. MsgBox("E-Mail gesendet.", MsgBoxStyle.Information, Title:="Information")
    39. Catch ex As Exception
    40. MsgBox(Err.Number & ex.Message & ex.StackTrace.ToString) 'Falls ein Fehler auftritt wird eine MsgBox angezeigt
    41. End Try
    42. 'My.Computer.FileSystem.WriteAllText("C:\messageboxinhalt.txt", "Folgender Problembericht wurde von " & Environment.UserName & " übermittelt:" & vbNewLine & Problembeschreibung_input.Text & vbCrLf & vbNewLine & vbCrLf & "Daten zur verwendeten Hardware:" & vbCrLf & vbCrLf & "Computername / Hostname / ggf. ThinClient-Server: " & Environment.MachineName & vbCrLf & "ggf. ThinClient-Hostname: " & Hauptfenster.tcl_hostname.Text & vbCrLf & "Benutzername: " & Environment.UserName & vbCrLf & OSinhalt & vbCrLf & vbNewLine & vbCrLf & "Laufwerke: " & vbCrLf & vbCrLf & tmplocaldriinhalt & vbNewLine & vbNewLine & "Netzwerk: " & vbCrLf & vbNewLine & tmpipinhalt & vbNewLine & tmpmacinhalt & vbNewLine & vbNewLine & vbNewLine & "Drucker:" & vbNewLine & vbNewLine & tmpprintinhalt, True)
    43. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpipspeicherdatei)
    44. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpmacspeicherdatei)
    45. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmplocaldrispeicherdatei)
    46. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpprintspeicherdatei)
    47. Me.Close()
    48. Application.Exit()
    49. ElseIf msgbox_senden = MsgBoxResult.No Then
    50. If FileIO.FileSystem.FileExists(Hauptfenster.tmpipspeicherdatei) = True And FileIO.FileSystem.FileExists(Hauptfenster.tmpmacspeicherdatei) = True And FileIO.FileSystem.FileExists(Hauptfenster.tmplocaldrispeicherdatei) = True Then
    51. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpipspeicherdatei)
    52. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpmacspeicherdatei)
    53. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmplocaldrispeicherdatei)
    54. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpprintspeicherdatei)
    55. MessageBox.Show("Nachricht nicht versendet")
    56. Me.Close()
    57. Application.Exit()
    58. End If
    59. End If
    60. End Sub
    61. Private Sub abbruch_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles abbruch_btn.Click
    62. 'Fenster bei Abbruch schließen
    63. If FileIO.FileSystem.FileExists(Hauptfenster.tmpipspeicherdatei) = True And FileIO.FileSystem.FileExists(Hauptfenster.tmpmacspeicherdatei) = True And FileIO.FileSystem.FileExists(Hauptfenster.tmpmacspeicherdatei) = True Then
    64. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpipspeicherdatei)
    65. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpmacspeicherdatei)
    66. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmplocaldrispeicherdatei)
    67. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpprintspeicherdatei)
    68. Me.Close()
    69. Application.Exit()
    70. Else
    71. Me.Close()
    72. Application.Exit()
    73. End If
    74. End Sub
    75. 'Fenster bei "x" schließen
    76. Private Sub problembericht_formclosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
    77. If e.CloseReason = CloseReason.UserClosing Then
    78. If FileIO.FileSystem.FileExists(Hauptfenster.tmpipspeicherdatei) = True And FileIO.FileSystem.FileExists(Hauptfenster.tmpmacspeicherdatei) = True And FileIO.FileSystem.FileExists(Hauptfenster.tmplocaldrispeicherdatei) = True Then
    79. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpipspeicherdatei)
    80. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpmacspeicherdatei)
    81. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmplocaldrispeicherdatei)
    82. My.Computer.FileSystem.DeleteFile(Hauptfenster.tmpprintspeicherdatei)
    83. End If
    84. e.Cancel = True
    85. Application.Exit()
    86. End If
    87. End Sub
    88. Public Sub datei_anhaengen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles datei_anhaengen.Click
    89. Anhang_laden()
    90. End Sub
    91. Public Sub Anhang_laden()
    92. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
    93. Dim dateiname As String = IO.Path.GetFileName(OpenFileDialog1.FileName)
    94. Dim kurztext As String = dateiname.Substring(0, 7)
    95. OpenFileDialog1.Multiselect = False
    96. Dim Anhangsdatei As String = OpenFileDialog1.FileName
    97. anhang_text.Text = "Anhang: " & kurztext & "..."
    98. End If
    99. End Sub
    100. Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
    101. MsgBox(("Folgender Problembericht wurde von " & Environment.UserName & " übermittelt:" & vbCrLf & vbCrLf & Problembeschreibung_input.Text & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "Daten zur verwendeten Hardware: " & vbCrLf & vbCrLf & "Computename / Hostname / ggf. ThinClient-Server: " & Environment.MachineName & vbCrLf & "ThinClient-Hostname: " & Hauptfenster.tcl_hostname.Text & vbCrLf & vbCrLf & "Benutzername: " & Environment.UserName & vbCrLf & OSinhalt & vbCrLf & vbNewLine & vbCrLf & "Laufwerke: " & vbCrLf & vbCrLf & tmplocaldriinhalt & vbNewLine & vbNewLine & "Netzwerk: " & vbCrLf & vbNewLine & tmpipinhalt & vbNewLine & tmpmacinhalt & vbNewLine & vbNewLine & vbNewLine & "Drucker:" & vbNewLine & vbNewLine & tmpprintinhalt))
    102. End Sub
    103. End Class



    Code des Hauptfensters:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Explicit On
    2. Imports System.Net
    3. Imports System.Net.NetworkInformation
    4. Imports System.Management
    5. Imports System.IO
    6. 'Aufbau des User-Interfaces sowie abfrage der META-Daten
    7. Public Class Hauptfenster
    8. Dim d As System.Net.IPAddress() = System.Net.Dns.GetHostAddresses(System.Net.Dns.GetHostName())
    9. Public tmpipspeicherdatei As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "ipconf.sdhf"
    10. Public tmpmacspeicherdatei As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "macconf.sdhf"
    11. Public tmplocaldrispeicherdatei As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "driveconf.sdhf"
    12. Public tmpprintspeicherdatei As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "printconf.sdhf"
    13. 'Betriebssystemversion herausfinden
    14. Public Function GetOSVersion() As String
    15. Select Case Environment.OSVersion.Platform
    16. Case PlatformID.Win32S
    17. Return "Windows 3.1"
    18. Case PlatformID.Win32Windows
    19. Select Case Environment.OSVersion.Version.Minor
    20. Case 0
    21. Return "Windows 95" 'Windows 95 unterstützt .Net nicht
    22. Case 10
    23. If Environment.OSVersion.Version.Revision.ToString() = "2222A" Then
    24. Return "Windows 98 - Second Edition"
    25. Else
    26. Return "Windows 98"
    27. End If
    28. Case 90
    29. Return "Windows ME"
    30. Case Else
    31. Return "Unbekannt"
    32. End Select
    33. Case PlatformID.Win32NT
    34. Select Case Environment.OSVersion.Version.Major
    35. Case 3
    36. Select Case Environment.OSVersion.Version.Minor
    37. Case 0
    38. Return "Windows NT 3" 'Windows NT 3 unterstützt .Net nicht
    39. Case 1
    40. Return "Windows NT 3.1" 'Windows NT 3.1 unterstützt .Net nicht
    41. Case 5
    42. Return "Windows NT 3.5" 'Windows NT 3.5 unterstützt .Net nicht
    43. Case 51
    44. Return "Windows NT 3.51" 'Windows NT 3.51 unterstützt .Net nicht
    45. End Select
    46. Case 4
    47. Return "Windows NT 4.0"
    48. Case 5
    49. Select Case Environment.OSVersion.Version.Minor
    50. Case 0
    51. Return "Windows 2000"
    52. Case 1
    53. Return "Windows XP"
    54. Case 2
    55. Return "Windows 2003"
    56. End Select
    57. Case 6
    58. Select Case Environment.OSVersion.Version.Minor
    59. Case 0
    60. Return "Windows Vista/Windows 2008 Server"
    61. Case 1
    62. Return "Windows 7"
    63. End Select
    64. Case Else
    65. Return "Unbekannt"
    66. End Select
    67. Case PlatformID.WinCE
    68. Return "Windows CE"
    69. Case PlatformID.Xbox
    70. Return "XBox"
    71. Case PlatformID.MacOSX
    72. Return "Mac OS X"
    73. Case PlatformID.Unix
    74. Return "Unix"
    75. Case Else
    76. Return "Unbekannt"
    77. End Select
    78. End Function
    79. 'Architektur herausfinden
    80. Public Function GetArchitektur() As Integer
    81. Return Runtime.InteropServices.Marshal.SizeOf(GetType(IntPtr)) * 8
    82. End Function
    83. 'Klick auf 1. Button zeigt MAC an
    84. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MAC_Button.Click
    85. For Each nic As System.Net.NetworkInformation.NetworkInterface In System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
    86. MessageBox.Show(String.Concat("Die MAC-Adresse des Adapters ", nic.Description, " lautet: ", nic.GetPhysicalAddress()))
    87. Next
    88. End Sub
    89. 'MAC auslesen
    90. Public Sub MAC_auslesen()
    91. Dim tmpmaclist As New List(Of String)
    92. For Each nic As System.Net.NetworkInformation.NetworkInterface In System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()
    93. Dim macmsg As String = String.Concat("MAC von ", nic.Description, ": ", nic.GetPhysicalAddress())
    94. tmpmaclist.Add(macmsg)
    95. Next
    96. Writemacs(tmpmaclist)
    97. End Sub
    98. 'MACs schreiben
    99. Private Sub writemacs(ByVal macs As List(Of String))
    100. File.WriteAllLines(tmpmacspeicherdatei, macs.ToArray())
    101. End Sub
    102. 'IPs auslesen
    103. Public Sub ipauslesen()
    104. Dim TmpList As New List(Of String)
    105. For i = 0 To d.Count - 1
    106. Dim ipmsg As String = String.Concat("IP: " & d(i).ToString)
    107. TmpList.Add(ipmsg)
    108. Next
    109. Writeips(TmpList)
    110. End Sub
    111. 'IPs schreiben
    112. Private Sub Writeips(ByVal ips As List(Of String))
    113. File.WriteAllLines(tmpipspeicherdatei, ips.ToArray())
    114. End Sub
    115. 'IPs in Hauptmaske anzeigen
    116. Public Sub Button2_Click() Handles IP_Button.Click
    117. For i = 0 To d.Count - 1
    118. MessageBox.Show("IP: " & d(i).ToString)
    119. Next
    120. End Sub
    121. 'Liest die Laufwerke ein und verweist auf die API-Deklaration für Netzlaufwerke
    122. Public Sub Laufwerkelesen()
    123. Dim TmpdriList As New List(Of String)
    124. For Each localdri In IO.DriveInfo.GetDrives
    125. If localdri.IsReady = True Then
    126. Dim drive As String = String.Concat(localdri, vbTab, "Typ: ", localdri.DriveType, vbTab, vbTab, "Netzwerkpfad: ", GetNetPfad(localdri.ToString), vbTab, vbTab, vbTab, "Freier Speicherplatz: ", Math.Round(localdri.AvailableFreeSpace / 1024 / 1024 / 1024, 2), "GB", vbTab)
    127. TmpdriList.Add(drive)
    128. End If
    129. Next
    130. Writedrives(TmpdriList)
    131. End Sub
    132. ' Laufwerke in Datei schreiben
    133. Private Sub Writedrives(ByVal dri As List(Of String))
    134. File.WriteAllLines(tmplocaldrispeicherdatei, dri.ToArray())
    135. End Sub
    136. ' API-Deklaration für Netzlaufwerke
    137. Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" ( _
    138. ByVal localName As String, _
    139. ByVal remoteName As System.Text.StringBuilder, _
    140. ByRef length As Integer) As Integer
    141. Public Function GetNetPfad(ByVal Drive As String) As String
    142. Dim sName As New System.Text.StringBuilder(255)
    143. Try
    144. ' Laufwerksbuchstabe mit abschließenden Doppelpunkt
    145. Drive = Drive.Substring(0, 1) & ":"
    146. ' Auslesen des Pfads
    147. WNetGetConnection(Drive, sName, 255)
    148. Catch ex As Exception
    149. Stop
    150. End Try
    151. Return sName.ToString
    152. End Function
    153. 'Betriebssystemversion und Architektur bei Auslösung anzeigen
    154. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OS_Button.Click
    155. 'Methode 2
    156. MessageBox.Show(GetOSVersion() & " x" & GetArchitektur() & ": (" & Environment.OSVersion.ToString & ")") 'Liefert: Microsoft Windows NT 6.0.6002 Service Pack 2
    157. End Sub
    158. 'ThinClient-Hostname aus Sessionfile auslesen
    159. Public Const WTS_CURRENT_SERVER_HANDLE As Long = 0&
    160. Public Enum WTSInfoClass
    161. WTSInitialProgram
    162. WTSApplicationName
    163. WTSWorkingDirectory
    164. WTSOEMID
    165. WTSSessionId
    166. WTSUserName
    167. WTSWinStationName
    168. WTSDomainName
    169. WTSConnectState
    170. WTSClientBuilderNumber
    171. WTSClientName
    172. WTSClientDirectory
    173. WTSClientProductId
    174. WTSClientHardwareId
    175. WTSClientAddress
    176. WTSClientDisplay
    177. WTSClientProtocolType
    178. End Enum
    179. 'WTS Sitzungsanfragen-Struktur
    180. Public Structure WTS_SESSION_QUERY
    181. Dim SessionID As Long
    182. Dim pWinStationName As Long
    183. Dim senum As WTSInfoClass
    184. End Structure
    185. 'Funktionsdefinition API-Aufruf für Session-Daten auslesen
    186. Public Declare Function WTSQuerySessionInformation Lib _
    187. "wtsapi32.dll" Alias "WTSQuerySessionInformationA" _
    188. (ByVal hServer As Long, ByVal SessionID As Long, _
    189. ByVal WTS_INFO_CLASS As WTSInfoClass, ByRef QSbuffer As Long, _
    190. ByRef pCount As Long) As Long
    191. 'Funktionsdefinition für API-Aufruf "Speicher freigeben"
    192. Public Declare Sub WTSFreeMemory Lib "wtsapi32.dll" (ByVal pMemory As Long)
    193. 'String API's
    194. Public Declare Function StrCopyA Lib "kernel32.dll" Alias "lstrcpyA" _
    195. (ByVal retval As String, ByVal Ptr As Long) As Long
    196. Public Declare Function StrLenA Lib "kernel32.dll" Alias "lstrlenA" _
    197. (ByVal Ptr As Long) As Long
    198. 'Funktion für Auslesen des RDP-Hostnames
    199. Public Function GetWTSQueryHost(ByVal SessionID As Long) As String
    200. Dim retval As Long, lpBuffer As Long
    201. Dim Count As Long
    202. Dim lName As Long
    203. Dim sName As String
    204. 'Remotesitzungsinformationen holen
    205. retval = WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, _
    206. SessionID, WTSInfoClass.WTSClientName, lpBuffer, Count)
    207. 'Funktionsausschnitt
    208. ' Prozedur erfolgreich
    209. If retval Then
    210. 'Stringlänge ermitteln
    211. lName = StrLenA(lpBuffer)
    212. If lName <> 0 Then
    213. 'String initialisieren
    214. sName = (lName * 999999999999999)
    215. 'String kopieren
    216. Call StrCopyA(sName, lpBuffer)
    217. End If
    218. ' Speicher wieder freigeben
    219. WTSFreeMemory(lpBuffer)
    220. Else
    221. 'Prozedurfehler: Keine RDP, Keine DLL da oder sonstwas faul...
    222. MsgBox("Fehler beim Auslesen der RDP-Sitzungsdaten. Es konnten" & _
    223. "keine Informationen gewonnen werden. ", vbCritical, _
    224. "DLL-Zugriffsfehler " & Err.LastDllError)
    225. End If
    226. 'Returnwert
    227. GetWTSQueryHost = sName
    228. End Function
    229. 'Benutzernamen abfragen
    230. Private Sub Benutzer()
    231. Dim benutzername = Environment.UserName
    232. End Sub
    233. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „pindoyu“ () aus folgendem Grund: Expander hinzugefügt

    @pindoyu::
    1. Mach da bitte einen Expander drum [+] neben dem VB-Tag:
    Spoiler anzeigen
    Editiere bitte Deinen Post
    2. Kannst Du bitte den Code so reduzieren, dass nur Dein Effekt übrig bleibt?
    Mach dafür bitte ein neues Projekt, das sofort funktioniert oder häng es als ZIP dran.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habs probiert. Der ist schon abgespeckt....
    Das Problem ist, dass alles zusammenhängt und ich dann nicht den Effekt erzielen kann.

    Leider hat auch das >= 1 bei GetWTSQueryHost(-1) nichts gebracht.

    Und das Multiselect brachte auch keinen erfolg...
    Poste einen Code, der keine Fehler bringt, wenn wir ihn einfügen.
    Teste das bitte an einem neuen Projekt bei Dir am PC.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der bringt ja bei mir keine Fehler :/

    Mal zur Verdeutlichung:

    Wenn ich das ganze Spektakel in ner MsgBox ausgebe sollte das so aussehen, unter ThinClient-Hostname (in diesem Fall mittels tcl_hostname.text) sollte jedoch dann auch ne Nummer stehen.




    Wenn ich aber statt tcl_hostname.text dann GetWTSQueryHost(-1) angebe zeigt er mir zwar auch bei ThinClient-Hostname die Nummer an aber der Rest ist weg:



    ?(



    Edit: ICH HABS! Hatte versehentlich ein Label in der falschen Eingabemaske verwendet :s Also die Anzeige des ThinClient-Hostnames funktioniert nun einwandfrei.

    Aber das Problem mit dem OpenFileDialog besteht weiterhin....


    Wie bekomme ich das hin, dass der nur dann einen E-Mail Anhang anfügt, wenn der Nutzer auch einen Anhang ausgewählt hat und wenn nicht, nichts unternimmt? :S

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „pindoyu“ ()

    pindoyu schrieb:

    Der bringt ja bei mir keine Fehler :/

    RodFromGermany schrieb:

    wenn wir ihn einfügen.
    Ich kann Deinen Code auf meinem Rechner nicht compilieren, weil es da von Fehlern nur so wimmelt.
    Also:
    Erstell ein neues Projekt und füge das ein, sorge dafür, dass es compiliert und dass der Effekt auftritt.
    Dann poste das Projekt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!