OVH Cloud OVH Cloud

Interdir 2 lancement du même objet ???

27 réponses
Avatar
LE TROLL
Bonjour,

Heu, j'ai fait un truc mais c'est pas heureux, je voudrais que quand je
lance la calculatrice, on ne puisse si elle n'est pas fermée, la relancer
une seconde fois...

If calc.exe.PrevInstance Then Exit Sub

Ça marche pas !!!

Certes, je pourrais prendre le handle, ensuite lire tous les handles, et
si existes déjà, refuser le lancement mais y a peut être plus court, on
déclarer en tant qu'objet, mais là, je ne suis vraiement pas bon...

Une idée ???

Merci, au revoir et à bientôt.
--
ng75 arobase noos.fr
------------------------------------------------------------
LE TROLL, éleveur de trolls depuis César, qui disait :
Avec une hache, celui qui tient le manche a toujours raison !

10 réponses

1 2 3
Avatar
Patrick Philippot
Bonjour,

If calc.exe.PrevInstance Then Exit Sub
Ça marche pas !!!



Ah bon? Ne me dîtes pas que vous avez tenté de compiler ça :-) . Vous
disposez d'un objet qui s'appelle calc.exe?

Certes, je pourrais prendre le handle, ensuite lire tous les
handles, et si existes déjà, refuser le lancement



Ça ne fonctionnerait pas non plus. En 32-bit, un handle n'a de sens que
pour un process donné. Il n'y a aucune chance pour qu'on le retrouve à
l'identique pointant sur le même objet dans un autre processus.

Il n'y a que l'application elle-même qui puisse décider de n'être lancée
qu'une seule fois. Quoique vous fassiez, vous ne pourrez pas empêcher
calc.exe d'être lancé par un autre moyen que votre appli. Toutefois,
pour empêcher un deuxième lancement depuis votre appli, vous pouvez
toujours utiliser partielllement la technique FindWindow décrite ici:

http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B185730

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
LE TROLL
Ah, bon... Si, si, j'ai compilé

If calc.exe.PrevInstance Then Exit Sub

Je suis con hein, c'est ce que je me dis tout le temps, ce qui me
rassure c'est que je ne suis pas le seul con, car j'en vois un autre qui me
dit:

"Ça ne fonctionnerait pas non plus. En 32-bit, un handle n'a de sens que
pour un process donné. Il n'y a aucune chance pour qu'on le retrouve à
l'identique pointant sur le même objet dans un autre processus".

Ça c'est certain!
Déjà, je n'ai pas dit de fermer toutes les calculatrice ouvertes par tous
les programme, mais seulement par mon programme.
Par contre il me semble bien qu'avec
GetForegroundWindow, GetWindowText, Function EnumWindows,
CloseHandleFindWindow ,CloseWindow

On ce résultat avec tri en liste, avec les API plus une fonction récursive:
Calculatrice01640002
Calculatrice07996704
...

Ce qui fait que si on énumère et conserve les handles et leur nom, puis
qu'on fait une recherche sur le nom, on a le handle, donc on a juste à le
fermer, donc on peut, en sachant le nom de ce qu'on recherche, fermer tous
les handles qui portent le nom recherché, la preuve je le fais (la fermeture
et le programme)!!!

Conclusion, si je suis assez con pour compiler n'importe quoi, mais il y
en a qui sont assez cons pour ne pas savoir qu'on peut fermer n'importe quel
handle avec le nom de l'application associée au handle, comme quoi, à deux
on fait une bande de cons désormais, alors je choisis d'être le roi, comme
je dis, mieux vaut être le roi des cons, qu'un con de base...
----------

"Patrick Philippot" a écrit dans le
message de news: %23$jd1C%
Bonjour,

If calc.exe.PrevInstance Then Exit Sub
Ça marche pas !!!



Ah bon? Ne me dîtes pas que vous avez tenté de compiler ça :-) . Vous
disposez d'un objet qui s'appelle calc.exe?

Certes, je pourrais prendre le handle, ensuite lire tous les
handles, et si existes déjà, refuser le lancement



Ça ne fonctionnerait pas non plus. En 32-bit, un handle n'a de sens que
pour un process donné. Il n'y a aucune chance pour qu'on le retrouve à
l'identique pointant sur le même objet dans un autre processus.

Il n'y a que l'application elle-même qui puisse décider de n'être lancée
qu'une seule fois. Quoique vous fassiez, vous ne pourrez pas empêcher
calc.exe d'être lancé par un autre moyen que votre appli. Toutefois, pour
empêcher un deuxième lancement depuis votre appli, vous pouvez toujours
utiliser partielllement la technique FindWindow décrite ici:

