ShellExecute et Hwnd

Résolu
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008 - 13 mars 2008 à 17:23
PeteZah Messages postés 4 Date d'inscription mercredi 5 juillet 2006 Statut Membre 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
A voir également:

22 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 mars 2008 à 17:42
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
3
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008
13 mars 2008 à 17:55
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 mars 2008 à 17:57
Aucun besoin de hwnd, tu passes 0 en 1er param.

ciao...
BruNews, MVP VC++
0
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008
13 mars 2008 à 18:48
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 mars 2008 à 19:01
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++
0
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008
13 mars 2008 à 19:50
Désolé toujours les mêmes messages d'erreur !

merci et salut !
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 mars 2008 à 08:57
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 mars 2008 à 09:15
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
0
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008
14 mars 2008 à 13:06
 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
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 mars 2008 à 13:14
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mars 2008 à 13:38
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++
0
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008
14 mars 2008 à 13:52
En fait c'est "System.Diagnostics.Process" mais si tu pouvais m'indiquer comment l'utiliser ou quoi en faire ?

Merci d'avance
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
14 mars 2008 à 14:00
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
0
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008
14 mars 2008 à 14:02
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 !
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
14 mars 2008 à 14:06
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
0
sl300 Messages postés 8 Date d'inscription samedi 7 mai 2005 Statut Membre Dernière intervention 14 mars 2008
14 mars 2008 à 22:15
tu avais raison, pas besoin de l'API ShellExecute, ça marche impec avec la classe Process

encore merci et adishatz !!
0
PeteZah Messages postés 4 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 19 mars 2008
19 mars 2008 à 10:56
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mars 2008 à 11:01
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
0
PeteZah Messages postés 4 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 19 mars 2008
19 mars 2008 à 11:21
Merci, je regarde ça
0
PeteZah Messages postés 4 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 19 mars 2008
19 mars 2008 à 11:54
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
0
Rejoignez-nous