COMMANDE DU MENU CONTEXTUEL POUR RÉCUPÉRER LES CHEMINS D'UNE SÉLECTION DE FICHIE
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
7 mars 2006 à 15:41
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 2021
-
1 oct. 2008 à 17:48
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 1 oct. 2008 à 17:48
et un truc du genre :
Private Sub Form_Load()
If App.PrevInstance = True Then
'programme déjà lancé
Else
'on continue
End If
End Sub
Sinon tu peux utiliser des exemples sur le site qui montre comment réutiliser une instance existante d'un programme pour lui envoyer des données au lieux de ré-ouvrir le programme.
oommeeggaa3d
Messages postés97Date d'inscriptiondimanche 24 avril 2005StatutMembreDernière intervention 3 septembre 2010 1 oct. 2008 à 16:02
Ce comportement n'est pas gérable a priori : si la form est légèrement longue à afficher, le programme est lancé deux fois.
Pour contourner le problème j'ai séparé l'exécutable qui récupère le nom des fichiers/répertoires cliqués et qui envoie le tout à mon application, au bout d'un temps défini par un timer (en gros 500 ms).
C'est un peu tordu, mais à moins de freezer le système le temps qu'une fenêtre apparaisse, je ne vois pas comment faire.
Pour la base de registre, je n'ai pas le même souci que toi étant donné que je crée la clé durant l'installation de mon application par un fichier Setup. (inno setup).
La clé est effacée en cas de désinstallation du logiciel.
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 1 oct. 2008 à 15:01
C'est à toi de prévoir ce comportement. Personnellement, je n'utiliserais de toute manière pas ce code car les références dans la base de registre doivent être supprimées manuellement. Ça fait pas pro.
oommeeggaa3d
Messages postés97Date d'inscriptiondimanche 24 avril 2005StatutMembreDernière intervention 3 septembre 2010 1 oct. 2008 à 13:54
pour ma part je rencontre un problème en intégrant ton code dans mon appli :
lorsqu'on sélectionne plusieurs fichiers dans l'explorateur et que l'on utlise ensuite le clic droit : il relance plusieurs session de l'application, donc sans détecter sa présence.
frqn
Messages postés1Date d'inscriptionlundi 22 septembre 2003StatutMembreDernière intervention 7 mars 2008 7 mars 2008 à 06:35
Bravo pour ce code utile et simple à adapter. J'ai une application qui fonctionne avec le SendTo pour récupérer une liste de fichiers sélectés dans l'explorer, et j'avais donc le problème de la limitation bizarre par Windows de la taille de la ligne commande. J'ai utilisé ce code pour passer par le menu contextuel au lieu du SendTo, fonctionnement OK sauf que je n'arrive pas à déclencher l'exécution automatique de mon ancienne appli. J'ai ajouté un appel dans la procédure unload de la form contenant la listbox, ca marche, mais ça oblige l'utilisateur à fermer le feuille pour continuer le travail.
Y a t'il un moyen de s'apercevoir qu'on n'a plus de messages à attendre, pour déclencher automatiquement l'exécution de la suite? J'ai essayé de m'envoyer un message au démarrage de la Sub main, en espérant qu'il allait s'empiler sur les autres, pour le décoder dans la form et forcer le unload, ça ne marche pas, la synchronisation ne de fait pas. Merci de vos suggestions.
cs_milo2009
Messages postés180Date d'inscriptionvendredi 4 juillet 2003StatutMembreDernière intervention 8 août 20111 27 juil. 2006 à 17:13
Pour effectué des opérations sur la base de registre il y a :
Private Sub Lire_Click()
'permet de lire une valeur dans la base de registre
Set WshShell = CreateObject("Wscript.Shell")
Text1.Text = WshShell.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\MenuShowDelay") 'Mettez ici le chemin de la clé et le nom d'un paramêtre pour obtenir sa valeur
'Remarque :HKEY_CURRENT_USER peut être remplacé par HKCU
'On peut mettre n'importe quelle branche comme ça
End Sub
Private Sub Ecrire_Click()
'Permet d'écrire dans la base de registre tout type de valeur (valeur chaîne, dword, binaire) ou de créer une nouvelle branche ....
Set WshShell = CreateObject("Wscript.Shell")
WshShell.RegWrite "HKCU\essaiVisualBasic\Nom d'un paramètre", "Valeur de celui-ci"
WshShell.RegWrite "HKCU\essaiVisualBasic\Créer Clé 1 Dword", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\essaiVisualBasic\Créer Clé 2 binaire", 1, "REG_BINARY" 'Le 1, c'est la valeur de la valeur binaire (!)
End Sub
Private Sub Supprimer_Click()
'Permet d'effacer dans la base de registre tout type de valeur (valeur chaîne, dword, binaire)
Set WshShell = CreateObject("Wscript.Shell")
WshShell.RegDelete "HKCU\essaiVisualBasic\NOM DU PARAMETRE" ' supprime le paramètre
WshShell.RegDelete "HKCU\essaiVisualBasic\NOM D'UNE CLE" 'Supprime une clé
End Sub
clementio
Messages postés432Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 février 20141 10 avril 2006 à 18:48
A ma connaissance, non...
Je l'ai toujours fait à la main...
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 10 avril 2006 à 14:57
et par le code y a pas une methode simple (autant pour ajouter que retirer la clé) ?
clementio
Messages postés432Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 février 20141 9 avril 2006 à 15:07
Renfield --> Je sais mais cette source est juste un exemple. Elle est nullement exploitable dans l'état de toutes façons...
clementio
Messages postés432Date d'inscriptionsamedi 18 mai 2002StatutMembreDernière intervention17 février 20141 9 avril 2006 à 15:06
Tu fais un clic droit sur le fichier reg puis Mofifier. Ensuite, tu ouvres la fenêtre Exécuter dans le menu Démarrer et tu tapes regedit. Tu te rends à l'adresse indiquée dans le fichier et tu supprimes ce que ça t'a rajouté, c'est tout...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 avril 2006 à 15:05
Démarrer > Regedit > Ok
ensuite, tu supprime la clé
HKEY_CLASSES_ROOT\*\shell\Tester Projet1
en passant, pas top du tout, ce chemin en dur, que l'on trouve dans le fichier .reg...
cs_PaTaTe
Messages postés2126Date d'inscriptionmercredi 21 août 2002StatutContributeurDernière intervention19 février 20212 9 avril 2006 à 12:22
Moi et la base de registre ca fait 2 !
Comment supprimer les modifications mis par le fichier registre ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 13 mars 2006 à 10:23
un très bon bouquin expliquant les extensions shell en VB6 :
1 oct. 2008 à 17:48
Private Sub Form_Load()
If App.PrevInstance = True Then
'programme déjà lancé
Else
'on continue
End If
End Sub
Sinon tu peux utiliser des exemples sur le site qui montre comment réutiliser une instance existante d'un programme pour lui envoyer des données au lieux de ré-ouvrir le programme.
1 oct. 2008 à 16:02
Pour contourner le problème j'ai séparé l'exécutable qui récupère le nom des fichiers/répertoires cliqués et qui envoie le tout à mon application, au bout d'un temps défini par un timer (en gros 500 ms).
C'est un peu tordu, mais à moins de freezer le système le temps qu'une fenêtre apparaisse, je ne vois pas comment faire.
Pour la base de registre, je n'ai pas le même souci que toi étant donné que je crée la clé durant l'installation de mon application par un fichier Setup. (inno setup).
La clé est effacée en cas de désinstallation du logiciel.
1 oct. 2008 à 15:01
1 oct. 2008 à 13:54
lorsqu'on sélectionne plusieurs fichiers dans l'explorateur et que l'on utlise ensuite le clic droit : il relance plusieurs session de l'application, donc sans détecter sa présence.
7 mars 2008 à 06:35
Y a t'il un moyen de s'apercevoir qu'on n'a plus de messages à attendre, pour déclencher automatiquement l'exécution de la suite? J'ai essayé de m'envoyer un message au démarrage de la Sub main, en espérant qu'il allait s'empiler sur les autres, pour le décoder dans la form et forcer le unload, ça ne marche pas, la synchronisation ne de fait pas. Merci de vos suggestions.
27 juil. 2006 à 17:13
Private Sub Lire_Click()
'permet de lire une valeur dans la base de registre
Set WshShell = CreateObject("Wscript.Shell")
Text1.Text = WshShell.RegRead("HKEY_CURRENT_USER\Control Panel\Desktop\MenuShowDelay") 'Mettez ici le chemin de la clé et le nom d'un paramêtre pour obtenir sa valeur
'Remarque :HKEY_CURRENT_USER peut être remplacé par HKCU
'On peut mettre n'importe quelle branche comme ça
End Sub
Private Sub Ecrire_Click()
'Permet d'écrire dans la base de registre tout type de valeur (valeur chaîne, dword, binaire) ou de créer une nouvelle branche ....
Set WshShell = CreateObject("Wscript.Shell")
WshShell.RegWrite "HKCU\essaiVisualBasic\Nom d'un paramètre", "Valeur de celui-ci"
WshShell.RegWrite "HKCU\essaiVisualBasic\Créer Clé 1 Dword", 1, "REG_DWORD"
WshShell.RegWrite "HKCU\essaiVisualBasic\Créer Clé 2 binaire", 1, "REG_BINARY" 'Le 1, c'est la valeur de la valeur binaire (!)
End Sub
Private Sub Supprimer_Click()
'Permet d'effacer dans la base de registre tout type de valeur (valeur chaîne, dword, binaire)
Set WshShell = CreateObject("Wscript.Shell")
WshShell.RegDelete "HKCU\essaiVisualBasic\NOM DU PARAMETRE" ' supprime le paramètre
WshShell.RegDelete "HKCU\essaiVisualBasic\NOM D'UNE CLE" 'Supprime une clé
End Sub
10 avril 2006 à 18:48
Je l'ai toujours fait à la main...
10 avril 2006 à 14:57
9 avril 2006 à 15:07
9 avril 2006 à 15:06
9 avril 2006 à 15:05
ensuite, tu supprime la clé
HKEY_CLASSES_ROOT\*\shell\Tester Projet1
en passant, pas top du tout, ce chemin en dur, que l'on trouve dans le fichier .reg...
9 avril 2006 à 12:22
Comment supprimer les modifications mis par le fichier registre ?
13 mars 2006 à 10:23
http://www.amazon.fr/exec/obidos/ASIN/1565926706/402-2654299-7138526
13 mars 2006 à 10:17
http://www.vbfrance.com/codes/MENU-CONTEXTUEL-SYSTEME_20732.aspx
mais c'est vrai que c'est pas mal compliqué à comprendre pour un débutant...
13 mars 2006 à 09:47
13 mars 2006 à 07:37
7 mars 2006 à 16:09
7 mars 2006 à 15:44
7 mars 2006 à 15:41