ShellExecute et Hwnd [Résolu]

Signaler
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008
-
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
19 mars 2008
-
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

22 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008

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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
Aucun besoin de hwnd, tu passes 0 en 1er param.

ciao...
BruNews, MVP VC++
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008

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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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++
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008

Désolé toujours les mêmes messages d'erreur !

merci et salut !
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008

 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
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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++
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008

En fait c'est "System.Diagnostics.Process" mais si tu pouvais m'indiquer comment l'utiliser ou quoi en faire ?

Merci d'avance
Messages postés
14788
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 mai 2021
155
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
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008

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 !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
8
Date d'inscription
samedi 7 mai 2005
Statut
Membre
Dernière intervention
14 mars 2008

tu avais raison, pas besoin de l'API ShellExecute, ça marche impec avec la classe Process

encore merci et adishatz !!
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
19 mars 2008

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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
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
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
19 mars 2008

Merci, je regarde ça
Messages postés
4
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
19 mars 2008

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