Griser le X de fermeture d'une application tournant sous windows

cs_dadou19 Messages postés 8 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 4 octobre 2006 - 9 févr. 2005 à 23:53
cs_dadou19 Messages postés 8 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 4 octobre 2006 - 10 févr. 2005 à 08:59
Bonjour à Tous,

J'ai un logiciel (Tunemul) qui permet d'avoir Unix sous Windows, or mes users ont tendance à quitter l'appli par la croix de fermeture au lieu de sortir correctement de la cession...
tout ça génère des connexions fantome.... et bloque les connexions suivantes...

A moins de mettre des coups de latte aux users ;o),
Existe-il un moyen via Vb de griser cette croix pour cette application...???

PS :
Je connais assez bien VBA, mais je suis débutant sur VB alors please explication pour neuneu de base ;o)

Merci d'avance pour vos réponses et longue vie aux programmeurs !!!

Slts,

Dadou19

Dadou

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 févr. 2005 à 07:03
Il te faut passer par les API Windows. Mets ce code dans un module :



'fonction permettant de récupèrer un handle sur le menu système

Private Declare Function GetSystemMenu Lib "user32" ( _

ByVal hwnd As Long, _

ByVal bRevert As Long) As Long



'fonction permettant de supprimer un menu

Private Declare Function DeleteMenu Lib "user32" ( _

ByVal hMenu As Long, _

ByVal nPosition As Long, _

ByVal wFlags As Long) As Long



'déclaration des constantes privées à l'objet

Private Const MF_BYCOMMAND = &H0 'permet de trouver un menu

Private Const SC_CLOSE = &HF060 'menu de fermeture



Public Sub DisabledCloseButton(ByVal lHWndForm As Long)



'======================================================================

'Sub : DisabledCloseButton

'Date : 26/01/2005

'Auteur : DarK Sidious

'But : Permet de désactiver le bouton fermer de la feuille spécifiée

'======================================================================



'On active la routine de traitement d'erreur

On Error Resume Next

'l'erreur etant minime, on continue l'éxécution normalement



'déclaration des variables privées

Dim lMenu As Long 'stocke le handle du menu système



'on supprime le menu fermer du menu système pour
désactiver la fermeture de la feuille par les moyens classiques

Let lMenu = GetSystemMenu(lHWndForm, 0)

Call DeleteMenu(lMenu, SC_CLOSE, MF_BYCOMMAND)



End Sub





Ensuite, il te suffit d'appeler cette fonction dans le Form_Load de tes
feuilles dont tu veux désactiver la croix de fermeture de cette façon :



Private Form_Load()



Call DisabledCloseButton(Me.hWnd)



End Sub

DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
0
cs_dadou19 Messages postés 8 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 4 octobre 2006
10 févr. 2005 à 08:32
Merci pour ta réponse rapide DARKSIDIOUS, mais j'ai quelques questions (comme j'ai dit Dadou bcp newbee ;o) )

Des explications...STP

Donc on crée tout ça ds VB ( 6 ou VB net, c'est koi la grande diff ???)

une API concrètement c'est koi ??? une sorte d'agent qui tourne en permanence dans le système ?

A quel moment ce code va-t-il se lancer, et faire le lien avec mon application ici emul32.exe pour être exact... ??? Comment ça va se passer pour arriver à nos fins koi...???

Je sais ça peut paraître des questions connes pour ceux qui savent mais pour les nouveaux... pas évident...

Et puis je préfère avoir l'air idiot une fois et apprendre, que de rien dire ou acquiesser bêtement et ne rien capter, chacun son opinion !!!

J'attends la suite avec impatience
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 févr. 2005 à 08:42
Tu as bien raison de demander des explications : c'est comme cà qu'on progresse !



Alors : ce code est écrit pour fonctionner sous VB 6, et ca m'étonnerais fort qu'il marche sous VB.NET !

La différence entre VB6 et VB.NET, en caricaturant : VB6 est un
dinosaure, il est vieux, plus mis à jour (en théorie) par microsoft, et
est amené à disparaître. VB.NET est très lourd (obligation d'installer
un Framework de 20 Mo pour le moindre programme !) et je n'y suis pas
passé à cause de cà !



Une API est une fonction système contenue dans les dll de windows
telles que GDI32.dll ou User32.dll par exemple. Elles sont donc
compatibles avec toutes les versions de Windows (en théorie, reste à
voir ce qui va se passer avec longhorn !) Ce sont des fonctions écrites
en C qui permettent d'être appellée par des langages de programmation
divers. Elles permettent entre autre à augmenter les possibilités du
VB, comme ici ;)



Ce code va se lancer lorsque tu l'appelle. Donc si tu appelle la
fonction dans le Form_Load de tes feuilles comme je l'ai indiqué, la
fonction va se lancer à chaque chargement d'une feuille. Cette fonction
permet de récupèrer un identifiant du menu système "fermeture" et le
supprime, ce qui a pour effet de désactiver en même temps le bouton
fermer de la feuille.


DarK Sidious

Administrateur et reponsable VB/API du site www.ProgOtoP.com
0
cs_dadou19 Messages postés 8 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 4 octobre 2006
10 févr. 2005 à 08:59
Ah là je vais mieux ;o)

Il me faut donc faire joujou avec vb 6

Si j'ai pigé, l'api qui s'occupe du chargement des logiciels de windows va regarder ce bout de code à chaque fois qu'un programme va se lancer...

Mon application (Emul32.EXE) doit être dans le formload, (comment le mettre, un argument ?) si un programme lancé est dans la liste de ce formload, il va lancer la routine de blocage de la croix de fermeture, sinon il le laissera tranquille...

D'après ton post précédent, il y aurait un formload pour chaque application, comment ça se passe au juste, bref je crois qu'il me faut savoir un peu plus les bases du VB "pure" ça pourra aider ;o)
0
Rejoignez-nous