Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Вниз

Еще раз про удаление записи в реестре   Найти похожие ветки 

 
pavel_guzhanov   (2004-12-20 13:48) [0]

Уважаемые мастера!
Я уже поднимал этот вопрос, про удаление записи в реестре. Так у меня ничего и не получилось...
Возможно(а правильнее сказать "наверняка"), это получается из-за моего незнания "матчасти", т.е. теории работы с реестром. Поэтому прошу вас не счесть за труд и просвятить меня немного. Я считаю, что для удаления записи из реестра надо:
1. Соединиться с реестром (RegConnectRegistry)
2. Открыть ключ (RegOpenKey)
3. Удалить запись или значение (RegDeleteKey или RegDeleteValue)
Если я не прав, поправьте пожалуйста.
Первые две функции возвращают у меня значение ERROR_SUCCESS, т.е все нормально, последняя же возвращает какое-то другое значение, т.е не срабатывает.
Если я прав в своих рассуждениях, то подскажите пожалуйста, как вызывается функция RegDeleteKey?. Первый параметр - HKEY_LOCAL_MACHINE, а чтто использовать в качестве второго параметра?
Спасибо


 
Digitman ©   (2004-12-20 14:25) [1]


> последняя же возвращает какое-то другое значение


If the function fails, the return value is a nonzero error code defined in WINERROR.H. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.


 
Digitman ©   (2004-12-20 14:25) [2]


> последняя же возвращает какое-то другое значение


If the function fails, the return value is a nonzero error code defined in WINERROR.H. You can use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error.


 
Digitman ©   (2004-12-20 14:29) [3]


> чтто использовать в качестве второго параметра?


оносительный путь к ключу, не включающий в себя корень ветки, т.е. то что задано 1-м параметром, как то

HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS


 
pavel_guzhanov   (2004-12-20 15:19) [4]

я вторым параметром указываю

"Software\Microsoft\Windows\CurrentVersion\Run\SystemInfo\".

А файл WINERROR.H я почему-то найти не могу


 
Digitman ©   (2004-12-20 15:31) [5]

нет никакого станд.подключа SystemInfo в подключе Run


 
pavel_guzhanov   (2004-12-20 15:47) [6]

