récupérer l'adresse e-mail de l'utilisateur du carnet d'adresses
18 réponses
Dan
Bonjour à tous
je sais maintenant comment récupérer le carnet d'adresses dans une zone de
texte.
Je cherche maintenant à savoir où je peux récupérer l'adresse e-mail de
l'utilisateur (mois en l'occurrence mais mon application peut être installée
chez d'autres utilisateurs)
d'avance merci de votre aide.
Dan
Je sais, ce n'est peut être pas la bonne méthode d'un point de vue pédagoqique. Mais, c'est pas gagné, le code de Zoury demande quelques 'révisions' (Ex
RegOpenKeyEx et RegOpenKey sont utilisées, mais une seule est
déclarée. En principe ça ne plante qu'à la compil.
Je n'utilise que RegOpenKeyEx
dans l'exemple une constante 'rkcLocalMachine', est utilisée ... Selon que Option Explicit est présente ou pas ...
Le conseil que je peux donner à Dan , par rapport au volume du code proposé par Zoury, c'est de tracer le programme avec <F8> il verra que pour ses besoins actuels (clés de type REG_SZ) seule la fonction GetValueStr est utilisée (13 lignes), et de consulter pas à pas là valeur des variables et constantes. Et avec un peu de bonne volonté, il s'appercevra qu'avec ce module de classe il peut (sous réserve des droits d'accès) accéder à n'importe quelle clé du registre.
C'est pourquoi, je pensais plus facile pour Dan d'extraire uniquement les fonctions qui lui sont nécessaires. Je ne pense pas qu'il veuille développer au delà de l'application qui a motivé ce fil.
Le passage aux modules de classe, aux Dll Activex, Exe Activex, et OCX, est loin d'être évidente, et un petit coup de pouce ça peut aider ;-) PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas implémenter l'accès aux registre distants, avec RegConnectRegistry :-D
Bonne idée pour un prochain utilitaire. Je ne me suis pas encore penché sur l'accès aux registres distants.
Cordialement
Aski
Salutatoi Jacques93,
Tu t'es vachement avancé en affirmant :
Ben, ce n'est pas vraiment un début ... ;-)
Je sais, ce n'est peut être pas la bonne méthode d'un point de vue
pédagoqique.
Mais, c'est pas gagné, le code de Zoury demande quelques 'révisions'
(Ex
RegOpenKeyEx et RegOpenKey sont utilisées, mais une seule est
déclarée. En principe ça ne plante qu'à la compil.
Je n'utilise que RegOpenKeyEx
dans l'exemple une constante 'rkcLocalMachine', est utilisée ... Selon
que Option Explicit est présente ou pas ...
Le conseil que je peux donner à Dan , par rapport au volume du code
proposé par Zoury, c'est de tracer le programme avec <F8> il verra que
pour ses besoins actuels (clés de type REG_SZ) seule la fonction
GetValueStr est utilisée (13 lignes), et de consulter pas à pas là
valeur des variables et constantes. Et avec un peu de bonne volonté,
il s'appercevra qu'avec ce module de classe il peut (sous réserve des
droits d'accès) accéder à n'importe quelle clé du registre.
C'est pourquoi, je pensais plus facile pour Dan d'extraire uniquement les
fonctions qui lui sont nécessaires. Je ne pense pas qu'il veuille développer
au delà de l'application qui a motivé ce fil.
Le passage aux modules de classe, aux Dll Activex, Exe Activex, et
OCX, est loin d'être évidente, et un petit coup de pouce ça peut
aider ;-)
PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas
implémenter l'accès aux registre distants, avec
RegConnectRegistry :-D
Bonne idée pour un prochain utilitaire. Je ne me suis pas encore penché sur
l'accès aux registres distants.
Je sais, ce n'est peut être pas la bonne méthode d'un point de vue pédagoqique. Mais, c'est pas gagné, le code de Zoury demande quelques 'révisions' (Ex
RegOpenKeyEx et RegOpenKey sont utilisées, mais une seule est
déclarée. En principe ça ne plante qu'à la compil.
Je n'utilise que RegOpenKeyEx
dans l'exemple une constante 'rkcLocalMachine', est utilisée ... Selon que Option Explicit est présente ou pas ...
Le conseil que je peux donner à Dan , par rapport au volume du code proposé par Zoury, c'est de tracer le programme avec <F8> il verra que pour ses besoins actuels (clés de type REG_SZ) seule la fonction GetValueStr est utilisée (13 lignes), et de consulter pas à pas là valeur des variables et constantes. Et avec un peu de bonne volonté, il s'appercevra qu'avec ce module de classe il peut (sous réserve des droits d'accès) accéder à n'importe quelle clé du registre.
C'est pourquoi, je pensais plus facile pour Dan d'extraire uniquement les fonctions qui lui sont nécessaires. Je ne pense pas qu'il veuille développer au delà de l'application qui a motivé ce fil.
Le passage aux modules de classe, aux Dll Activex, Exe Activex, et OCX, est loin d'être évidente, et un petit coup de pouce ça peut aider ;-) PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas implémenter l'accès aux registre distants, avec RegConnectRegistry :-D
Bonne idée pour un prochain utilitaire. Je ne me suis pas encore penché sur l'accès aux registres distants.
Cordialement
Aski
Jacques93
Bonsoir Picalausa François, Picalausa François a écrit :
"Jacques93" a écrit dans le message de news:
PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas implémenter l'accès aux registre distants, avec RegConnectRegistry :-D
Hello!
Voici une manière d'implémenter ceci: 'Dans les déclarations, ajouter: Private Declare Function RegConnectRegistry _ Lib "advapi32.dll" _ Alias "RegConnectRegistryA" _ ( _ ByVal lpMachineName As String, _ ByVal hKey As Long, _ phkResult As Long _ ) _ As Long
'ailleurs dans le module: Public Function GetRemoteBaseKey(ByVal MachineName As String, BaseKey As eBaseKeyHandle) As Long If Left$(MachineName, 2) <> "" Then MachineName = "" & MachineName
If RegConnectRegistry(MachineName, BaseKey, GetRemoteBaseKey) <> NO_ERROR Then GetRemoteBaseKey = 0 End If End Function
Public Sub CloseRemoteKey(RemoteBaseKey As Long) RegCloseKey RemoteBaseKey End Sub
Cependant l'utilisation des autres wrappers est alors moins naturelle: Dim RemoteHKCU As Long
'Ouverture de la clé distante RemoteHKCU = reg.GetRemoteBaseKey("toto", bkhCurrentUser)
'Utilisation des autres wrappers Debug.Print reg.KeyExists(RemoteHKCU, "key")
'Fermeture de la clé distante Call reg.CloseRemoteKey(RemoteHKCU)
Merci, ce n'était qu'un clin d'oeil, on est samedi ;-) Personellement, n'ayant pas utilisé et n'ayant pas la classe de Zoury, j'utilises un code du genre :
Public Function Read_Registry_String _ (hKey As Long, SubKey As String, Name As String, _ Optional Server As String = "") As String Dim lResult As Long, strLen As Long Dim phkResult As Long
If Len(Server) > 0 Then lResult = RegConnectRegistry(Server, hKey, phkResult) hKey = phkResult End If lResult = RegOpenKeyEx(hKey, SubKey, 0&, KEY_READ, hKey) [...] End Function
Mais sur le fonds, c'est un sytème assez pratique pour un logiciel fonctionnant en réseau, et ou les paramètres généraux sont stockés sur un serveur de fichier (pas d'OS Serveur), et les paramètres personnalisés en local. :-)
-- Cordialement,
Jacques.
Bonsoir Picalausa François,
Picalausa François a écrit :
"Jacques93" <jacques@NoSpam> a écrit dans le message de news:
OiIJgLL3FHA.3600@TK2MSFTNGP12.phx.gbl...
PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas
implémenter l'accès aux registre distants, avec
RegConnectRegistry :-D
Hello!
Voici une manière d'implémenter ceci:
'Dans les déclarations, ajouter:
Private Declare Function RegConnectRegistry _
Lib "advapi32.dll" _
Alias "RegConnectRegistryA" _
( _
ByVal lpMachineName As String, _
ByVal hKey As Long, _
phkResult As Long _
) _
As Long
'ailleurs dans le module:
Public Function GetRemoteBaseKey(ByVal MachineName As String, BaseKey As
eBaseKeyHandle) As Long
If Left$(MachineName, 2) <> "\" Then MachineName = "\" & MachineName
If RegConnectRegistry(MachineName, BaseKey, GetRemoteBaseKey) <>
NO_ERROR Then
GetRemoteBaseKey = 0
End If
End Function
Public Sub CloseRemoteKey(RemoteBaseKey As Long)
RegCloseKey RemoteBaseKey
End Sub
Cependant l'utilisation des autres wrappers est alors moins naturelle:
Dim RemoteHKCU As Long
'Ouverture de la clé distante
RemoteHKCU = reg.GetRemoteBaseKey("\toto", bkhCurrentUser)
'Utilisation des autres wrappers
Debug.Print reg.KeyExists(RemoteHKCU, "key")
'Fermeture de la clé distante
Call reg.CloseRemoteKey(RemoteHKCU)
Merci, ce n'était qu'un clin d'oeil, on est samedi ;-)
Personellement, n'ayant pas utilisé et n'ayant pas la classe de Zoury,
j'utilises un code du genre :
Public Function Read_Registry_String _
(hKey As Long, SubKey As String, Name As String, _
Optional Server As String = "") As String
Dim lResult As Long, strLen As Long
Dim phkResult As Long
If Len(Server) > 0 Then
lResult = RegConnectRegistry(Server, hKey, phkResult)
hKey = phkResult
End If
lResult = RegOpenKeyEx(hKey, SubKey, 0&, KEY_READ, hKey)
[...]
End Function
Mais sur le fonds, c'est un sytème assez pratique pour un logiciel
fonctionnant en réseau, et ou les paramètres généraux sont stockés sur
un serveur de fichier (pas d'OS Serveur), et les paramètres
personnalisés en local. :-)
Bonsoir Picalausa François, Picalausa François a écrit :
"Jacques93" a écrit dans le message de news:
PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas implémenter l'accès aux registre distants, avec RegConnectRegistry :-D
Hello!
Voici une manière d'implémenter ceci: 'Dans les déclarations, ajouter: Private Declare Function RegConnectRegistry _ Lib "advapi32.dll" _ Alias "RegConnectRegistryA" _ ( _ ByVal lpMachineName As String, _ ByVal hKey As Long, _ phkResult As Long _ ) _ As Long
'ailleurs dans le module: Public Function GetRemoteBaseKey(ByVal MachineName As String, BaseKey As eBaseKeyHandle) As Long If Left$(MachineName, 2) <> "" Then MachineName = "" & MachineName
If RegConnectRegistry(MachineName, BaseKey, GetRemoteBaseKey) <> NO_ERROR Then GetRemoteBaseKey = 0 End If End Function
Public Sub CloseRemoteKey(RemoteBaseKey As Long) RegCloseKey RemoteBaseKey End Sub
Cependant l'utilisation des autres wrappers est alors moins naturelle: Dim RemoteHKCU As Long
'Ouverture de la clé distante RemoteHKCU = reg.GetRemoteBaseKey("toto", bkhCurrentUser)
'Utilisation des autres wrappers Debug.Print reg.KeyExists(RemoteHKCU, "key")
'Fermeture de la clé distante Call reg.CloseRemoteKey(RemoteHKCU)
Merci, ce n'était qu'un clin d'oeil, on est samedi ;-) Personellement, n'ayant pas utilisé et n'ayant pas la classe de Zoury, j'utilises un code du genre :
Public Function Read_Registry_String _ (hKey As Long, SubKey As String, Name As String, _ Optional Server As String = "") As String Dim lResult As Long, strLen As Long Dim phkResult As Long
If Len(Server) > 0 Then lResult = RegConnectRegistry(Server, hKey, phkResult) hKey = phkResult End If lResult = RegOpenKeyEx(hKey, SubKey, 0&, KEY_READ, hKey) [...] End Function
Mais sur le fonds, c'est un sytème assez pratique pour un logiciel fonctionnant en réseau, et ou les paramètres généraux sont stockés sur un serveur de fichier (pas d'OS Serveur), et les paramètres personnalisés en local. :-)
-- Cordialement,
Jacques.
Dan
Bonjour. J'ai procédé comme tu me l'as indiqué et à la premiere ligne de commande1 j'ai l'erreur; type défini par l'utilisateur non défini. je ne suis pas trés fort en VB mais je ne comprends pas. Peux tu m'aider? "Jacques93" a écrit dans le message de news: %
Bonjour Dan, Dan a écrit :
Bonjour. En regardant ce code je dois dire que là je suis vraiment perdu. Je dirai même : autant de code pour récupérer une si petite adresse ! Blague à part par quoi je commence est-ce que j'en sais une application, un OCX, un module jeu ne sait plus trop.
C'est pour un jeu ? ;-)
Pourrais-tu me donner un début de piste. D'avance merci car je ne suis pas vraiment un grand expert en visuel basique.
Dans ton projet, tu fais :
Projet => Ajouter un module de classe
tu le nomme CRegistry, tu y fais un copier coller du code contenu dans le lien que t'as indiqué Zoury :
Private Const kIAM = "SoftwareMicrosoftInternet Account Manager"
Private Sub Command1_Click() Dim reg As CRegistry Dim DefaultMailAccount As String Dim SMTPEmailAddress As String
Set reg = New CRegistry DefaultMailAccount = reg.GetValueStr(bkhCurrentUser, _ kIAM, "Default Mail Account") SMTPEmailAddress = reg.GetValueStr(bkhCurrentUser, _ kIAM & "Accounts" & DefaultMailAccount, _ "SMTP Email Address") MsgBox SMTPEmailAddress End Sub
-- Cordialement,
Jacques.
Bonjour.
J'ai procédé comme tu me l'as indiqué et à la premiere ligne de commande1
j'ai l'erreur;
type défini par l'utilisateur non défini.
je ne suis pas trés fort en VB mais je ne comprends pas.
Peux tu m'aider?
"Jacques93" <jacques@NoSpam> a écrit dans le message de news:
%23jJMrsI3FHA.400@TK2MSFTNGP09.phx.gbl...
Bonjour Dan,
Dan a écrit :
Bonjour.
En regardant ce code je dois dire que là je suis vraiment perdu.
Je dirai même : autant de code pour récupérer une si petite adresse !
Blague à part par quoi je commence est-ce que j'en sais une application,
un OCX, un module jeu ne sait plus trop.
C'est pour un jeu ? ;-)
Pourrais-tu me donner un début de piste.
D'avance merci car je ne suis pas vraiment un grand expert en visuel
basique.
Dans ton projet, tu fais :
Projet => Ajouter un module de classe
tu le nomme CRegistry, tu y fais un copier coller du code contenu dans le
lien que t'as indiqué Zoury :
Private Const kIAM = "SoftwareMicrosoftInternet Account Manager"
Private Sub Command1_Click()
Dim reg As CRegistry
Dim DefaultMailAccount As String
Dim SMTPEmailAddress As String
Set reg = New CRegistry
DefaultMailAccount = reg.GetValueStr(bkhCurrentUser, _
kIAM, "Default Mail Account")
SMTPEmailAddress = reg.GetValueStr(bkhCurrentUser, _
kIAM & "Accounts" & DefaultMailAccount, _
"SMTP Email Address")
MsgBox SMTPEmailAddress
End Sub
Bonjour. J'ai procédé comme tu me l'as indiqué et à la premiere ligne de commande1 j'ai l'erreur; type défini par l'utilisateur non défini. je ne suis pas trés fort en VB mais je ne comprends pas. Peux tu m'aider? "Jacques93" a écrit dans le message de news: %
Bonjour Dan, Dan a écrit :
Bonjour. En regardant ce code je dois dire que là je suis vraiment perdu. Je dirai même : autant de code pour récupérer une si petite adresse ! Blague à part par quoi je commence est-ce que j'en sais une application, un OCX, un module jeu ne sait plus trop.
C'est pour un jeu ? ;-)
Pourrais-tu me donner un début de piste. D'avance merci car je ne suis pas vraiment un grand expert en visuel basique.
Dans ton projet, tu fais :
Projet => Ajouter un module de classe
tu le nomme CRegistry, tu y fais un copier coller du code contenu dans le lien que t'as indiqué Zoury :
Private Const kIAM = "SoftwareMicrosoftInternet Account Manager"
Private Sub Command1_Click() Dim reg As CRegistry Dim DefaultMailAccount As String Dim SMTPEmailAddress As String
Set reg = New CRegistry DefaultMailAccount = reg.GetValueStr(bkhCurrentUser, _ kIAM, "Default Mail Account") SMTPEmailAddress = reg.GetValueStr(bkhCurrentUser, _ kIAM & "Accounts" & DefaultMailAccount, _ "SMTP Email Address") MsgBox SMTPEmailAddress End Sub
-- Cordialement,
Jacques.
Jacques93
Bonsoir Dan, Dan a écrit :
Bonjour. J'ai procédé comme tu me l'as indiqué et à la premiere ligne de commande1 j'ai l'erreur; type défini par l'utilisateur non défini. je ne suis pas trés fort en VB mais je ne comprends pas. Peux tu m'aider?
Il est probale que tu aie mal nommé le module de classe de Zoury , si tu l'as crée. Donc comme c'est samedi (Bingo Aski, ce n'est qu'un début ;-) )
http://cjoint.com/?kDvwKIN3Fd
PS: Appel à tout le monde !!! toutes les versions de VB6 supportent elles les modules de classes ? Je n'en suis pas sûr :-(
-- Cordialement,
Jacques.
Bonsoir Dan,
Dan a écrit :
Bonjour.
J'ai procédé comme tu me l'as indiqué et à la premiere ligne de commande1
j'ai l'erreur;
type défini par l'utilisateur non défini.
je ne suis pas trés fort en VB mais je ne comprends pas.
Peux tu m'aider?
Il est probale que tu aie mal nommé le module de classe de Zoury , si tu
l'as crée. Donc comme c'est samedi (Bingo Aski, ce n'est qu'un début ;-) )
http://cjoint.com/?kDvwKIN3Fd
PS: Appel à tout le monde !!! toutes les versions de VB6 supportent
elles les modules de classes ? Je n'en suis pas sûr :-(
Bonjour. J'ai procédé comme tu me l'as indiqué et à la premiere ligne de commande1 j'ai l'erreur; type défini par l'utilisateur non défini. je ne suis pas trés fort en VB mais je ne comprends pas. Peux tu m'aider?
Il est probale que tu aie mal nommé le module de classe de Zoury , si tu l'as crée. Donc comme c'est samedi (Bingo Aski, ce n'est qu'un début ;-) )
http://cjoint.com/?kDvwKIN3Fd
PS: Appel à tout le monde !!! toutes les versions de VB6 supportent elles les modules de classes ? Je n'en suis pas sûr :-(
-- Cordialement,
Jacques.
Aski
Salutatoi Jacques93,
Il est probale que tu aie mal nommé le module de classe de Zoury , si tu l'as crée. Donc comme c'est samedi (Bingo Aski, ce n'est qu'un début ;-) )
Bon courage. lol
Amicalement
Aski
Salutatoi Jacques93,
Il est probale que tu aie mal nommé le module de classe de Zoury , si
tu l'as crée. Donc comme c'est samedi (Bingo Aski, ce n'est qu'un
début ;-) )
> PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas implémenter l'accès aux registre distants, avec RegConnectRegistry :-D
Hehe !
Je n'y ai plus touché depuis un bout... Aussi , j'ai abandonné l'idée quand j'ai découvert cette classe : http://www.killervb.com/RegistryKey.aspx
Pourquoi recodé ce qui est déjà parfait. ;O)
-- Cordialement Yanick MVP pour Visual Basic
Jacques93
Bonsoir Zoury, Zoury a écrit :
PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas implémenter l'accès aux registre distants, avec RegConnectRegistry :-D
Hehe !
Je n'y ai plus touché depuis un bout... Aussi , j'ai abandonné l'idée quand j'ai découvert cette classe : http://www.killervb.com/RegistryKey.aspx
Pourquoi recodé ce qui est déjà parfait. ;O)
Absolument, faut pas réinventer la roue, et la roue est un cercle parfait, sauf quand elle est carré ;-) Ce n'était qu'un clin d'oeil.
Sinon, .Net ça roule ? bientôt la version 2005. Y a t-il un petit cocktail dinatoire prévu au Canada ? Ici c'est au Carrousel du Louvre, je crois, prévu pour le lancement mondial, le 8 novembre, pourquoi pas le 1er novembre avec citrouille au menu ??? :-D
Petite précision, pour le lien de Zoury, il faut téléchager :
PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas
implémenter l'accès aux registre distants, avec
RegConnectRegistry :-D
Hehe !
Je n'y ai plus touché depuis un bout... Aussi , j'ai abandonné l'idée quand
j'ai découvert cette classe :
http://www.killervb.com/RegistryKey.aspx
Pourquoi recodé ce qui est déjà parfait. ;O)
Absolument, faut pas réinventer la roue, et la roue est un cercle
parfait, sauf quand elle est carré ;-)
Ce n'était qu'un clin d'oeil.
Sinon, .Net ça roule ? bientôt la version 2005. Y a t-il un petit
cocktail dinatoire prévu au Canada ? Ici c'est au Carrousel du Louvre,
je crois, prévu pour le lancement mondial, le 8 novembre, pourquoi pas
le 1er novembre avec citrouille au menu ??? :-D
Petite précision, pour le lien de Zoury, il faut téléchager :
PS Pour Zoury : Pourquoi, à moins d'avoir mal vu, n'avoir pas implémenter l'accès aux registre distants, avec RegConnectRegistry :-D
Hehe !
Je n'y ai plus touché depuis un bout... Aussi , j'ai abandonné l'idée quand j'ai découvert cette classe : http://www.killervb.com/RegistryKey.aspx
Pourquoi recodé ce qui est déjà parfait. ;O)
Absolument, faut pas réinventer la roue, et la roue est un cercle parfait, sauf quand elle est carré ;-) Ce n'était qu'un clin d'oeil.
Sinon, .Net ça roule ? bientôt la version 2005. Y a t-il un petit cocktail dinatoire prévu au Canada ? Ici c'est au Carrousel du Louvre, je crois, prévu pour le lancement mondial, le 8 novembre, pourquoi pas le 1er novembre avec citrouille au menu ??? :-D
Petite précision, pour le lien de Zoury, il faut téléchager :
> Sinon, .Net ça roule ? bientôt la version 2005. Y a t-il un petit cocktail dinatoire prévu au Canada ?
Ce serait les 30 novembre et 1 décembre (à Québec) si je me fie à la denière invitation à ce sujet. J'vais peut-être bien y faire un tour afin de satisfaire ma curiosité... :O)
-- Cordialement Yanick MVP pour Visual Basic
> Sinon, .Net ça roule ? bientôt la version 2005. Y a t-il un petit cocktail
dinatoire prévu au Canada ?
Ce serait les 30 novembre et 1 décembre (à Québec) si je me fie à la denière
invitation à ce sujet. J'vais peut-être bien y faire un tour afin de
satisfaire ma curiosité... :O)
> Sinon, .Net ça roule ? bientôt la version 2005. Y a t-il un petit cocktail dinatoire prévu au Canada ?
Ce serait les 30 novembre et 1 décembre (à Québec) si je me fie à la denière invitation à ce sujet. J'vais peut-être bien y faire un tour afin de satisfaire ma curiosité... :O)