cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 2018
-
12 mai 2006 à 12:05
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDerniè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.
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDerniè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)
RegCloseKey hSubkey
Next
RegCloseKey hKey
Else
MsgBox "Unable to open key: " & lResult
End If
End Sub
Sechaud
Messages postés288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDerniè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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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és288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDerniè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.
*******************************************
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és956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 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és625Date d'inscriptionvendredi 23 avril 2004StatutMembreDernière intervention25 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...
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és15117Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention10 mai 2024159 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és2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 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és288Date d'inscriptionjeudi 28 octobre 2004StatutMembreDerniè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és15117Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention10 mai 2024159 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és2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201822 12 mai 2006 à 12:05
13 mai 2006 à 08:31
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
13 mai 2006 à 07:39
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.
12 mai 2006 à 18:36
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 "*"
++
12 mai 2006 à 17:56
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.
12 mai 2006 à 16:09
vive la parano...
ça sauvegarde pas énormément... vu le nombre de pc dans le monde t'inquiète tu sera pas espioné lol
12 mai 2006 à 16:04
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
++
12 mai 2006 à 15:01
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.
12 mai 2006 à 14:51
'*******************
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.
12 mai 2006 à 14:06
Extension=right(Filename,instrrev(FileName,".")+1,len(Filename)-instrrev(FileName,"."))
12 mai 2006 à 14:04
Un RegOpenKey + RegNotifyChangeKeyValue + RegCloseKey et un peu de google pour assembler tout ca et sa roule :)
Bonne continuation ++
12 mai 2006 à 13:58
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é.
12 mai 2006 à 12:45
12 mai 2006 à 12:05
http://www.vbfrance.com/codes/NOTIFICATION-MODIFICATION-BASE-REGISTRE_37503.aspx
Bonne continuation ++