http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B185730

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr



Avatar
LE TROLL
En plus, ton lien n'est pas en français:

http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B185730

Je n'ai pas identifié la langue, je ne sais pas ce que c'est je ne
comprends que le grec ancien et le latin, et puis un peu le français, et ici
on est dans un forum français, en français, donc on communique et on ne lit
que du français, mais surtout pas de l'anglais (si c'en est), surtout pas,
j'ai assez des spams des américains tous les matins, pour ne pas rajouter de
l'anglais dans la journée, tiens par contre je te communique un forum qui
est très lisible où tu trouveras toutes les informations utiles à propos du
français dans les groupes "fr":

http://www.nysol.se/arabic/sida.html

---------
"Patrick Philippot" a écrit dans le
message de news: %23$jd1C%
Bonjour,

If calc.exe.PrevInstance Then Exit Sub
Ça marche pas !!!



Ah bon? Ne me dîtes pas que vous avez tenté de compiler ça :-) . Vous
disposez d'un objet qui s'appelle calc.exe?

Certes, je pourrais prendre le handle, ensuite lire tous les
handles, et si existes déjà, refuser le lancement



Ça ne fonctionnerait pas non plus. En 32-bit, un handle n'a de sens que
pour un process donné. Il n'y a aucune chance pour qu'on le retrouve à
l'identique pointant sur le même objet dans un autre processus.

Il n'y a que l'application elle-même qui puisse décider de n'être lancée
qu'une seule fois. Quoique vous fassiez, vous ne pourrez pas empêcher
calc.exe d'être lancé par un autre moyen que votre appli. Toutefois, pour
empêcher un deuxième lancement depuis votre appli, vous pouvez toujours
utiliser partielllement la technique FindWindow décrite ici:

http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B185730

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr



Avatar
Patrick Philippot
LE TROLL wrote:
Ah, bon... Si, si, j'ai compilé



Par curiosité, j'aimerais bien voir le bout de code qui crée cet objet
calc.exe. Juste pour me coucher moins c.. ce soir. Puisque c.. il y a.

Je suis con hein,



Si c'est vous qui l'affirmez.

Ça c'est certain!
Déjà, je n'ai pas dit de fermer toutes les calculatrice ouvertes par
tous les programme, mais seulement par mon programme.
Par contre il me semble bien qu'avec
GetForegroundWindow, GetWindowText, Function EnumWindows,
CloseHandleFindWindow ,CloseWindow



Vous parliez de handle d'instance (PrevInstance). Votre message ne fait
pas apparaître clairement que vous étiez passé du coq à l'âne, c-à-d à
l'énumération des handles de fenêtres.

