Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.20;
Скачать: CL | DM;

Вниз

Запись в реестр.   Найти похожие ветки 

 
Serd_hhc   (2002-03-17 13:47) [0]

Уважаемые мастера,
(ещё раз спосибо VuDZ"у)

Как мне сделать запись в реестре, не используя "REGISTRY" ?

Запись вот сюды:
HKLM\Software\Microsoft\Windows\CurrentVersion\Run

Sdf = "bla-bla-bla"

С примером пожалуйста.
Заранее спасибо!!


 
Иван Шихалев ©   (2002-03-17 14:03) [1]

А давай без примера? Просто почитаешь справку по RegCreateKey, RegSetValueEx и так далее...


 
Serd_hhc   (2002-03-17 14:07) [2]

Иван Шихалев,

Ты сабж (этот) хорошо читал. Тут же написано :
Не используя REGISTRY


 
VuDZ ©   (2002-03-17 14:08) [3]

ну это просто празник какой-то... :>

PHKEY pK = new HKEY;
if (RegOpenKey(HKEY_LOCAL_MACHINE,
"Software\\Microsoft\\Windows\\CurrentVersion\\Run",
pK) == ERROR_SUCCESS)
if (RegSetValueEx(*pK, "sdf",0, REG_SZ, "bla-bla-bla", 13) == ERROR_SUCCESS)
printf("all right :>\n");
RegCloseKey(*pK);
delete pK;

разберёшся?


 
VuDZ ©   (2002-03-17 14:09) [4]


> REGISTRY

пр......... не увидел...
а ты, типа, хочешь писать прямо в файлы, содержащие реестр? :>


 
Иван Шихалев ©   (2002-03-17 14:11) [5]

Крут. Адназначна.

Тогда уж мелочиться не надо - писать не в файлы, а с физическими секторами диска работать...


 
Serd_hhc   (2002-03-17 14:12) [6]

Ну Windows же как-то обращается к реестру....


 
VuDZ ©   (2002-03-17 14:13) [7]

все обращения идут через эти ф-ии. Или ты думаешь, что кто0тобудет по 30-50 раз дублировать их содержание?


 
Serd_hhc   (2002-03-17 14:17) [8]

Э-э-э-э-э-э-э........????
Ну и как мне быть.
Мне нужно уменьшить размер программы до минимума (пока 20кб.)
Мне осталось только Запись в реестр добавить. А может лучше куда-нибудь в другое место (кроме Win.ini) ? И если модно, то куда ?


 
Serd_hhc   (2002-03-17 14:19) [9]

Т.е. нужен автозапуск.


 
Иван Шихалев ©   (2002-03-17 14:23) [10]

Если использовать всякую хрень вместо вызова WinAPI, то не уменьшишь, а увеличишь размер программы.


 
VuDZ ©   (2002-03-17 14:25) [11]

слушай, вставь экспорт из kernel32.dll или GetProcAddress(), что тебе ближе, и не мучейся...
и сожми UPX трою.
есть ещё один метод, который я использовал в своё время, но не расскажу.
подсказка - это связано с именами файлов


 
Serd_hhc   (2002-03-17 14:26) [12]

Куда, кроме просто Автозапуск в Пуск-Программы-Автозагрузка и файл win.ini можно добавить что-либо для автозапуска?


 
Serd_hhc   (2002-03-17 14:30) [13]

Как сделать експорт с помощью kernel32.dll ?


 
Иван Шихалев ©   (2002-03-17 14:32) [14]

to Serg_hhc

Если нужно минимизировать размер, то в реестр будет самое то. Добавление ярлыка в меню или запись в win.ini ничуть не сэкономит место.

Кстати, если 20К - это слишком много, то наверное стоит переходить на другое средство разработки - для Delphi это весьма маленький размер. У меня что-либо более-менее серьезное только в 40К умещалось.

to VuDZ

И чем явное прописывание экспорта будет отличаться от uses Windows в плане размера?


 
Serd_hhc   (2002-03-17 14:36) [15]

uses Windows у меня есть, но для записи в реестр нужно REGISTRY использовать, но это + 40~50 КБ - уже плохо.


 
Иван Шихалев ©   (2002-03-17 14:38) [16]

Не нужно. Те функции, которые я привел - в модуле Windows. И сами по себе добавят 10-20 байт.


 
Serd_hhc   (2002-03-17 14:43) [17]

А где в спраке про эти функции написано, я что-то не нащёл, може примерчик покажешь на чтение/запись ? Пожалуйста.....


 
Иван Шихалев ©   (2002-03-17 14:50) [18]

Справка по WinAPI. "Registry Functions". А найти просто: пишешь в редакторе Delphi "RegCreateKey", ставишь на него текстовый курсор и жмешь F1.

Примерчик мне искать или писать в лом. Примерно так:

RegCreateKey (bla-bla-bla, Key);
RegSetValueEx (Key, bla-bla-bla, Value);
RegCloseKey (Key);


Ну, там еще хорошо бы проверять результат функций на ошибку...


 
Serd_hhc   (2002-03-17 14:54) [19]

А как читать значения? Ну.. вдруг там такие уже есть?


 
Иван Шихалев ©   (2002-03-17 14:56) [20]

RegQueryValueEx, естественно.


 
Serd_hhc   (2002-03-17 15:00) [21]

А как делать записи формата string ?


 
Serd_hhc   (2002-03-17 15:00) [22]

А как делать записи формата string, а не Cardinal?


 
Serd_hhc   (2002-03-17 15:13) [23]


Key:=HKEY_LOCAL_MACHINE;
RegCreateKey (Key,PChar("\Software\Microsoft\Windows\CurrentVersion\Run\Cache32"),Key);
RegSetValueEx (Key, PChar(ParamStr(0)), 1,1,nil,1);
RegCloseKey (Key);

Не записывает что-то...


 
ZZ   (2002-03-17 17:19) [24]

Serd_hhc
А что за раздел такой странный \Software\Microsoft\Windows\CurrentVersion\Run\ Cache32??
У меня такого нет :-( И думаю винда из него запускать не будет.

ЗЫ. RegCloseKey (Key); ?????


 
Cobalt ©   (2002-03-18 22:02) [25]

Уважаемый Serd_hhc (17.03.02 15:13)

Да не торопитесь вы так.

RegSetValueEx(hKey: HKEY;// Ключ (уже открытый, или HKEY_CLASSES_ROOT и т.п.)
lpValueName: PChar;// Имя параметра
Reserved: DWORD;// = 0
dwType: DWORD; //напр. REG_SZ
lpData: Pointer; //если REG_SZ, то PChar(ParamStr(0)), т.е. собственно данные
cbData: DWORD//размер данных, т.е. Length(ParamStr(0))
): Longint;//если вернёт не 0, то смотри
ShowMessage("Ошибка записи в реестр,"#13#10+SysErrorMessage(GetLastError));

По поводу размера - если 20 кб для тебя много, то переходи на С, там можно дойти до 9-10 кб.
Он хоть и требует RunTime библиотеку, но она, как правило, есть на любом компе с Win98+Explorer.
Вообще, С по сравнению с Паскалём, более ( намного) управляемый язык. Взять хотя бы директивы препроцессора - мощное ср-во отладки, при помощи кот-го один мой знакомый узнавал, в какой строке какого файла произошла ошибка (при помощи 1 или 2-х строк директив)


 
VuDZ ©   (2002-03-19 01:59) [26]

да уж, а приведение типов это вообще песня.
ну про препроцессор и перегружаемые операторы, типа new & delete вообще помолчим.

Кстати, на счёт размера - простые утилиты, даже с GUI можно уместить в 10-15 кило, так что думайте-с...



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

Текущий архив: 2002.05.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
14-64827
SPeller
2002-04-11 01:36
2002.05.20
Библиотека RAR


14-64777
Agent Smith
2002-04-02 15:30
2002.05.20
Linux - forever!!!


1-64707
TPavel
2002-05-05 09:47
2002.05.20
Определение активности окна.


1-64593
GUYARD
2002-05-06 21:01
2002.05.20
Есть вопрос к Мастерам!


14-64821
VAleksey
2002-04-10 13:36
2002.05.20
HELP