SURVEILLER LA CLÉ OPENSAVEMRU DU REGISTRE

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 - 12 mai 2006 à 12:05
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017 - 13 mai 2006 à 08:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/37559-surveiller-la-cle-opensavemru-du-registre

Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
13 mai 2006 à 08:31
J'ai trouvé un code qui permet de faire ce que je cherchais en utilisant:
Public Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" ( _
ByVal hKey As Long, _
ByVal lpClass As String, _
lpcbClass As Long, _
ByVal lpReserved As Long, _
lpcSubKeys As Long, _
lpcbMaxSubKeyLen As Long, _
lpcbMaxClassLen As Long, _
lpcValues As Long, _
lpcbMaxValueNameLen As Long, _
lpcbMaxValueLen As Long, _
lpcbSecurityDescriptor As Long, _
lpftLastWriteTime As FILETIME) As Long

Et pour tester
Private Sub Command6_Click()
Dim lResult As Long
Dim hKey As Long
Dim lNumKeys As Long ' Number of subkeys of open key
Dim lSubkeyNameLen As Long ' Length of the longest subkey name
Dim ft As FILETIME

Dim sRegPath As String


If RegOpenKeyEx(Hkey_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU", 0, KEY_READ, hKey) = ERROR_SUCCESS Then
' Get subkey information
lResult = RegQueryInfoKey(hKey, vbNullString, 0, 0, lNumKeys, lSubkeyNameLen, _
0, 0, 0, 0, 0, ft)
If lResult = ERROR_SUCCESS Then
Dim sMsg As String
sMsg = "Key: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU" & vbCrLf & vbCrLf
sMsg = sMsg & "Subkeys: " & lNumKeys & vbCrLf
sMsg = sMsg & "Longest subkey name: " & lSubkeyNameLen & vbCrLf
MsgBox sMsg
End If
' Use subkey information to enumerate subkeys
Dim lCtr As Long
Dim sBuffer As String
Dim lBuffer As Long
Dim hSubkey As Long
' Loop as many times as there are subkeys
For lCtr = 0 To lNumKeys - 1
' Initialize buffer to hold name to be 1 greater than maximum length
sBuffer = Space(lSubkeyNameLen) & Chr(0)
lBuffer = Len(sBuffer)
RegEnumKeyEx hKey, lCtr, sBuffer, lBuffer, 0, vbNullString, 0, ft
' Trim returned buffer to extract key name
sBuffer = Left(sBuffer, lBuffer)

sMsg = "Key " & lCtr & ": " & sBuffer & vbCrLf

' Open subkey
RegOpenKeyEx hKey, sBuffer, 0, KEY_READ, hSubkey
sMsg = sMsg & " Returned handle " & Hex(hSubkey) & vbCrLf
MsgBox sMsg

RegCloseKey hSubkey
Next
RegCloseKey hKey
Else
MsgBox "Unable to open key: " & lResult
End If

End Sub
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
13 mai 2006 à 07:39
Merci Draluorg pour ton idée de lire HKey_Class_Root pour en extraire les extensions.
J'ai trouvé un source qui les lit mais comme j'en trouve 763, je ne veux pas remplir ma Combo avec tout ça.
Ce que je voudrais faire, c'est les lire dans OpenSaveMRU, mais pour le moment je sèche.
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
12 mai 2006 à 18:36
re,

Eh bin si tu surveille la cle Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\
lorsque tu es notifie tu sais que c'est cette cle la qui a ete modifiee, apres tu scanne juste les valeurs pour savoir quelle est la modif...

Sinon pour enumerer les extentions dans classe root, je dirais plutot

Extension = Combo1.List(B)

If left(Extension, 1) <> "." Then 'Sortie

en oubliant pas que la premiere cle est "*"

++
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
12 mai 2006 à 17:56
NHenry ton idée est bonne.J'ai essayé, c'est OK si on met
Combo1.ListCount
Tu as dû voir que j'avais utilisé un anti-dépassement peu glorieux:
If Combo1.List(B) = "zip" Then 'Sortie si fin atteinte
Exit Sub
End If
Tu me dis d'énumérer les clé du registre mais justement je n'y arrive pas.

******************************************
Draluorg
Merci.J'avais trouvé et essayé le source de:
http://www.allapi.net/apilist/5B7128D345F8EBCE2557C095EED673D5.html
mais il ne dit pas où s'est fait la modif ni ce qui a été modifié.

*******************************************
Eldim
Je ne suis pas parano, car je restaure quand j'ai un pépin, mais je trouve anormal que l'on nous stocke nos actions.
De plus il existe plein d'autres clés qui sauvent des MRU.
cs_eldim Messages postés 956 Date d'inscription lundi 30 mai 2005 Statut Membre Dernière intervention 21 août 2014 1
12 mai 2006 à 16:09
bonjour,

vive la parano...
ça sauvegarde pas énormément... vu le nombre de pc dans le monde t'inquiète tu sera pas espioné lol
draluorg Messages postés 625 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 25 novembre 2010
12 mai 2006 à 16:04
Salut a tous,

Eh il suffit de desactiver cette fonction de Windows...

Il doit y avoir une valeur genre NoSaveMru ou truc du genre, cherches dans la cle Software\Microsoft\explorer\..

Sinon fais une petite recherche dans google tu devrais trouver assez facilement...

Sinon pour RegNotifyChangeKeyValue en vb6 il y a cet exemple:
http://www.allapi.net/apilist/5B7128D345F8EBCE2557C095EED673D5.html

++
NHenry Messages postés 15117 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 10 mai 2024 159
12 mai 2006 à 15:01
Tu peux énumérer les clé du registre.

Sinon, j'ai vu ce code :
For B = 0 To 90 '90 est une estimation du Nb d'extensions

List1.AddItem "Avec l'extension: " & Combo1.List(B)

mMainKey = Hkey_CURRENT_USER
txtSubkey = "Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU" & Combo1.List(B)

à la place de fixer 90 en dur, tu as essayer Combo1.Count ?
Sinon, évite les noms par défaut.
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
12 mai 2006 à 14:51
Merci Willi, je vais voir ça.

'*******************

NHenry merci pour ton code mais il ne marche pas.
J'ai essayé avec

FileName = Text1.Text
Text2.Text = Right(FileName, InStrRev(FileName, ".") + 1, Len(FileName) - InStrRev(FileName, "."))

Si je fais très simple:
FileName = Text1.Text
Text2.Text = Right(FileName, 3) j'ai l'extension car c'est presque toujours 3 Cars

Mais moi ce n'est pas ça que je voulais
Je voulais lire les sous-clés de OpenSaveMRU qui portent le nom des extensions, comme tu peux le voir dans la base de Registre.
C'est là que je n'ai pas su.
NHenry Messages postés 15117 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 10 mai 2024 159
12 mai 2006 à 14:06
Pour récupérer l'extension d'un fichier :
Extension=right(Filename,instrrev(FileName,".")+1,len(Filename)-instrrev(FileName,"."))
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
12 mai 2006 à 14:04
Sechaud, pas besoin de notion .net pour manipuler les fonctions de base de registre.
Un RegOpenKey + RegNotifyChangeKeyValue + RegCloseKey et un peu de google pour assembler tout ca et sa roule :)

Bonne continuation ++
Sechaud Messages postés 288 Date d'inscription jeudi 28 octobre 2004 Statut Membre Dernière intervention 3 janvier 2017
12 mai 2006 à 13:58
Merci Willi pour ton conseil mais je ne sais pas programmer en .net

NHenry, j'ai bien pensé moi aussi récupérer les extensions en lisant les sous-clés
de OpenSaveMRU mais je n'y suis pas arrivé.
NHenry Messages postés 15117 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 10 mai 2024 159
12 mai 2006 à 12:45
Question, pourquoi mettre une liste d'extension en dur, alors que tu peux les récupérées directement à partir des noms de fichier ?
cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
12 mai 2006 à 12:05
Pourquoi faire compliqué quand il y a beaucoup plus simple avec RegNotifyChangeKeyValue, tu trouveras un exemple (en .net) ici
http://www.vbfrance.com/codes/NOTIFICATION-MODIFICATION-BASE-REGISTRE_37503.aspx

Bonne continuation ++
Rejoignez-nous