OVH Cloud OVH Cloud

PostMessage ...

26 réponses
Avatar
scraper
bonjour à tous !

un truc bizarre avec l'API PostMessage et FindWindow

l'API-Guide donne à peu près ceci :

Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String
'Search the window
WinWnd = FindWindow(vbNullString, Ret)
If WinWnd = 0 Then
MsgBox "Couldn't find the window ..."
Else
MsgBox WinWnd
End If
'Show the window
ShowWindow WinWnd, SW_SHOWNORMAL
'Create a buffer
lpClassName = Space(256)
PostMessage WinWnd, WM_CLOSE, 0&, 0&


(j'ai rajouté le msgbox WinWnd pour être certain que mon problème était pas
lié à la détection de la fenêtre)

or, je détecte bien la fenêtre que je veux fermer, mais le postmessage ne
fonctionne pas ??

il me semble que c'est la valeur de WinWND qui est pas correcte ...
(ou ce que je souhaite faire n'est pas bon !)

si je récupère le handle de la fenêtre avec Window Analyser, et que je
remplace WinWnd par cette valeur, là, ça fonctionne !!

bref, je pateauge ....



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

10 réponses

1 2 3
Avatar
Zoury
Salut Scraper! :O)

l'API-Guide donne à peu près ceci :



en fait tu as omit une ligne TRÈS importante provenant de l'exemple de l'api
guide, soit :
'***
Ret = InputBox("Enter the exact window title:" + Chr$(13) + Chr$(10) +
"Note: must be an exact match")
'***

Étant donée que Ret reste vide ("") FindWindow() te renvoit la première
fenêtre qu'il trouve et non pas la fenêtre que tu cherches... Affecte le nom
de la fenêtre recherchée dans la variable Ret avant d'appeler FindWindow().

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Christian HUBERT-HUGOUD- Xtrem7
Bin oui :

Je me demande ce que peut te renvoyer WinWnd = FindWindow(vbNullString, Ret)

Ret devrait contenir le Caption de la Window que tu cherches.

Sinon le PostMessage fonctionne très bien. :

PostMessage Me.hwnd, WM_CLOSE, 0, 0

Christian


"scraper" a écrit dans le message de
news:
bonjour à tous !

un truc bizarre avec l'API PostMessage et FindWindow

l'API-Guide donne à peu près ceci :

Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As


String
'Search the window
WinWnd = FindWindow(vbNullString, Ret)
If WinWnd = 0 Then
MsgBox "Couldn't find the window ..."
Else
MsgBox WinWnd
End If
'Show the window
ShowWindow WinWnd, SW_SHOWNORMAL
'Create a buffer
lpClassName = Space(256)
PostMessage WinWnd, WM_CLOSE, 0&, 0&


(j'ai rajouté le msgbox WinWnd pour être certain que mon problème était


pas
lié à la détection de la fenêtre)

or, je détecte bien la fenêtre que je veux fermer, mais le postmessage ne
fonctionne pas ??

il me semble que c'est la valeur de WinWND qui est pas correcte ...
(ou ce que je souhaite faire n'est pas bon !)

si je récupère le handle de la fenêtre avec Window Analyser, et que je
remplace WinWnd par cette valeur, là, ça fonctionne !!

bref, je pateauge ....



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper




Avatar
scraper
Salut à Zoury qui dans son post
news:
nous a écrit/répondu :

Salut Scraper! :O)

l'API-Guide donne à peu près ceci :



en fait tu as omit une ligne TRÈS importante provenant de l'exemple
de l'api guide, soit :



non ...

je ne l'ai pas insérée parb souci de clarté ... raté, apparemment ! :-)

je récupère le titre de la fenêtre en lisant une valeur dans le registre !

j'ai quand même bien précisé que ça venait pas de FindWindows, puisque je
m'en assure grâce à MsgBox WinWnd ;-)

plus précisément, en amont, j'ai :

Ret= GetString(HKEY_CURRENT_USER, "MaClé", "MaValeur")
If Ret = "" Then Ret = "Mon Titre"

