Soyez le premier à donner votre avis sur cette source.
Vue 10 948 fois - Téléchargée 517 fois
Private Sub Command1_Click() Dim extension As String Dim pos As Integer Dim tmp1 As String Dim tmp2 As String pos = InStrRev(TextFichier.Text, ".") extension = Right(TextFichier.Text, Len(TextFichier.Text) - pos + 1) Debug.Print "extension :" & extension tmp1 = LireValeur(HKeyClassesRoot, extension, "") tmp2 = LireValeur(HKeyClassesRoot, tmp1 & "\shell\open\command", "") tmp2 = Replace(tmp2, "%SystemRoot%", WinDirectory) tmp2 = Replace(tmp2, Chr(34) & "%1" & Chr(34), Chr(34) & TextFichier.Text & Chr(34)) tmp2 = Replace(tmp2, "%1", Chr(34) & TextFichier.Text & Chr(34)) Debug.Print tmp1 Debug.Print tmp2 ret = Shell(tmp2, vbNormalFocus) End Sub 'Quelques déclarations utiles pour lire la base de registre 'pris sur VBfrance Const HKEY_CLASSES_ROOT = &H80000000 Const HKEY_CURRENT_USER = &H80000001 Const HKEY_LOCAL_MACHINE = &H80000002 Const HKEY_USERS = &H80000003 Const HKEY_DYN_DATA = &H80000004 Public Enum HCle HKeyLocalMachine = 0 HKeyCurrentUser = 1 HKeyClassesRoot = 2 HKeyUsers = 3 HKeyDynamicData = 4 End Enum 'pour créer ou ouvrir une clé Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" _ (ByVal HKey As Long, _ ByVal lpSubKey As String, _ phkResult As Long) As Long 'pour lire une valeur Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _ (ByVal HKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ lpType As Long, _ lpData As Any, _ lpcbData As Long) As Long Public Function LireValeur(HK As HCle, Chemin As String, Valeur As String) As String Dim lng As Long Dim Buff As Long Buff = 0 Buff = RegCreateKey(HKConvert(HK), Chemin, lng) If Buff = 0 Then RegQueryValueEx lng, Valeur, 0&, 1, 0&, Buff If Buff < 2 Then LireValeur = "" Exit Function End If LireValeur = String(Buff + 1, " ") RegQueryValueEx lng, Valeur, 0&, 1, ByVal LireValeur, Buff LireValeur = Left(LireValeur, Buff - 1) End Function Private Function HKConvert(ByVal HK As HCle) As Long If HK = 2 Then HKConvert = HKEY_CLASSES_ROOT If HK = 1 Then HKConvert = HKEY_CURRENT_USER If HK = 0 Then HKConvert = HKEY_LOCAL_MACHINE If HK = 3 Then HKConvert = HKEY_USERS If HK = 4 Then HKConvert = HKEY_DYN_DATA End Function
En effet, c'est le fichier modèle lui-même qui est ouvert alors que je souhaite qu'une nouvelle instance du modèle soit ouverte dans un nouveau document.
Merci pour ta (vos) réponse(s).
Il ne faut simplement pas oublier de mettre le nShowCmd à SW_SHOWNORMAL.
Si tu laisse 0 cela correspond à SW_HIDE !!! Le processus est lancé mais invisible...
Jack => je me fous du hwnd de l'appli lancée(tte facon si t'a le pid c pas un pb). Mon pb avec shellExecute est que si je me sers du "mot" open avec par exemple un fichier txt, il me retourne un code 42 (donc pas un code d'erreur car>32), mais il ne me lance pas notepad (du moins en visible, vu kil apparait simplement dans la liste des processus).
La je me sers de shell et je n'ai aucun pb.
Vala.
Goth
Solution :
Au lieu de faire le "Private Sub Command1_Click()", crée ta propre fonction en "Private Function LanceProg (ByVal Fichier as String) as Long"
et dans cette fonction, après le Ret = Shell, tu fais simplement :
LanceProg = Ret
En plus, il faudra remplacer TextFichier.Text par Fichier dans la fonction
Pour l'utiliser :
Hwnd = LanceProg (TextFichier.Text)
Vala.
Jack
9/10 pour l'originalité ;-p
DarK Sidious
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.