Всего нуб при кодировании, любые советы приветствуются.RegQueryValueEx, нужна помощь
Это то, что я пытаюсь сделать:
1) Откройте ключ запуска в HKLM
2) Прочитайте REG_SZ я сделал под названием "Test".
3) Прочитайте данные "Test"
4) Если "эти данные", найденные затем удалить ключ.
5) Закройте ключ.
Что я делаю неправильно?
#include <iostream>
#include <Windows.h>
using namespace std;
int main() {
char value[1024];
DWORD value_length = 1024;
DWORD keytype = REG_SZ;
HKEY hk;
LONG result;
LONG result2;
char response;
cout << "Would you like to scan? (Y) or (N)";
cin >> response;
if (response == 'Y')
{
result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hk);
if (result == ERROR_SUCCESS) {
result2 = RegQueryValueEx(hk, ("Test"), NULL, &keytype, (LPBYTE)&value, &value_length);
if (result2 == ERROR_ACCESS_DENIED) {
cout << "Access Denied." << endl;
RegCloseKey(hk);
system("pause");
}
else if (result2 == ERROR_MORE_DATA) {
cout << "lpData buffer is too small to receive the data." << endl;
RegCloseKey(hk);
system("pause");
}
else if (result2 == ERROR_FILE_NOT_FOUND) {
cout << "Value does not exist for LpValueName." << endl;
RegCloseKey(hk);
system("pause");
}
else if (result2 == ERROR_SUCCESS) { //If the function succeeds, the return value is ERROR_SUCCESS.
cout << "The value read from the registry is: " << value << endl;
RegCloseKey(hk);
system("pause");
}
}
else if (result == ERROR_FILE_NOT_FOUND)
{
cout << "Key not found." << endl;
system("pause");
}
}
else if (response == 'N')
{
return 0;
system("pause");
}
}
Вы попробовали 'cout << значение << '\ n';' чтобы посмотреть, что он печатает? – Joel
В чем проблема? Вы уже знаете, как читать данные, вы уже это делаете. Данные находятся в вашем массиве 'value []'. Возвращаемое значение 'RegQueryValueEx()' (которое вы игнорируете) скажет вам, существует ли значение в открывшемся ключе или нет, а 'value_length' расскажет вам, сколько байтов было прочитано. Затем вам просто нужно отсканировать содержимое 'value []', например, с 'strncmp()', 'strstr()' и т. Д., В зависимости от ваших потребностей. Если вы найдете совпадение, вызовите 'RegDeleteValue()'. –
На несвязанной ноте, 'ERROR_SUCCESS' является вводящим в заблуждение именем! – CinCout