D'ailleurs ce thread ne fait apparaître clairement qu'une seule chose:
vous êtes incroyablement mal embouché. C'est fascinant. J'aurais dû m'en
souvenir. Cette aigreur permanente est probablement due à des troubles
stomacaux (attention à l'ulcère), à une paranoïa exacerbée ou à une
misanthropie galopante causée par quelque déception sentimentale ou
professionnelle. Je compatis.

et ici on est dans un forum français, en français, donc on communique
et on ne lit que du français,



Désolé, je n'avais pas noté que vous exprimiez dans cette langue. Le
sabir que vous utilisez ne correspond pas à l'idée que je me fais de la
langue française.

----

Bon, nous allons passer à autre chose. Il va falloir que je pense à
mettre un filtre sur les messages de certains individus, ça sera bon
pour ma tension artérielle. Si vous insistez un peu dans l'agression
verbale et les injures, je vais peut-être envisager exceptionnellement
des mesures plus définitives, d'ailleurs.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
LE TROLL
C'est quoi des mesures plus définitives ???

- Déjà tu te fous de ma gueule en disant "Ah seigneur, il a compilé ça"...
Alors j'aime pas du tout les cons comme toi qui se foutent de ma gueule
parce que je ne sais pas déclarer un type d'objet !!!

- Déjà tu piges pas ma question...
- Déjà tu ne sais pas récupérer les handles des applications, et tu dis que
ce n'est pas possible de fermer en retrouvant le handle...
- Et puis en plus t'es même pas foutu de répondre, j'attends encore...
- Et puis tu te fous de ma gueule en m'envoyant un texte en anglais, et
pourquoi pas en arabe aussi...
- Et en plus t'es MVP, j'avais pas vu! faut dire que tu ne participes pas
beaucoup... Ils t'ont mis pour boucher un trou ou quoi, t'es le plus idiot
des MVP, je déconne pas, généralement les autres répondent correctement...

TIENS J AI RECOPIE TA REPONSE POUR QU ON VOIT BIEN QUE T ES CON:
"Il n'y a que l'application elle-même qui puisse décider de n'être lancée
qu'une seule fois. Quoique vous fassiez, vous ne pourrez pas empêcher
calc.exe d'être lancé par un autre moyen que votre appli."

ECOUTEZ CA
Il n'y a que l'application elle-même qui puisse décider de n'être lancée
qu'une seule fois
QU IL DIT, mon cul c'est du poulet, suffit de rechercher le nom de tous les
handles et de supprimer celui désiré à partir de son numéro, T ES UN "GROS"
CON DE DIRE DES CONNERIES COMME CA EN ETANT EN PLUS MVP...

ALORS TU SOUTIENS CE QUE TU AS DIT, A SAVOIR:
Il n'y a que l'application elle-même qui puisse décider de n'être lancée
qu'une seule fois
???

JE POURSUIS, L AUTRE PHRASE EST ENCORE PLUS CONNE, EN RELATION AVEC LA
PREMIERE, LISEZ CA!!!
"Quoique vous fassiez, vous ne pourrez pas empêcher calc.exe d'être lancé
par un autre moyen que votre appli."
???

CA N A RIEN A VOIR AVEC MA QUESTION, COMPLETEMENT A COTE DE LA PLAQUE LE
MEC, NEANMOINS IL SUFFIT DE METTRE UN PROGRAMME RESIDENT, DE RECHERCHER LES
HANDLES PAR NOM ET DE LES FERMER POUR INTERDIR A TOUTE APPLICATION DE SE
LANCER D ICI OU D AILLEURS, UNE OU PLUSIEURS FOIS...

Et toi tu dis tout le contraire!!!

Donc tu dis plein de conneries, t'es un incapable, et quand en plus tu te
fous de ma gueule parce que je ne sais pas, et puis qu'en plus tu me réponds
en anglais dans un forum "fr", et puis qu'en plus tu fais tout ça pour ne
fournir aucune réponse exploitable, et puis qu'en plus tu me menaces ("je
vais peut-être envisager exceptionnellement des mesures plus définitives,
d'ailleurs.), qu'il dit... Ben faut pas abuser, ça mérite un minimum
d'invectives usuelles!

Alors on ne peut retrouver une application et la fermer sans l'avoir
ouverte, tu maintiens ?

Et tes "mesures définitives", c'est quoi là menace là ?

-----------

"Patrick Philippot" a écrit dans le
message de news: Oa5s44%
LE TROLL wrote:
Ah, bon... Si, si, j'ai compilé



Par curiosité, j'aimerais bien voir le bout de code qui crée cet objet
calc.exe. Juste pour me coucher moins c.. ce soir. Puisque c.. il y a.

Je suis con hein,



Si c'est vous qui l'affirmez.

Ça c'est certain!
Déjà, je n'ai pas dit de fermer toutes les calculatrice ouvertes par
tous les programme, mais seulement par mon programme.
Par contre il me semble bien qu'avec
GetForegroundWindow, GetWindowText, Function EnumWindows,
CloseHandleFindWindow ,CloseWindow



Vous parliez de handle d'instance (PrevInstance). Votre message ne fait
pas apparaître clairement que vous étiez passé du coq à l'âne, c-à-d à
l'énumération des handles de fenêtres.

D'ailleurs ce thread ne fait apparaître clairement qu'une seule chose:
vous êtes incroyablement mal embouché. C'est fascinant. J'aurais dû m'en
souvenir. Cette aigreur permanente est probablement due à des troubles
stomacaux (attention à l'ulcère), à une paranoïa exacerbée ou à une
misanthropie galopante causée par quelque déception sentimentale ou
professionnelle. Je compatis.

et ici on est dans un forum français, en français, donc on communique et
on ne lit que du français,



Désolé, je n'avais pas noté que vous exprimiez dans cette langue. Le sabir
que vous utilisez ne correspond pas à l'idée que je me fais de la langue
française.

----

Bon, nous allons passer à autre chose. Il va falloir que je pense à mettre
un filtre sur les messages de certains individus, ça sera bon pour ma
tension artérielle. Si vous insistez un peu dans l'agression verbale et
les injures, je vais peut-être envisager exceptionnellement des mesures
plus définitives, d'ailleurs.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr



Avatar
Olivier Pont [MS]
> Alors on ne peut retrouver une application et la fermer sans l'avoir
ouverte, tu maintiens ?



Bonjour Le Troll,

"La fermer sans l'avoir ouverte"... ça n'a pas trop l'air d'être ta
spécialité en effet.
Tu n'en fais pas un peu trop là ?

Moi j'dis ça... c'est juste pour qu'on puisse continuer à rigoler un peu,
hein ! ;-))
Allez, bon VB !

