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

WinDev Discussion :

API Windows désactiver option de menu [WD12]


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 563
    Par défaut API Windows désactiver option de menu
    Bonjour,

    Je suis en train de sécher sur la désactivation d'une option de menu d'une appli que j'essaye de piloter. Le but est d'empêcher l'utilisateur de quitter cette appli.

    Etape 1 : Récupérer le handle de l'appli par son nom. OK
    Etape 2 : Désactiver la croix de fermeture (cela fonctionne grâce à un code de Jurassic Pork, merci à lui )
    Etape 3 : Essayer de désactiver un item du menu. Pas d'erreur d'éxécution mais code inopérant.
    Etape 4 : Rechercher le mot "Quitter" dans le menu. Là, plantage...

    Code Etape 3 : On récupère le menu, le sous-menu et l'item du menu. Ensuite désactivation... Code inopérant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    hWnd = SysFenHandle("Calculatrice")
    nMenu est entier sans signe
    nSousMenu est entier sans signe
    nIdItemSousMenu est entier sans signe
    lpString est une chaîne
    
    nMenu = API("USER32","GetMenu",hWnd)
    nSousMenu = API("USER32","GetSubMenu",nMenu,0) // 1° sous menu
    nIdItemSousMenu = API("USER32","GetMenuItemID",nSousMenu,1)// 2° item du sous menu
    
    RetourFonction=API("USER32","EnableMenuItem",nIdItemSousMenu,0xF060,0x0011)
    Code Etape 4: Suite du code précédent. lpSting doit récupérer la chaine de l'item spécifié, 10 est la taille de la chaine, et 0x0000 est censée être l'option qui va bien (là, je n'ai pas tout compris, je crois)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RetourFonction=API("USER32","GetMenuStringA",nSousMenu,nIdItemSousMenu,&lpString,10,0x0000)
    Si quelqu'un a des pistes, merci d'avance...

  2. #2
    Membre émérite
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 615
    Par défaut
    Bonjour
    Qu'appelles-tu code inopérant ?
    Quel plantage as-tu ?
    Tu ne récupères rien du tout dans ton code étape 3 ?

    Gancau

  3. #3
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 563
    Par défaut
    J'avais oublié de mettre la ligne qui est censée griser, l'item 2 du premier sous menu (en rouge dans mon message précédent).

    Les handles des menu/sous-menu/item sont bien valorisés.
    La ligne de l'appel à l'api EnableMenuItem s'exécute (retour = vrai) mais l'item correspondant n'est pas grisé.

    Pour l'étape 4, j'ai un beau message d'erreur : mécanisme de sécurité du wlangage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Erreur à la ligne 49 du traitement...
    Vous avez appelé la fonction API.
    Une erreur système inattendue est survenue.
    Si cet incident...

  4. #4
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 563
    Par défaut
    J'ai trouvé la raison de plantage : La chaine doit être de taille fixe.
    Ca fonctionne !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LpString est une chaîne fixe sur 15
    RetourFonction=API("USER32","GetMenuStringA",nSousMenu,nIdItemSousMenu,lpString,10,0x0000)
    lpstring est une chaine qui vaut C&oller<TAB>Ctrl+V<0>.

    A partir de là, par une boucle, je vais pouvoir retrouver "Quitter" dans le menu.

    Il ne me reste plus que l'étape 3 à faire fonctionner. Je vais revérifier les types...

  5. #5
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 563
    Par défaut
    L'étape 3 fonctionne... sans fonctionner...
    Je m'explique :
    Lorsque je lance une première fois ma procédure, il me renvoie 0, ce qui est l'état initial de mon item de menu.
    Lorsque je lance une deuxième fois ma procédure, il me renvoie 3, ce qui est l'état dans lequel est mon item puisque je viens de le modifier.
    Le seul truc, c'est que mon item est toujours actif et non grisé...

  6. #6
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 563
    Par défaut
    Je n'ai pas trouvé la solution que je souhaitais, alors j'en ai utilisé une autre : je supprime les items de menu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RetourFonction = API("USER32","RemoveMenu",HandleSousMenu,PositionItem,0x0400)
    Je passe en résolu...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Désactiver option menu via API
    Par frenchsting dans le forum Windows
    Réponses: 2
    Dernier message: 23/10/2012, 11h18
  2. Comment désactiver l'option du menu de la page active
    Par pasc06 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 31/12/2008, 10h10
  3. API windows : problème menu
    Par Gregbeacher dans le forum Windows
    Réponses: 4
    Dernier message: 13/06/2007, 15h35
  4. Menu API windows
    Par .GriGri dans le forum Windows
    Réponses: 6
    Dernier message: 07/08/2006, 16h30
  5. Réponses: 3
    Dernier message: 13/06/2005, 12h05

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