Fenstertitel ist String.Empty - Was jetzt?

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    Ich habe mal meine Version von TheBat hochgeladen und ein Projekt, dieser alles ausliest.
    Außerdem habe ich, den Code als txt Datei gespeichert.
    Wenn jemand keine lust hat, meine EXE zu starten.
    Ich hoffe es findet jemand eine Lösung! :thumbup:

    gelöscht



    THX
    Visual Basic.NET 8o
    MS-SQL
    8o

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

    Probier das mal, damit sehe ich auf jeden Fall das Einrichtungsfenster in der Listbox, will thebat aber nun nicht einrichten

    VB.NET-Quellcode

    1. ​Dim running() As Process = Process.GetProcesses()
    2. If running.Length > 0 Then
    3. Dim Cnt As Integer
    4. For Cnt = 0 To running.Length - 1
    5. ListBox1.Items.Add(running(Cnt).MainWindowTitle)
    6. Next Cnt
    7. End If


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza
    Ich habe nun zwei Interessante sachen gefunden.
    Ein VBA Code, diesen ich in Excel getestet habe.
    Er zeigt mir thebat.exe an, aber ich suche noch die Eigenschaft um den Fenstername auszulesen.
    Da dies kein .NET Code ist, hoffe ich, dass dieser nun so ist wie ich es haben möchte.
    Kennt jemand die Eigenschaft um das MainWindowTitle auszulesen?
    ' Debug.Print process.Titel

    Visual Basic-Quellcode

    1. Function getProcessInfo()
    2. On Error Resume Next
    3. Dim objProcess, process, strNameOfUser
    4. ComputerName = "."
    5. Set objProcess = GetObject("winmgmts:{impersonationLevel=impersonate}\\" _
    6. & ComputerName & "\root\cimv2").ExecQuery("Select * From Win32_Process")
    7. For Each process In objProcess
    8. If process.Name <> "System Idle Process" And process.Name <> "System" Then
    9. 'Debug.Print process.Name
    10. Debug.Print process.Name & "," & process.executablepath _
    11. & "," & process.Priority & "," & process.sessionid _
    12. & "," & strNameOfUser & "," & process.handlecount _
    13. & "," & process.ThreadCount
    14. End If
    15. Next
    16. Set objProcess = Nothing
    17. End Function



    Außerdem habe ich noch ein VB6 Code gefunden, dort benötige ich das gleiche.
    Es findet thebat aber leider zeigt dieser Code noch kein Fenstertitel an.
    Da ich kein VB6 installiert habe, kann ich dies nicht testen.
    Gibt es hier jemand der noch die Entwicklungsumgebung von Visual Basic 6 hat?

    Visual Basic-Quellcode

    1. Attribute VB_Name = "Module1"
    2. Private Declare Function EnumWindows& Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long)
    3. Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    4. Private Declare Function IsWindowVisible& Lib "user32" (ByVal hWnd As Long)
    5. Private Declare Function GetParent& Lib "user32" (ByVal hWnd As Long)
    6. ' This function is called for each window handle present
    7. Function EnumWinProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
    8. Dim k As Long, sName As String
    9. If IsWindowVisible(hWnd) And GetParent(hWnd) = 0 Then
    10. sName = Space$(128)
    11. k = GetWindowText(hWnd, sName, 128)
    12. If k > 0 Then
    13. sName = Left$(sName, k)
    14. Form1.List1.AddItem Hex$(hWnd) + vbTab + sName + vbTab
    15. End If
    16. End If
    17. EnumWinProc = 1 ' So long as EnumWinProc returns 1, the enumeration continues.
    18. End Function
    19. Public Sub StartEnumeration()
    20. EnumWindows AddressOf EnumWinProc, vbNull
    21. End Sub





    edit2:
    Ich habe nun einen VB.NET Code gefunden, dieser TheBat auflistet, aber leider noch nicht den Pfad.
    Ich hoffe ich komme bald ans Ziel. ^^

    VB.NET-Quellcode

    1. Module modGetAllOpenWindows
    2. ' Unmanaged API calls
    3. Public Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Int32) As Int32
    4. Public Declare Function IsWindowVisible Lib "user32.dll" (ByVal hwnd As IntPtr) As Boolean
    5. Public Delegate Function EnumWindowsProc(ByVal hwnd As IntPtr, ByVal lParam As Int32) As Boolean
    6. Public Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As IntPtr, ByVal lpString As String, ByVal cch As Int32) As Int32
    7. Public Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hwnd As IntPtr) As Int32
    8. Public Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As IntPtr, ByVal nIndex As Int32) As Int32
    9. Public Declare Function GetParent Lib "user32.dll" (ByVal intptr As IntPtr) As IntPtr
    10. Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean
    11. ' Public constants
    12. Public Const GWL_HWNDPARENT As Int32 = -8
    13. ' Public function
    14. Public newWindowList As List(Of String)
    15. ' Private function
    16. Private newHandleList As List(Of IntPtr)
    17. ' Structure - checks for a GUI
    18. Private Structure RECT
    19. Public left As Integer
    20. Public top As Integer
    21. Public right As Integer
    22. Public bottom As Integer
    23. Public Sub New(ByVal _left As Integer, ByVal _top As Integer, ByVal _right As Integer, ByVal _bottom As Integer)
    24. left = _left
    25. top = _top
    26. right = _right
    27. bottom = _bottom
    28. End Sub
    29. End Structure
    30. ' -----------------------------------------------------------
    31. ' Enumerate the running processes - discard any that does not have a GUI
    32. ' -----------------------------------------------------------
    33. Private Function EnumWinProc(ByVal hwnd As IntPtr, ByVal lParam As Int32) As Boolean
    34. Dim sWindow As String = Nothing
    35. If IsWindowVisible(hwnd) Then
    36. If GetParent(hwnd) = IntPtr.Zero Then
    37. If GetWindowLong(hwnd, GWL_HWNDPARENT) = 0 Then
    38. sWindow = String.Empty.PadLeft(GetWindowTextLength(hwnd) + 1)
    39. GetWindowText(hwnd, sWindow, sWindow.Length)
    40. If Not String.IsNullOrEmpty(sWindow.Substring(0, sWindow.Length - 1)) Then
    41. newWindowList.Add(sWindow.Substring(0, sWindow.Length - 1))
    42. End If
    43. End If
    44. End If
    45. End If
    46. EnumWinProc = True
    47. End Function
    48. ' -----------------------------------------------------------
    49. ' Start the enumeration process
    50. ' -----------------------------------------------------------
    51. Public Sub RefreshWindowList()
    52. newWindowList = New List(Of String)
    53. EnumWindows(AddressOf EnumWinProc, CInt(True))
    54. End Sub
    55. End Module
    56. Public Class Form1
    57. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    58. RefreshWindowList()
    59. For Each item As String In newWindowList
    60. Me.ListBox1.Items.Add(item)
    61. Next
    62. End Sub
    63. End Class


    edit3:
    Ich habe ein VB6 Code gefunden.
    Den werde ich morgen testen, falls man das VB6 noch als Testversion,
    im Internet findet.

    Link:
    vbarchiv.net/tipps/tipp_1147-f…leiste-zu-sehen-sind.html
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Cheffboss“ ()

    Ich habe jetzt folgenden VB6/VBA Code gefunden.
    Dieser listet alle aktiven Fenster auf.
    Aber leider komme ich noch nicht ans Ziel.
    Ich brauche drei Werte:
    Titel des Fensters
    Processname
    Pfad
    Ram-Verbauch.

    Freue mich sehr falls jemand mir dabei helfen kann.

    Visual Basic-Quellcode

    1. #If VBA7 Then
    2. Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () As LongPtr
    3. Private Declare PtrSafe Function GetWindow Lib "user32" _
    4. (ByVal hwnd As LongPtr, ByVal uCmd As Long) As LongPtr
    5. Private Declare PtrSafe Function GetWindowTextA Lib "user32" _
    6. (ByVal hwnd As LongPtr, ByVal lpString As String, ByVal nMaxCount As Long) As Long
    7. Private Declare PtrSafe Function GetWindowInfo Lib "user32" _
    8. (ByVal hwnd As LongPtr, ByRef pwi As PWINDOWINFO) As Boolean
    9. #Else
    10. Private Declare Function GetDesktopWindow Lib "user32" () As Long
    11. Private Declare Function GetWindow Lib "user32" _
    12. (ByVal hwnd As Long, ByVal uCmd As Long) As Long
    13. Private Declare Function GetWindowTextA Lib "user32" _
    14. (ByVal hwnd As Long, ByVal lpString As String, ByVal nMaxCount As Long) As Long
    15. Private Declare Function GetWindowInfo Lib "user32" _
    16. (ByVal hwnd As Long, ByRef pwi As PWINDOWINFO) As Boolean
    17. #End If
    18. 'Typen für GetWindowInfo
    19. Private Type RECT
    20. Left As Long
    21. Top As Long
    22. Right As Long
    23. Bottom As Long
    24. End Type
    25. Private Type PWINDOWINFO
    26. cbSize As Long 'Strukturgröße
    27. rcWindow As RECT 'Fensterkoordinaten
    28. rcClient As RECT 'Clientkoordinaten
    29. dwStyle As Long 'Gibt WINDOWS_STYLES zurück
    30. dwExStyle As Long 'Gibt EXTENDED_WINDOWS_STYLES zurück
    31. dwWindowStatus As Long '1=Fenster ist aktives Fenster, 0=Fenster nicht aktiv
    32. cxWindowBorders As Long 'Rahmenbreite in px
    33. cyWindowBorders As Long 'Rahmenhöhe in px
    34. atomWindowType As Integer
    35. wCreatorVersion As Integer
    36. End Type
    37. Private Const GW_CHILD = 5 'GetWindow: Erstes Kindfenster
    38. Private Const GW_HWNDNEXT = 2 'GetWindow: Nächstes Fenster gleicher Ebene
    39. Public Sub demoTaskliste()
    40. Dim strTitel As String
    41. Dim wi As PWINDOWINFO
    42. #If Win64 Then
    43. Dim lngHwnd As LongLong
    44. wi.cbSize = LenB(wi)
    45. #Else
    46. Dim lngHwnd As Long
    47. wi.cbSize = Len(wi)
    48. #End If
    49. lngHwnd = GetWindow(GetDesktopWindow(), GW_CHILD) 'Erstes Kindfenster des Desktops
    50. Debug.Print " hWnd", "Titel"
    51. Debug.Print " ----", "-----"
    52. Do Until lngHwnd = 0
    53. 'Zeige das Fenster, wenn es einen Titel hat und sichtbar ist
    54. GetWindowInfo lngHwnd, wi
    55. If (wi.dwStyle And &H10CF0000) = &H10CF0000 Then
    56. 'Titel des Fensters ermitteln
    57. strTitel = String(255, vbNullChar)
    58. GetWindowTextA lngHwnd, strTitel, 255
    59. strTitel = Replace(strTitel, vbNullChar, "")
    60. Debug.Print lngHwnd, strTitel
    61. End If
    62. lngHwnd = GetWindow(lngHwnd, GW_HWNDNEXT)
    63. Loop
    64. End Sub


    Visual Basic.NET 8o
    MS-SQL
    8o
    @Cheffboss Klar, das sind keine .NET-Deklarationen.
    Finde jede Deiner Prozeduren und deren Strukturen auf PInvoke und übernimm die Deklarationen von da.
    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!
    @Cheffboss Ja und?
    Form1.frm
    Module1.bas
    den Rest kannst Du (zunächst) ignorieren.
    Die Deklarationen machst Du mit PInvoke und feddich.
    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!

    Cheffboss schrieb:

    PInvoke
    Überzeuge Dich von jedem einzelnen Befehl, dass er das tut, was er soll.
    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 habe das Problem nun behoben.
    Vielen Dank an euch alle!
    Hier habt mir gute Tipps geben.
    BIG THX

    Die Lösung findet man hier:
    https://www.file-upload.net/download-14440712/WindowsApplication7.zip.html


    Edit1:
    WindowsApplication7.zip

    Ja, der Code den habe ich umgeschrieben, auch mit Hilfe von Converter.
    Ich habe den Code als Link hochgeladen, weil ich diesen
    in andren VB-Forum auch gepostet habe.
    Jetzt habe ich diesen nochmal hochgeladen...
    Außerdem habe ich diesen Code auch, als Beispielprojekt
    hochgeladen, und warte noch auf die Veröffentlichung.
    (Showroom & Testcenter) 8-)
    Visual Basic.NET 8o
    MS-SQL
    8o

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Cheffboss“ ()

    Warum lädst Du das nicht forenintern hoch, sondern bemühst eine externe Seite, die vielleicht irgendwann Deine Datei löscht? ist doch Deine, oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.