Olivier
Avatar
LE TROLL
Lol, il faut toujours en faire davantage pour en avoir un peu :o)
-------

"Olivier Pont [MS]" a écrit dans le message
de news: %23yxZN7$
Alors on ne peut retrouver une application et la fermer sans l'avoir
ouverte, tu maintiens ?



Bonjour Le Troll,

"La fermer sans l'avoir ouverte"... ça n'a pas trop l'air d'être ta
spécialité en effet.
Tu n'en fais pas un peu trop là ?

Moi j'dis ça... c'est juste pour qu'on puisse continuer à rigoler un peu,
hein ! ;-))
Allez, bon VB !

Olivier



Avatar
Guy DETIENNE
Salut ;O)

Vois la source postée ici - conçue par mes soins ;O)
DÉTECTION D'UNE INSTANCE - RESTAURATION DE L'ANCIENNE INSTANCE
http://www.vbfrance.com/code.aspx?ID44

Ou fais un copier-coller du code ci-dessous ;

'A COLLER DANS UN MODULE
'
'DECLARATION API
Declare Function OpenIcon Lib "user32" (ByVal hwnd As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As
Long) As Long
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As
Long

'DECLARATION CONSTANTE
Public Const GW_HWNDPREV = 3

Sub ActivatePrevInstance()

Dim OldTitle As String
Dim PrevHndl As Long
Dim result As Long

'Sauve le titre de l'applciation.
OldTitle = App.Title

'Renomme le titre de l'application, ainsi FindWindow
'ne trouvera pas l'instance de cette application.
App.Title = "unwanted instance"

'Tentative d'obtention du handle de la fenêtre utilisant le nom de
classe de VB4.
PrevHndl = FindWindow("ThunderRTMain", OldTitle)

'Vérification si le handle a été trouvé
If PrevHndl = 0 Then
'Tentative d'obtention du handle de la fenêtre utilisant le nom
de classe de VB5.
PrevHndl = FindWindow("ThunderRT5Main", OldTitle)
End If

'Vérification si le handle a été trouvé
If PrevHndl = 0 Then
'Tentative d'obtention du handle de la fenêtre utilisant le nom de
classe de VB6.
PrevHndl = FindWindow("ThunderRT6Main", OldTitle)
End If

'Vérification si le handle a été trouvé
If PrevHndl = 0 Then
'Aucune instance précédente trouvée.
Exit Sub
End If

'Obtention du handle de la fenêtre précédente.
PrevHndl = GetWindow(PrevHndl, GW_HWNDPREV)

'Restaure le programme.
result = OpenIcon(PrevHndl)

'Active l'application.
result = SetForegroundWindow(PrevHndl)

'Termine l'application.
End
End Sub



"LE TROLL" <le a écrit dans le message de news:


Bonjour,

Heu, j'ai fait un truc mais c'est pas heureux, je voudrais que quand je
lance la calculatrice, on ne puisse si elle n'est pas fermée, la relancer
une seconde fois...

If calc.exe.PrevInstance Then Exit Sub

Ça marche pas !!!

Certes, je pourrais prendre le handle, ensuite lire tous les handles,
et si existes déjà, refuser le lancement mais y a peut être plus court, on
déclarer en tant qu'objet, mais là, je ne suis vraiement pas bon...

Une idée ???

Merci, au revoir et à bientôt.
--
ng75 arobase noos.fr
------------------------------------------------------------
LE TROLL, éleveur de trolls depuis César, qui disait :
Avec une hache, celui qui tient le manche a toujours raison !



Avatar
Zoury
> En plus, ton lien n'est pas en français:




http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B185730



tu savais que la traduction française des textes de la KB était désormais
disponible en un seul clique de souris.. ? regarde dans le menu "Article
Translations" en haut à droite de la page..


--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
LE TROLL
Salut, ouais, je sais, ça traduit mais ce n'est pas toujours
formidable :o)
En plus, je ne connais pas, alors juste un hyperlien quand c'est
compliqué, c'est quasiment inutile, c'est bon que pour les trucs simples,
sinon il faut des explications de celui qui répond...
------

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: eqISxIA%
En plus, ton lien n'est pas en français:




http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B185730



tu savais que la traduction française des textes de la KB était désormais
disponible en un seul clique de souris.. ? regarde dans le menu "Article
Translations" en haut à droite de la page..


--
Cordialement
Yanick
MVP pour Visual Basic





1 2 3