Lokrakor
Messages postés5Date d'inscriptionlundi 17 octobre 2011StatutMembreDernière intervention28 octobre 2011
-
26 oct. 2011 à 15:47
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018
-
28 oct. 2011 à 13:00
Bonjour à tous,
Je suis en train de développer un outil Excel et j'ai un problème avec la fonction "keybd_event"...
Je souhaiterais que lors du lancement de l'outil (après que l'utilisateur ait activé les macros) toutes les fenêtre se ferment et la userform se lance.
Tout se passe très bien grâce à la fonction "keybd_event" sauf dans certains cas, en particulier lorsque pas mal de fenêtres / logiciels / Pages internet... sont ouvertes.
Je pense à un problème de mémoire insuffisante pour tout traiter mais j'ai essayé pas mal de trucs et je ne sais pas si cela peut être corrigé ou si il existe une autre fonction qui éviterait cela!
Si vous pouvez m'aider je suis preneur! ;) Merci d'avance!
Je vous écris par la suite le code que j'utilise :
' Déclaration des variables pour affichage du bureau avant de lancer l'outil
Private Declare Sub keybd_event Lib "user32" ( _
ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)
Const KEYEVENTF_KEYUP = &H2
Const VK_LWIN = &H5B
Private Sub CommandButton1_Click()
Application.Visible = False
' Réduire toutes les fenêtres et faire apparaitre la bureau (simulation du raccourci clavier Windows + M)
' 77 is the character code for the letter 'M'
Call keybd_event(VK_LWIN, 0, 0, 0)
Call keybd_event(77, 0, 0, 0)
Call keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0)
Accueil.Show
End Sub
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 26 oct. 2011 à 17:03
Bonjour,
Déjà : nous ne voyons pas trop la nécessité d'utiliser cette fonction pour atteindre celà !
Si tu as des fenêtres à fermer, ferme-les donc en tuant leur processus (et en en étant totalement responsable, notamment du choix de ce que tu "zigouilles"), mais pas en simulant ainsi des touches !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Lokrakor
Messages postés5Date d'inscriptionlundi 17 octobre 2011StatutMembreDernière intervention28 octobre 2011 28 oct. 2011 à 09:34
Je me suis peut être mal exprimé puisque je ne souhaiterais pas fermer les fenetres mais les REDUIRE!
En fait, pour un soucis de clarté j'aimerais que l'outil se lance après être revenu automatiquement sur le bureau, d'où l'intéret du raccourci "Windows + M"
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 28 oct. 2011 à 09:52
Ma réponse est dans ce cas la même que celle que je t'avais déjà faite : ===>> ne pas agir sur les fenêtres à coup de simulations de touches, mais en utilisant leu(r handle.
Pour les réduire, tu peut par exemple utiliser la fonction SetWindowPlacement de la librairie user32 de l'API de Windows (apliquée au hwnd de la fenêt're à réduire).
Ceci étant dit, je suis assez surpris de ce que tu nous dis maintenant (souhait de réduire seulement et non plus de fermer), alors que dans ton premier message, on peut lire ceci :
Je pense à un problème de mémoire insuffisante
La réduction d'une fenêtre ne modifie rien à l'occupation en mémoire !
Pas vraiment limpide, ta demande.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Elle te montre comment, sous VB.Net, utiliser la fonction SetWindowPlacement pour une fenêtre connue.
N'en prends pas tout : le code dont il s'agit part du titre d'une fenêtre pour en rechercher le handle et l'utiliser ensuite.
Toi, part du seul handle, directement.
Il te faudra donc énumérer les fenêtres ouvertes (leur handle) et agir dessus
Il te faut donc utiliser (pour l'énumération) la fonction EnumWindows (également de la librairie User32).
La fonction Isiconic de l'api de Windows, utilisée dans cette énumération, te permettra de savoir si une fenêtre est déjà réduite (pour ne pas réduire ce qui l'est déjà)
Voilà.
Yapluka
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 28 oct. 2011 à 10:28
Je ne connait pas la fonction que tu as cité et je ne sais pas comment l'utiliser, pourrais-tu m'expliquer un peu plus?
Comment on pourrait le programmer par exemple?
Là, je te laisse faire ! (tu as un source, qui contient l'essentiel) et tu as par ailleurs le site de ALL-API.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 28 oct. 2011 à 10:50
Voici le Site de All-API. Tu y trouveras les fonctions dont je t'ai parlé, assorties d'exemples d'utilisation.
Il te faudra les combiner. Et ce devra être à toi de le faire.
S'il s'agit maintenant vraiment d'un problème de mémoire à rendre disponible, il ne suffira pas de réduire ! Il faudra véritablement fermer !
Fermer des applications ouvertes est cependant à mon sens une opération à ne pas lancer systématiquement et elle pourrait t'attirer les foudres des utilisateurs (c'est tellement évident !). C'est la raison pour laquelle je ne participerai certes pas à l'élaboration de ton mécanisme "dictatorial"
Je t'invite en ce qui me concerne à procéder d'une manière correspondant mieux àç l'éthique générale : ===>> inviter l'utilisateur à procéder lui-même à ces fermetures, en parfaite connaissance de cause (et notamment en sauvegardant ce qu'il veut sauvegarder).
Voilà !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 28 oct. 2011 à 11:35
Mais d'autres questions se posent par ailleurs, compte tenu notamment des performances des machines, de nos jours.
En vrac :
- Quelle est la mémoire vive sur ta machine ?
- Quelle est la mémoire disponible avant lancement de ton appli ?
- Que devient cette mémoire disponible (sans rien fermer) immédiatement après lancement de ton appli ?
Question subsidiaire : le message "mémoire insuffisante" apparaît-il immédiatement ou en cours d'utilisation de ton appli ?
Voilà ce dont je me préoccuperais, personnellement, avant de fermer le clapet de toutes les applis autres que la mienne. Car il n'est pas impossible que le coeur réel du problème se trouve dans la tienne, d'appli
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Lokrakor
Messages postés5Date d'inscriptionlundi 17 octobre 2011StatutMembreDernière intervention28 octobre 2011 28 oct. 2011 à 12:03
Mais normalement cela ne devrait pas uiliser la mémoire comme ce que tu as dit précédemment puisque je ne cherche seulement qu'à réduire les fenêtre et non à les fermer?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 28 oct. 2011 à 13:00
Euh ...
Je crois que l'on est entré là dans une espèce de langage de sourds ...
Relis tout très attentivement, s'il te plait.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient