Findwindow Classename By Windowname?

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Findwindow Classename By Windowname?

    Hallo ich habe ein kleines Problem.

    Ich suche mit Findwindow Und FindwindowEX Unterfenster soweit so gut.

    Mein Problem ist paar diese Fenster haben nur eine ClassenName, diser ändert sich ständig, grade Wen man ein andern Windows Version Verwendet.

    Nun Habe ich die haupt Fenster Die ich Gotseidank Per Windowname Immer erreiche.

    VB.NET-Quellcode

    1. hWndChild0 = CType(Win32.FindWindow(Nothing, "BrowserForm"), IntPtr)


    Nun Ist die frage Wie kann ich aus hWndChild0 Die classenName Auslesen?Dann hätte ich für FindwindowEx Immer die passende Classenname

    Dieser Ändert sich immer wider. Mal Heist die r9 Mal r10 bei ein anderen Windows heist die Windows und soweiter und sofort

    VB.NET-Quellcode

    1. hWndChild1 = CType(Win32.FindWindowEx(CInt(hWndChild0), Nothing, "WindowsForms10.Window.8.app.0.141b42a_r9_ad1", Nothing), IntPtr)



    Das hier gibt mir den windowsname, das selbe häte ich gerne für dem windowclass nur finde ich nix X/

    VB.NET-Quellcode

    1. hWndChild0 = CType(Win32.FindWindow(Nothing, "BrowserForm"), IntPtr)
    2. If Not hWndChild0 = IntPtr.Zero Then
    3. Dim SB As New Text.StringBuilder(200)
    4. Win32.GetWindowTextA(hWndChild0, SB, 200)
    5. MessageBox.Show(SB.ToString)
    6. End If

    Lg

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „seby1302“ ()

    Hi!

    Kann man sowas nicht mit "reflection" machen?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. For Each _process As Process In Process.GetProcesses
    2. If _process.MainWindowTitle = Nothing Then
    3. Else
    4. Debug.WriteLine("Window Title: " & _process.MainWindowTitle & " - Process Name: " & _process.ProcessName)
    5. End If
    6. Next
    Habe ich schon geschafft ^^



    Findet Die classname In text :thumbsup:

    VB.NET-Quellcode

    1. Friend Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As IntPtr, ByVal lpClassName As StringBuilder, ByVal nMaxCount As Integer) As Integer
    2. Dim sClassName As New Text.StringBuilder("", 256)
    3. Call Win32.GetClassName(hWndChild0, sClassName, 256)
    4. MessageBox.Show(sClassName.ToString)
    @seby1302 Warum castest Du das Funktionsergebnis immer von Integer nach IntPtr?
    Die Funktion liefert ein IntPtr zurück, also deklariere sie auch als IntPtr!
    Gugst Du auch hier:
    Andere Programme fernsteuern
    Austausch von Daten zwischen einer VB.NET-exe und einer C-DLL, 32 und 64 Bit
    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!
    @seby1302 Ich dachte, wir programmieren hier in VB.NET, nicht aber in VB6.
    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!