Form Handle & FindWindow [Résolu]

Signaler
Messages postés
520
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
-
Messages postés
5
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
5 février 2007
-
Bonjour,

j'ai le probleme suivante:
- J'ai une classe dans laquelle je souhaite récupérer le handle de mon formulaire principal. Je lance donc un FindWindow avec le nom de la fenetre:
Dim h As Long = Me.FindWindow(String.Empty, "Domotix")
---> me retourne 222083760919674880

Cependant, quand, dans mon formulaire, je tape
msgbox(me.handle)
---> me retourne 460968

Ce que je ne comprends pas, c'est pourkoi ces 2 handle n'ont pas la même valeur
A t on des handle "vb.net" et d'autre handle "windows" pour la meme fenetre ???

Merci d'avance

Olixelle

8 réponses

Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
Non intptr et long, ce n'est pas la même chose.
La déclaration de l'api en dotnet est :
PrivateDeclareFunction FindWindow Lib"user32"Alias"FindWindowA" (ByVal lpClassName AsString, ByVal lpWindowName AsString) AsIntegerEn vb6, long 32bits, en dotnet long 64bits et integer = 32bits

Kenji
Messages postés
520
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
2
Saluit Charles,

effectivement mon erreur venait l'import de l'api...
la bonne chose a faire en dotnet est:

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

En tout cas merci pour votre aide :)

A bientot

Olixelle
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
6
Un handle c'est pas sensé rentrer dans un Integer (le Long du VB6) ? Donc 222 083 760 919 674 880 est beaucoup trop grand, (même pour un long c'est beaucoup non ?). Quand tu mets "me retourne 222083760919674880", c'est h tu veux dire ? ou Me.FindWindow(String.Empty, "Domotix") ? Parce que me c'est pas sensé renvoyer un nombre...

Julien.
Messages postés
520
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
2
me.findwindow retourne un long (ou intptr c la mm chose)
me.handle retourne un integer...

c bien la le sujet de mon interrogation
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
35
ATTENTION Olixelle

La valeur de retour de FindWindows, ce n'est pas IntPtr, c'est Integer, ou Int32.

Integer est un type de variable de 32 bits.
IntPtr est une structure servant à décrire un pointeur, ça n'a rien voir.

Si tu laisse IntPtr tu auras surrement tot ou tard des plantages.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
520
Date d'inscription
vendredi 30 juillet 2004
Statut
Membre
Dernière intervention
3 mars 2008
2
ben en .net, long & integer ne fonctionnent pas...
seul la déclaration avec intptr fonctionne
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
30
olixelle à raison, l'api renvoie bien un pointeur. comme la propriété handle



Kenji
Messages postés
5
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
5 février 2007

Bonjour,

j'essaye aussi d'utilisé l'api FindWindow, mais malgrés tout  ce que j'ai pu en lire ici et la, je n'arrive toujours pas a récupéré l'handle de la fenetre que je cherche ( l'api me retourne 0 ).

je la declare pourtant comme olixelle:
Declare
Function FindWindow
Lib
"user32"
Alias
"FindWindowA" (
ByVal nom_classe
As
String,
ByVal nom_fenetre
As
String)
As IntPtr

et l'utilise comme cela:

Dim CalHwnd
As IntPtr

CalHwnd = FindWindow(
String.Empty,
"Calculatrice")

Alors si vous aviez des conseils a me donner je suis prenneur

Ps: j'ai aussi essayer en remplacement  le IntPtr par un Integer et un Int32 ( ainsi que par un long en desepoire de cause  ) suite a la remarque de casy

Spandex