ShellExecute et Hwnd [Résolu]

sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 13 mars 2008 à 17:23 - Dernière réponse : PeteZah 4 Messages postés mercredi 5 juillet 2006Date d'inscription 19 mars 2008 Dernière intervention
- 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

22 réponses

jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 13 mars 2008 à 17:42
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmfmarques
sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 13 mars 2008 à 17:55
0
Utile
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 mars 2008 à 17:57
0
Utile
Aucun besoin de hwnd, tu passes 0 en 1er param.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 13 mars 2008 à 18:48
0
Utile
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 13 mars 2008 à 19:01
0
Utile
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
sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 13 mars 2008 à 19:50
0
Utile
Désolé toujours les mêmes messages d'erreur !

merci et salut !
Commenter la réponse de sl300
NHenry 14171 Messages postés vendredi 14 mars 2003Date d'inscription 17 mai 2018 Dernière intervention - 14 mars 2008 à 08:57
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 14 mars 2008 à 09:15
0
Utile
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
sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 14 mars 2008 à 13:06
0
Utile
 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
NHenry 14171 Messages postés vendredi 14 mars 2003Date d'inscription 17 mai 2018 Dernière intervention - 14 mars 2008 à 13:14
0
Utile
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
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 14 mars 2008 à 13:38
0
Utile
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
sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 14 mars 2008 à 13:52
0
Utile
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
NHenry 14171 Messages postés vendredi 14 mars 2003Date d'inscription 17 mai 2018 Dernière intervention - 14 mars 2008 à 14:00
0
Utile
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
sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 14 mars 2008 à 14:02
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 14 mars 2008 à 14:06
0
Utile
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
sl300 8 Messages postés samedi 7 mai 2005Date d'inscription 14 mars 2008 Dernière intervention - 14 mars 2008 à 22:15
0
Utile
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
PeteZah 4 Messages postés mercredi 5 juillet 2006Date d'inscription 19 mars 2008 Dernière intervention - 19 mars 2008 à 10:56
0
Utile
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
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 19 mars 2008 à 11:01
0
Utile
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
PeteZah 4 Messages postés mercredi 5 juillet 2006Date d'inscription 19 mars 2008 Dernière intervention - 19 mars 2008 à 11:21
0
Utile
Merci, je regarde ça
Commenter la réponse de PeteZah
PeteZah 4 Messages postés mercredi 5 juillet 2006Date d'inscription 19 mars 2008 Dernière intervention - 19 mars 2008 à 11:54
0
Utile
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.

shellExecute et Hwnd - page 2