Это не стандартный подключ. Этот подключ создан другой моей программой, и теперь мне надо его удалить(((


 
pavel_guzhanov   (2004-12-20 15:48) [7]

а значение эта функция возвращает 2


 
Digitman ©   (2004-12-20 16:01) [8]


> а значение эта функция возвращает 2


фрагмент файла winerror.h для приведенного кода отказа :

//
// MessageId: ERROR_FILE_NOT_FOUND
//
// MessageText:
//
//  The system cannot find the file specified.
//
#define ERROR_FILE_NOT_FOUND             2L


 
pavel_guzhanov   (2004-12-20 16:50) [9]

Ну а все-таки, я делаю вот так:
RegConnectRegistry(nil, HKEY_LOCAL_MACHINE, Key);
RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", key);
RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run\SystemInfo\")

В результате запись не удаляется. Я знаю, что проблема в RegDeleteKey. Подскажите, что я делаю не правильно


 
Digitman ©   (2004-12-20 17:40) [10]

зачем ты открываешь ключ

HКLM\Software\Microsoft\Windows\CurrentVersion\Run

если все что тебе нужно - это просто удалить ключ

HKLM\Software\Microsoft\Windows\CurrentVersion\Run\SystemInfo

?

поясни свою глубокую мысль ..


 
pavel_guzhanov   (2004-12-20 17:55) [11]

про свою глубокую мысль я писал в самом вопросе: от незнания теории работы с реестром, поэтому и обращаюсь за помощью. Но если я ключ не открываю, все равно не удаляется тот ключ, который мне надо удалить...


 
Leonid Troyanovsky ©   (2004-12-20 21:38) [12]


> pavel_guzhanov   (20.12.04 16:50) [9]
> Ну а все-таки, я делаю вот так:
> RegConnectRegistry(nil, HKEY_LOCAL_MACHINE, Key);
> RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run",
> key);
> RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run\SystemInfo\")
> В результате запись не удаляется. Я знаю, что проблема в
> RegDeleteKey. Подскажите, что я делаю не правильно


Во-первых, ты не делаешь Win32Check(.. = ERROR_SUCCESS);
Во-вторых, при удалении RegDeleteKey нужен ключ,
полученный от RegConnectRegistry (хотя, видимо,
имелся ввиду локальный компьютер, а значит RegConnectRegistry
и вовсе не нужен)
В-третьих, RegDeleteKey не удаляет ключи, содержащие субключи.
В-четвертых, ключи открывают RegOpenKeyEx и т.д.

Короче, читать msdn до просветления.

И, вообще, почему не TRegistry ?

--
С уважением, LVT.


 
pavel_guzhanov   (2004-12-21 11:44) [13]

Ё-моё, неужели так трудно написать всего одну строчку, правильную? Здесь самый посещаемый форум, посвященный delphi, неплохие спецы, бывает, что даются очень даже дельные и разумные советы, но иногда, кроме того, что надо читать msdn ничего добиться нельзя. Я этот вопрос за последние дни задавал дважды, просил, чтобы ответили на простой вопрос :"как это сделать правильно?", получил кучу ответов, но ни в одном не было ни строчки кода, единственной, необходимой. Я понимаю, что проще написать целые петиции, состязаясь в остроумии, чем просто написать одну работающую строчку. Но я то на форум пришел за помощью, и справку я пердварительно прочитал, но видимо что-то недопонял, не работает у меня это дело.
Я, конечно, извиняюсь, если кого-то обидел из тех, кто искренне хотел помочь


 
BiN ©   (2004-12-21 14:09) [14]

Но я то на форум пришел за помощью, и справку я пердварительно прочитал, но видимо что-то недопонял

"Не смешите мои тапочки" (с)

Win32Check(RegConnectRegistry(nil, HKEY_LOCAL_MACHINE, Key)=ERROR_SUCCESS);
Win32Check(RegDeleteKey(Key, "Software\Microsoft\Windows\CurrentVersion\Run\SystemInfo\")=ERROR_SUCCESS);

см также SHDeleteKey


 
BiN ©   (2004-12-21 14:15) [15]

Сорри, корректнее было бы:

dwRes:=RegConnectRegistry(nil, HKEY_LOCAL_MACHINE, Key);
if dwRes<>ERROR_SUCCESS then
 raise EOSError.CreateResFmt(@SOSError, [dwRes,
     SysErrorMessage(dwRes)]


 
pavel_guzhanov   (2004-12-21 15:10) [16]

Спасибо. Еще раз извиняюсь за грубость...


 
Leonid Troyanovsky ©   (2004-12-21 15:24) [17]


> pavel_guzhanov   (21.12.04 11:44) [13]

> что проще написать целые петиции, состязаясь в остроумии,
> чем просто написать одну работающую строчку. Но я то на
> форум пришел за помощью, и справку я пердварительно прочитал,

Что непонятно - то и уточняй.
Спросили, какие ошибки - я ответил.
Что я посоветовал неправильно?
Что я посоветовал из того, чего нет в msdn.
Где ты усмотрел состязания?

> но видимо что-то недопонял, не работает у меня это дело.

ЧТО у тебя не работает?
Два дня вполне достаточно для внятного изложения.

> Я, конечно, извиняюсь, если кого-то обидел из тех, кто искренне
> хотел помочь

Ну-ну.

Я добавляю ключ
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\SystemInfo\

Затем делаю


procedure TForm1.Button1Click(Sender: TObject);
begin
 RegDeleteKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run\SystemInfo\");
end;


И, о чудо, ключ удаляется (ясное дело, на этой машине
я имею права на модификацию этой ветви реестра).

А, вообще, судя по тому, что это все-таки Run, то в нем,
IMHO, живут не ключи, а значения (string value) с именами
пускаемых экзешников.
И, возможно, что нужно было RegDeleteValue.
Но, рассказывать про это я не буду.
Потому как не уверен, что это так, кроме того,
оно подробно расписано в msdn, и, наконец,
я утомился уже на ключах.

--
С уважением, LVT.


 
pavel_guzhanov   (2004-12-22 08:55) [18]

Народ, огромное спасибо за помощь!
Все мне подсказывали верно, только я тупил. Щас разобрался, все работает, главное, что я не мог допереть до вот этого:

> А, вообще, судя по тому, что это все-таки Run, то в нем,
> IMHO, живут не ключи, а значения (string value) с именами
> пускаемых экзешников.
> И, возможно, что нужно было RegDeleteValue.

Надеюсь, что теперь у меня с терминологией в реестре проблемы закончатся:))).
Еще раз спасибо всем, кто оказывал посильную помощь



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.035 c
3-1105970020
denis24
2005-01-17 16:53
2005.02.13
where date_future=:p2


1-1107106333
Dmitry_04
2005-01-30 20:32
2005.02.13
Определение Form.Width и Form.Height


1-1107189233
xman
2005-01-31 19:33
2005.02.13
ListView


6-1101750607
AdmeraL
2004-11-29 20:50
2005.02.13
Internet


1-1107157149
denis24
2005-01-31 10:39
2005.02.13
checkbox в колонке stringgrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский