Fremde Fenster Titel ändern = Pinvoke Exception

  • VB.NET

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

    Fremde Fenster Titel ändern = Pinvoke Exception

    Hallo Community,
    Ich versuche gerade dem Titel von fremden Fenster einen String hinzuzufügen, ich beziehe mich dabei auf folgendes Codebeispiel vbArchiv
    Allerdings komm beim versuchten setzten des Fensters folgende Meldung:

    VB.NET-Quellcode

    1. Ein Aufruf an die PInvoke-Funktion "TitleNote!TitleNote.Form1::SetWindowText" hat das Gleichgewicht des Stapels gestört. Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der nicht verwalteten Zielsignatur überein. Überprüfen Sie, ob die Aufrufkonvention und die Parameter der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.


    Angewendet habe ich ihn, indem ich den Fenstertitel auslese (das klappt, vom aktuell ausgewählen fenster)

    VB.NET-Quellcode

    1. Const nChars As Integer = 256
    2. Dim title As New StringBuilder(nChars)
    3. Dim hWnd As IntPtr = GetForegroundWindow()
    4. If GetWindowText(hWnd, title, nChars) > 0 Then
    5. MsgBox(title.ToString) ' Ausgabe. Anderes Beispiel | Label1.Text = title.ToString
    6. NewWindowTitle = title.ToString
    7. End If


    Diesen Wert dann dieser Variable zuweise

    VB.NET-Quellcode

    1. Public NewWindowTitle As String


    Und es dann nach dem Code von vbArchiv folgendermaßen setzte:

    VB.NET-Quellcode

    1. [Api Zweisungen]
    2. Dim nHWnd As Long
    3. Dim sTitleOld As String
    4. sTitleOld = NewWindowTitle
    5. nHWnd = FindWindow(vbNullString, sTitleOld)
    6. If nHWnd <> 0 Then
    7. SetWindowText(nHWnd, sTitleOld & " - TitleNote")
    8. End If


    Und dabei kommt die obige Pinvoke bzw. Stack Imbalance Meldung, ich hoffe ihr könnt mir helfen, Dr.G war leider nicht erfolgreiche...

    mfg paulkoch95
    "yippieh! it compiles - ship it!"
    Das heißt API.
    Wie hast Du diese Routinen deklariert?

    VB.NET-Quellcode

    1. GetForegroundWindow()
    2. GetWindowText()
    3. FindWindow()
    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!
    Alle Api s

    VB.NET-Quellcode

    1. Public Declare Function GetForegroundWindow Lib "user32" () As IntPtr
    2. Public Declare Auto Function GetWindowText Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal text As StringBuilder, ByVal count As Integer) As Integer
    3. ' Benötigte API-Funktionen
    4. Private Declare Function FindWindow Lib "user32" _
    5. Alias "FindWindowA" ( _
    6. ByVal lpClassName As String, _
    7. ByVal lpWindowName As String) As Long
    8. Private Declare Function SetWindowText Lib "user32" _
    9. Alias "SetWindowTextA" ( _
    10. ByVal hwnd As Long, _
    11. ByVal lpString As String) As Long
    "yippieh! it compiles - ship it!"
    die stehen alle hier.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <DllImport("user32.dll", SetLastError:=True)> _
    2. Private Shared Function GetForegroundWindow() As IntPtr
    3. End Function
    4. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    5. Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer
    6. End Function
    7. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    8. Private Shared Function FindWindow( _
    9. ByVal lpClassName As String, _
    10. ByVal lpWindowName As String) As IntPtr
    11. End Function
    12. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    13. Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean
    14. End Function

    Long kommt da nicht vor!
    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!