ShellExecute et Hwnd [Résolu]

Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
- - Dernière réponse : PeteZah
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Dernière intervention
19 mars 2008
- 19 mars 2008 à 13:20
Bonjour,
Débutant en VB 2005, je confectionne un petit programme  où un click sur un nom de rues dans une "listbox" permets d'aller sur le site Google Maps et de localiser la rue.
Une seule Form : Public class FRmInitiale. Le sub OuvreGoogle ouvre le site Google Maps.
le code (que j'ai copié quelque part) :
Public declare function



ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (byval hwnd as long, byval lpOperation as string' byvalIpFile as String, byval lpParameters as String, byval ipDirectory as String, Byval nShowCmd as long) as long




Public sub OuvreGoogle()
v_http="http://maps.google.fr/maps?f=q&hl=fr&q="
v_http=v_http&v_adresse & ",+" & v_cp& "+" & v_ville
shellExecute (Me.hwnd,"open",v_http,"",My.application.info.DirestoryPath,1)
End sub


En VB6 ça fonctionne très bien.
En VB2005 Me.hwnd me renvoie l'erreur 'hwnd n'est pas membre de "windowsApplication1.FrmInitiale'

Voilà 15 jours que je parcours forums et autres tuto et je ne trouve rien pour m'éclairer.

Merci par avance de votre aide à un novice et salutations
Afficher la suite 

Votre réponse

20/22 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
3
Merci
Public declare function


ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (byval hwnd as long, byval lpOperation as string' byvalIpFile as String, byval lpParameters as String, byval ipDirectory as String, Byval nShowCmd as long) as long







C'est déjà ce qui est en rouge, qui ne va pas avec vb.net...
Change par as integer

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
0
Merci
merci de ta célérité !

mais j'ai essayé, en vain avec "byval hwnd as integer" (j'avais trouvé ça QQpart )

Merci de t'interesser à mon cas
Commenter la réponse de sl300
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
Aucun besoin de hwnd, tu passes 0 en 1er param.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
0
Merci
merci de ta réponse MAIS j'ai essayé avec 0.
J'ai le message suivant : 'un appel à la fonction Pinvoke "windowsApplications1.Frminitiale::shellExecute" a déséquilibré la pile'

l'aide en ligne complémentaire évoque  "PinvokeStacklmbalance"

Je n'y comprends rien !

Merci par avance si tu peux m'aider

salut
Commenter la réponse de sl300
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
Comme dit par JMF plus haut, mets tous les params As Integer, ce sont des 32 bits qu'il faut empiler.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
0
Merci
Désolé toujours les mêmes messages d'erreur !

merci et salut !
Commenter la réponse de sl300
Messages postés
14323
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
15 décembre 2018
0
Merci
Bonjour

En .NET, dirige peut être toi de préférence vers System.Diagnostic.Process (pas sur de l'exactitude du nom).

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Commenter la réponse de NHenry
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
clair qu'il faut te justifier de l'utilisation de l'API plutot que de passer par un Process.Start ....

pour ta déclaration, te faut utiliser quelque chose de ce genre :

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Integer, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
0
Merci
 j'avais déjà essayé mais ça ne marche pas, toujours la même erreur :

 "hwnd n'est pas membre de windowsApplication1.FrmInitiale" et/ou
un appel à la fonction Pinvoke "windowsApplications1.Frminitiale::shellExecute" a déséquilibré la pile'

Merci
Commenter la réponse de sl300
Messages postés
14323
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
15 décembre 2018
0
Merci
Bonjour

A la place de Hwnd, il faut utiliser Handle, si je ne me trompe pas.

Ensuite, pourquoi utiliser ShellExecute au lieu de la classe Process ?

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Commenter la réponse de NHenry
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
Mais c'est qu'il est tétu... on met 0 (ZERO !!!) en 1er param, ce hwnd ne sert qu'à afficher un message d'erreur si c'était le cas.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
0
Merci
En fait c'est "System.Diagnostics.Process" mais si tu pouvais m'indiquer comment l'utiliser ou quoi en faire ?

Merci d'avance
Commenter la réponse de sl300
Messages postés
14323
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
15 décembre 2018
0
Merci
Bonjour

Il faut utiliser la méthode Start, sinon pour plus d'info, il y a MSDN.

Nous captons le cockpit coupable qui a capoté
VB (6, .NET1&2), C++, C#.Net1
Commenter la réponse de NHenry
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
0
Merci
c'est pas moi qui suis têtu ! mais avec 0 (zéro) ça donne "un appel à la fonction Pinvoke ..... a déséquilibré la pile"

le débutant qui essaie tout ce qu'on lui suggère !
Commenter la réponse de sl300
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
le 0 ou 123457864 comme valeur ca ne changera rien.
ta déclaration API semble fausse, ce qui fait que ton appel coince.


reste que'avace le framework, on a normellement pas besoin de jouer avec cette API.


voir:
http://www.codyx.org/snippet_ouvrir-document-lancer-executable_25_l_vb-net_2.aspx


 









Renfield





Admin CodeS-SourceS

- MVP Visual Basic
Commenter la réponse de Renfield
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Dernière intervention
14 mars 2008
0
Merci
tu avais raison, pas besoin de l'API ShellExecute, ça marche impec avec la classe Process

encore merci et adishatz !!
Commenter la réponse de sl300
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Dernière intervention
19 mars 2008
0
Merci
Bonjour, j'ai une erreur du même genre, et je ne sais pas d'où peut venir le problème.

J'ai récupéré un projet en vb6, et les lignes suivantes plantent :

SetWindowLong Me.hwnd, GWL_HPARENT, GMApp.AppMainhWnd
ShowWindow Me.hwnd, SW_SHOW

La première de ces deux lignes provoque un message d'erreur : This object doesn't support this property or Method. Après vérification, c'est le Me.hwnd qui pose un souci. Dans une autre classe, j'ai le code suivant :

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Je suppose que cela peut venir d'une propriété de mon formulaire qui est mal renseignée mais je ne sais pas laquelle. Si l'un d'entre vous a une idée, ce serait sympa


Merci d'avance
Commenter la réponse de PeteZah
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
0
Merci
hWnd => Handle

et encore une fois, ta déclaration d'API est incorrecte....
Long => Integer


Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
Commenter la réponse de Renfield
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Dernière intervention
19 mars 2008
0
Merci
Merci, je regarde ça
Commenter la réponse de PeteZah
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Dernière intervention
19 mars 2008
0
Merci
Merci, le problème ne venait pas de là, mais des fonctions appelées lors de la création du formulaire, merci de ta réponse rapide en tous cas
Commenter la réponse de PeteZah

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.