IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

FindWindowA Récupération du Handle


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut FindWindowA Récupération du Handle
    Bonjour,

    Je ne comprend rien, voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub UserForm_Initialize()
        Dim hSysMenu As Long
        Dim leHwnd As Long
     
      leHwnd = FindWindowA(vbNullString, IHM_APPORT.Caption)
      hSysMenu = GetSystemMenu(leHwnd, False)
      RemoveMenu hSysMenu, &HF010&, &H0&
     
    End Sub
    Sur un poste la fonction FindWindowA me renvoi l'handle de la fenetre sur l'autre il me renvoi 0.

    Je ne sais pas du tous pourquoi j'ai la meme version entre les 2 postes et les même bibiothèque.

    Auriez vous une idées??

    D'avance merci

  2. #2
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 30
    Par défaut Nouvelle explication
    Bonjour


    J'utilise la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     'Déclaration
    Private Const SC_CLOSE = &HF060&
    Private Const MF_BYCOMMAND = &H0&
     
    Private Declare Function GetSystemMenu Lib "user32" _
            (ByVal hwnd As Long, ByVal bRevert As Long) As Long
     
    Private Declare Function RemoveMenu Lib "user32" _
            (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
     
    Private Declare Function FindWindowA Lib "user32" _
      (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
     
    ' Fonction
    Private Sub UserForm_Initialize()
        Dim hSysMenu As Long
        Dim leHwnd As Long
        leHwnd = FindWindowA(vbNullString, IHM_APPORT.Caption)
        hSysMenu = GetSystemMenu(leHwnd, False)
        RemoveMenu hSysMenu, &HF010&, &H0&
    End Sub
    Je cherche à bloquer l'affichage de ma fenetre au centre de l'écran, sur mon poste cela fonctionne mais pas sur un autre
    poste quasiment identique l'UHM ne se bloque pas. Je ne comprend pas d'ou cela peux venir j'ai vérifier les bibiothques mais elle sont identique.

    Le problème est que sur l'autre poste la fonction "FindWindowA(vbNullString, IHM_APPORT.Caption)" renvoi zéro, pourquoi ... je sais pas...

    La je cale.

    Si des personnes peuvent m'aider se serait sympa, je peux vous envoyer le prog si vous souhaitez.

    D'avance merci.

    Je ne sais pas d'ou cela peux venir avez vous des idées.

    Cdlt.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    Je n'ai pas spécialement d'idée pour l'instant mais peut-tu lire cet article de ouskel'n'or

    Baliser le code -> Sélection du code + 1 clic sur # en mode d'édition


    ce sera déjà plus clair.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    je ne sais pas ce que tu as finalement fabriqué...

    Une suggestion, donc :

    En lieu et place de la fonction FindWindowA :

    Donne le focus à ta fenêtre (ton UserForm) et utilise la fonction GetActiveWindow

    ainsi :

    dans la partie générale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Declare Function GetActiveWindow Lib "user32" () As Long
    et dans l'évènement Initialize :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
        Dim hSysMenu As Long
        Dim leHwnd As Long
        leHwnd = GetActiveWindow
        hSysMenu = GetSystemMenu(leHwnd, False)
        RemoveMenu hSysMenu, &HF010&, &H0&
    End Sub
    Essaye (je n'ai pas mon portable avec Excel sous la main)...
    Et laisse ton ScreenUpdating à True pendant cette opération, hein ...
    et dis-nous ...

    Edit : je viens en outre de tester chez mes voisns et avec différentes versions d'Excel le tout 1er code (avec FindWindowA) ===>> aucun souci !

    J'en viens à me demander si ta fenêtre active (le UserForm) est bien celle dont le nom est IHM_APPORT (puisque tu passes comme argument IHM_APPORTCaption) ! D'ailleurs, à ce propos, tu ne commetrais pas d'erreur en remplaçant IHM_APPORT.Caption par Me.Caption !!!
    Si tu crois que tu vas pouvoir agir sur une fenêtre non active, c'est là ton erreur
    Conclusion : faut pas utiliser la vitesse supérieure si l'on ne maitrise pas celle inférieure ...

Discussions similaires

  1. [XL-2010] Récupération du Handle d'une fenêtre
    Par setepenre dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2012, 08h46
  2. Problème récupération données handles
    Par Nestotor dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 24/01/2011, 16h42
  3. Réponses: 5
    Dernier message: 13/08/2009, 11h41
  4. récupération d'un handle
    Par gdpasmini dans le forum MFC
    Réponses: 1
    Dernier message: 08/06/2006, 12h05
  5. Réponses: 5
    Dernier message: 07/03/2006, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo