04. juni 2003 - 21:20Der er
48 kommentarer og 3 løsninger
Slette filer og registry-keys vha. C++
Hej
Så er det blevet tid til at dele lidt points :)
Jeg har et mindre problem. Jeg vil gerne lave et program, der kan slette nogle keys i registreringsdatabasen + nogle filer på harddisken. Programmet skal kunne køre i Windows NT, 2000 og XP.
Efter 2 timers søgen har bikset flg. kode sammen, som selvfølgelig ikke virker:
Hvad jeg gør forkert? Jeg skal lige sige, at jeg er lige startet med at kode i Visual C++ 6.0 i dag. Nogle af jer der kan anbefale nogle gode bøger eller evt. tutorials om VC++?
Jeg har kigget på dokumentation til RegUnLoadKey. Problemet er, at jeg ikke kan læse dokumentationen. Jeg forstår simpelthen ikke en dyt! Kan du forklare, hvad det er jeg skal gøre?
// // MessageId: ERROR_PRIVILEGE_NOT_HELD // // MessageText: // // A required privilege is not held by the client. // #define ERROR_PRIVILEGE_NOT_HELD 1314L
hKey [in] Handle to the key to be unloaded. This parameter can be a handle returned by a call to RegConnectRegistry function or one of the following predefined handles:
HKEY_LOCAL_MACHINE HKEY_USERS
så kan du kun bruge de 2 og ikke HKEY_CURRENT_CONFIG !
Ahaem.... RegUnloadKey() sletter ikke en key. Den er beregnet til, i samarbejde med RegLoadKey() at loade en key for den aktuelle user, eller et controlset. Det er IKKE funktioner man normalt har brug for...
For at slette en key, skal den åbnes med RegOpenKeyEx() og derefter slettes med RegDeleteKey()
Software\myApp\test bliver kun slettet, hvis der ikke er andre keys under test. Hvordan kan jeg gøre sådan, at den sletter "test"-nøglen uanset om der ligger andre nøgler under "test" eller ej?
The subkey to be deleted must not have subkeys. To delete a key and all its subkeys, you need to recursively enumerate the subkeys and delete them individually. To recursively delete keys, use the SHDeleteKey function.
Windows Me/98/95: The function also deletes all subkeys and values. To delete a key only if the key has no subkeys or values, use the SHDeleteEmptyKey function.
Set objDelReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") For i = UBound(arrKeys) To 0 Step -1 If Not IsEmpty(arrKeys(i)) Then objDelReg.DeleteKey HKEY_LOCAL_MACHINE, arrKeys(i) End If Next
Sub GetSubKeys(strKeyPath) Dim arrSubKeys Dim objRegistry Dim strSubKey
If intArrayCounter = 0 Then ReDim Preserve arrKeys(1) Else ReDim Preserve arrKeys(intArrayCounter) End If
Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") objRegistry.EnumKey HKEY_LOCAL_MACHINE, strKeyPath, arrSubKeys
If Not IsNull(arrSubKeys) Then For Each strSubKey In arrSubKeys arrKeys(intArrayCounter) = strKeyPath & "\" & strSubKey intArrayCounter = intArrayCounter + 1 GetSubKeys strKeyPath & "\" & strSubKey Next End If
Jeg takker for hjælpen og håber I er tilfredse med points.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.