ensuite, le reste du code ....

donc, Ret est bien défini, et je me retrouve avec la même erreur :-)

Affecte le nom de la fenêtre recherchée dans la variable
Ret avant d'appeler FindWindow().



c'est bien ce que je faisais ... :-(

mais je dois avoir comis une erreur



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Zoury
> j'ai quand même bien précisé que ça venait pas de FindWindows, puisque je
m'en assure grâce à MsgBox WinWnd ;-)



?!?

je crois que je t'ai perdu... si le problème ne vient pas de FindWindow()
alors comment expliques-tu ceci :

il me semble que c'est la valeur de WinWND qui est pas correcte ...
(ou ce que je souhaite faire n'est pas bon !)



si je récupère le handle de la fenêtre avec Window Analyser, et que je
remplace WinWnd par cette valeur, là, ça fonctionne !!



Je comprend, selon ta description, que WinWnd ne contient pas la bonne
valeur après l'appel de FindWindow() (cette valeur n'est pas la même que
Window Analyser)... je suis dans le champs ? :O)

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Stéphane Santon
Bonjour,

1.
Window Analyser renvoie-t-il la même valeur que trouve ton FindWindow ?

2.
Si non, la variable Ret de type String est-elle bien convertie en
AnsiString (à zéro terminal) par la library WinAPi de Visual Basic ?
(jamais appelé l'API sous VB )

scraper a écrit :
Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String



WinWnd = FindWindow(vbNullString, Ret)



ShowWindow WinWnd, SW_SHOWNORMAL



lpClassName = Space(256)
PostMessage WinWnd, WM_CLOSE, 0&, 0&



or, je détecte bien la fenêtre que je veux fermer, mais le postmessage ne
fonctionne pas ??

il me semble que c'est la valeur de WinWND qui est pas correcte ...
(ou ce que je souhaite faire n'est pas bon !)

si je récupère le handle de la fenêtre avec Window Analyser, et que je
remplace WinWnd par cette valeur, là, ça fonctionne !!



--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime
Avatar
scraper
Salut à Zoury qui dans son post
news:
nous a écrit/répondu :

j'ai quand même bien précisé que ça venait pas de FindWindows,
puisque je m'en assure grâce à MsgBox WinWnd ;-)



?!?

je crois que je t'ai perdu... si le problème ne vient pas de
FindWindow() alors comment expliques-tu ceci :



ooops, désolé !

je voulais dire évidemment "ça ne vient pas de Ret" :-)

désolé pour ce lapsus qui en dit long sur mon désarroi :-)

il me semble que c'est la valeur de WinWND qui est pas correcte ...
(ou ce que je souhaite faire n'est pas bon !)



si je récupère le handle de la fenêtre avec Window Analyser, et que
je remplace WinWnd par cette valeur, là, ça fonctionne !!



Je comprend, selon ta description, que WinWnd ne contient pas la bonne
valeur après l'appel de FindWindow() (cette valeur n'est pas la même
que Window Analyser)... je suis dans le champs ? :O)



plein pile dedans !

et maintenant, je fais quoi ? lol



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
scraper
Salut à Stéphane Santon qui dans son post
news:
nous a écrit/répondu :

Bonjour,

1.
Window Analyser renvoie-t-il la même valeur que trouve ton FindWindow
?



eh non, c'est bien là le hic !

désolé .. je m'aperçois que j'ai pas été foutu de vous expliquer clairement
mon problème ... c'est dire le bordel qui règne dans ma tête ! lol


2.
Si non, la variable Ret de type String est-elle bien convertie en
AnsiString (à zéro terminal) par la library WinAPi de Visual Basic ?
(jamais appelé l'API sous VB )



tu veux dire si j'y colle un VbNullString derrière ?

j'ai essayé en effet, et ça n'a rien changé !

par aileurs, c'est pas indiqué dans API Guide ....

je sais vraiment pas trop quoi faire !

je vais essayer avec le notepad pour coller à l'exemple de API Guide :-)

merci de ton aide ...




--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
Avatar
Stéphane Santon
Bonjour,

scraper a écrit :
> Je comprend, selon ta description, que WinWnd ne contient pas la bonne
> valeur après l'appel de FindWindow() (cette valeur n'est pas la même
> que Window Analyser)... je suis dans le champs ? :O)

