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

Windows Discussion :

Désactiver option menu via API


Sujet :

Windows

  1. #1
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    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 202
    Points : 9 190
    Points
    9 190
    Par défaut Désactiver option menu via API
    Bonjour,

    je suis plus un habitué du forum windev, mais je viens vers vous car je n'arrive pas à me dépatouiller de l'API EnableMenuItem.
    Je cherche à piloter une appli qui tourne sous win2000. Cette partie fonctionne. De plus, on me demande de bloquer certaines fonctions : La croix de fermeture, et les options "Fermer" et "Quitter".
    J'ai bien réussi à désactiver la croix, mais je n'arrive pas à griser (ou désactiver) les items du sous-menu "Fichier".
    Voici le code que j'utilise (en wlangage de windev) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    hWnd est un entier sans signe = SysFenHandle("Calculatrice") // handle de la fenêtre
    nMenu est un entier sans signe
    nSousMenu est un entier sans signe
    nIdItemSousMenu est un entier sans signe
    
    nMenu = API("USER32","GetMenu",hWnd)  // handle du menu
    nSousMenu = API("USER32","GetSubMenu",nMenu,0) // 1° sous menu
    nIdItemSousMenu = API("USER32","GetMenuItemID",nSousMenu,1)// 2° item du sous menu = fermer
    
    RetourFonction=API("USER32","EnableMenuItem",nSousMenu ,2,0x0401) // 4 = MF_ByPosition / 1 = MF_Grayed
    ou
    RetourFonction=API("USER32","EnableMenuItem",nSousMenu ,nIdItemSousMenu ,0x0001) // 0 = MF_BYCOMMAND
    Dans les 2 cas, pas d'erreur mais aucun résultat.
    Par contre si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RetourFonction=API("USER32","EnableMenuItem",nMenu ,2,0x0401) // 4 = MF_ByPosition / 1 = MF_Grayed
    Le sous-menu numéro 3 est bien grisé.

    Est-ce que quelqu'un peut m'aider là-dessus ?

    Merci d'avance pour vos réponses et autres idées.

    Note : si vous avez du code en c, c++ ou vb, je m'en sortirai sans problème.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    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 202
    Points : 9 190
    Points
    9 190
    Par défaut
    J'ai modifié mon code en mettant 0x0403 : 0x0400 = MF_ByPosition / 0x0001 = MF_Grayed / 0x0002 = MF_Disabled.

    Cela 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 (actif).
    Lorsque je lance une deuxième fois ma procédure, il me renvoie 3 (MF_Grayed | MF_Disabled), 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é...
    J'ai même mis un drawmenubar(hwnd), mais visuellement et fonctionnellement mon item est toujours actif.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    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 202
    Points : 9 190
    Points
    9 190
    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...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

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

Discussions similaires

  1. [WD12] API Windows désactiver option de menu
    Par frenchsting dans le forum WinDev
    Réponses: 7
    Dernier message: 23/10/2012, 15h41
  2. Réponses: 8
    Dernier message: 04/10/2012, 09h47
  3. Désactiver le menu contextuel d'un Tedit !
    Par banban54 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 27/01/2006, 13h25
  4. Réponses: 2
    Dernier message: 23/01/2006, 19h56
  5. Imprimer 2 pages ( 2*A5 ) , comment via API ?
    Par Thomad dans le forum Windows
    Réponses: 5
    Dernier message: 29/09/2005, 14h03

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