none
Erreur avec Visual Studio Community 2015 et GetClassName RRS feed

  • Question

  • Bonjour,

    Je repose ma question du code générant une erreur (je n'ai toujours pas trouvé de solution)

     Dim WinWnd As Long, RetVal As Long, lpClassName As String
                WinWnd = FindWindow(vbNullString, "Enregistrer sous")
                lpClassName = Space(256)
                RetVal = GetClassName(WinWnd, lpClassName, 256)

    Erreur: pInvokeStackImbalance occured
     error bc30451'$Exception is not declared. It may be inacessible due to its protection level

    WinWnd = nombre à 17 chiffres

    Merci de votre aide


    lionyz

    mardi 3 mai 2016 08:25

Réponses

  • FindWindow renvois un Long...

    Essayez les définitions directes :

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
         ByVal lpClassName As String, _
         ByVal lpWindowName As String) As IntPtr
    End Function
    
    <DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowByClass( _
         ByVal lpClassName As String, _
         ByVal zero As IntPtr) As IntPtr
    End Function
    
    <DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowByCaption( _
         ByVal zero As IntPtr, _
         ByVal lpWindowName As String) As IntPtr
    End Function

    Pouvez-vous essayer de faire un test avec une application et le code:
        Dim nWnd As IntPtr
        Dim ceroIntPtr As New IntPtr(0)
        Dim Wnd_name as String
    
        Wnd_name= "Nom d'application"
        nWnd = FindWindow(Nothing, Wnd_name)
        ' Résultats
        If nWnd.Equals(ceroIntPtr) Then
            MsgBox("Application ne tourne pas")
        Else
            MsgBox("Application tourne")
        End If


    • Marqué comme réponse lionyz jeudi 5 mai 2016 19:29
    jeudi 5 mai 2016 09:21
  • Bonjour,
    Ce code fonctionne sans erreur avec Visual Studio Community 2015
    Je n'ai pas eu besoin de la 3ème fonction (Private Shared Function FindWindowByCaption)
    J'ai ajouté 'Imports System.Runtime.InteropServices' pour définir 'DllImport'
    Merci de votre aide   

    lionyz

    • Marqué comme réponse lionyz jeudi 5 mai 2016 19:32
    jeudi 5 mai 2016 19:31

Toutes les réponses

  • Pourriez-vous essayer avec:

    'Vérifiez que votre définition de fonction est:
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    
    'Dans votre code utilisez:
    Dim LogicielUtilise as String = "Nom du Logiciel" 'Ou remplacer par Nothing équivallent à "*"
    Dim NomDeLaSousForme as String = "Enregistrer sous"
    WinWnd = FindWindow(LogicielUtilise ,NomDeLaSousForme)
    If WinWnd isnot Nothing then
    
    EndIf

    mardi 3 mai 2016 09:41
  • Bonjour,

    J'ai tout vérifié mais l'erreur persiste.

    Est-ce normal que WinWnd soit un nombre de 17 chiffres ?

    Merci de votre aide


    lionyz

    mardi 3 mai 2016 16:52
  • FindWindow renvois un Long...

    Essayez les définitions directes :

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow( _
         ByVal lpClassName As String, _
         ByVal lpWindowName As String) As IntPtr
    End Function
    
    <DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowByClass( _
         ByVal lpClassName As String, _
         ByVal zero As IntPtr) As IntPtr
    End Function
    
    <DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindowByCaption( _
         ByVal zero As IntPtr, _
         ByVal lpWindowName As String) As IntPtr
    End Function

    Pouvez-vous essayer de faire un test avec une application et le code:
        Dim nWnd As IntPtr
        Dim ceroIntPtr As New IntPtr(0)
        Dim Wnd_name as String
    
        Wnd_name= "Nom d'application"
        nWnd = FindWindow(Nothing, Wnd_name)
        ' Résultats
        If nWnd.Equals(ceroIntPtr) Then
            MsgBox("Application ne tourne pas")
        Else
            MsgBox("Application tourne")
        End If


    • Marqué comme réponse lionyz jeudi 5 mai 2016 19:29
    jeudi 5 mai 2016 09:21
  • Bonjour,
    Ce code fonctionne sans erreur avec Visual Studio Community 2015
    Je n'ai pas eu besoin de la 3ème fonction (Private Shared Function FindWindowByCaption)
    J'ai ajouté 'Imports System.Runtime.InteropServices' pour définir 'DllImport'
    Merci de votre aide   

    lionyz

    • Marqué comme réponse lionyz jeudi 5 mai 2016 19:32
    jeudi 5 mai 2016 19:31