plein pile dedans !
et maintenant, je fais quoi ? lol



OK

* T'es-tu assuré que ta fenêtre est une fenêtre de premier niveau (les
autres sont ignorées) ?

--
** Anti-Spam : ajouter [usenet] dans l'objet pour ne pas être rejeté.

Cordialement, Stéphane *** http://www.team-santonum.com
Loisirs, nature, arts, technologie : accueil en Charente-Maritime
Avatar
Zoury
voici un p'tit test.. vérifie les déclarations d'APIs attentivement car
l'api-guide fait une erreur sur SendMesssage() dans plusieurs de ses
exemples

ouvre bloc-note
essai ce code :
'***
Option Explicit

Private Declare Function SendMessage _
Lib "user32" _
Alias "SendMessageA" _
( _
ByVal hWnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByRef lParam As Any _
) As Long

Private Declare Function FindWindow _
Lib "user32" _
Alias "FindWindowA" _
( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long

Private Const WM_CLOSE As Long = &H10

Private Sub Main()

Dim sTitle As String
Dim hWnd As Long

' doit être identique au nom de la fenetre (case insensitive)
sTitle = "Sans titre - Bloc-notes"
hWnd = FindWindow(vbNullString, sTitle)
Call SendMessage(hWnd, WM_CLOSE, 0, ByVal 0&)

End Sub
'***

bloc-note devrait fermer avec ce code...
assure toi que le chiffre renvoyé par FindWindow() correspond à celui de
Window Analyser (assure toi aussi qu'ils soient dans la meme base... ie.
hexa, octal ou decimal)

si l'exemple fonctionne et que ton code à les mêmes déclarations, assure toi
que la valeur Ret que tu vas chercher dans les registres soit *identique* au
nom du formulaire..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
"scraper" a écrit dans le message de
news:
Salut à Zoury qui dans son post
news:
nous a écrit/répondu :

>> j'ai quand même bien précisé que ça venait pas de FindWindows,
>> puisque je m'en assure grâce à MsgBox WinWnd ;-)
>
> ?!?
>
> je crois que je t'ai perdu... si le problème ne vient pas de
> FindWindow() alors comment expliques-tu ceci :

ooops, désolé !

je voulais dire évidemment "ça ne vient pas de Ret" :-)

désolé pour ce lapsus qui en dit long sur mon désarroi :-)
>
>> il me semble que c'est la valeur de WinWND qui est pas correcte ...
>> (ou ce que je souhaite faire n'est pas bon !)
>
>> si je récupère le handle de la fenêtre avec Window Analyser, et que
>> je remplace WinWnd par cette valeur, là, ça fonctionne !!
>
> Je comprend, selon ta description, que WinWnd ne contient pas la bonne
> valeur après l'appel de FindWindow() (cette valeur n'est pas la même
> que Window Analyser)... je suis dans le champs ? :O)

plein pile dedans !

et maintenant, je fais quoi ? lol



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper




Avatar
scraper
Salut à Stéphane Santon qui dans son post
news:
nous a écrit/répondu :

plein pile dedans !
et maintenant, je fais quoi ? lol



OK

* T'es-tu assuré que ta fenêtre est une fenêtre de premier niveau (les
autres sont ignorées) ?



à vrai dire j'en sais rien ??

le soft que j'essaie de fermer c'est outlook Express :-)

la fenêtre sur laquelle je fais les essais, c'est la "boite de réception"
mais dire que c'est premier niveau ou pas ...

peut être n'est ce pas la bonne méthode, s'agissant de ce programme là ?


--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper
1 2 3