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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.006 c
1-64662
ASM
2002-05-05 14:43
2002.05.20
Вопрос по Splitter у


3-64454
volodya_
2002-04-24 17:55
2002.05.20
Кодировка


3-64470
Брат
2002-04-22 12:00
2002.05.20
Сообщение DEADLOCK


4-64862
fag2000@ok.ru
2002-03-18 11:22
2002.05.20
Как получить handler окна?


1-64578
ZZ
2002-05-06 19:55
2002.05.20
Хочу уточнить пару вопросов по работе с Run-Time пакетами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский