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

Вниз

Оповещение всех об изменениях в системном реестре   Найти похожие ветки 

 
Jetus ©   (2005-02-07 22:13) [0]

Здравствуйте, господа программисты!
Я изменяю некоторые данные в реестре (изменяю целое число в ключе "ItemsCount"):

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HFSYS\Parameters]
"ItemsCount"=dword:00000003

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

procedure TForm1.Button1Click(Sender: TObject);
begin
 SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0,
   LongInt(PChar("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HFSYS\Parameters")));
end;

однако это не помогает.

Что делать?


 
Gero ©   (2005-02-07 22:25) [1]

Кто и как должен на это реагировать?


 
Fay ©   (2005-02-07 22:32) [2]

2 Jetus ©   (07.02.05 22:13)
Если склероз мне не изменяет, то ты в LParam передаёшь указатель "куда-то". Готовься к AV.

>> SendMessage(HWND_BROADCAST, ...
If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows

top-level, грубо говоря, в случае Delphi - это Application.

P.S.
IMHO, в твоём случае нужны mailslot-ы.


 
Jetus ©   (2005-02-08 20:47) [3]

2 Fay
Просвети меня, причем тут вообще mailslot-ы???

2 Gero ©   (07.02.05 22:25) [1]
>> Кто и как должен на это реагировать?

Рассказываю. Есть одна наплохая програмка Hide Folder, которая может скрывать папки в ХР, да так, что ни один файловый менеджер не видит. А работает она через реестр. В ветке
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HFSYS\Parameters"
есть ключи:
"ItemsCount"=dword:00000003  //это сколько таких вот скрытых папок вообще есть
"Item0"="C:\HideMe\"  //Это одна из папок которую надо скрыть

Так вот, я хочу написать прогу, которая будет лучше чем Hide Folder, однако тогда как Hide Folder открывает/прячет папки Мгновенно, то мне надо перезагрузиться, чтобы папки открылись/исчезли.


 
Набережных С. ©   (2005-02-08 21:26) [4]

RegNotifyChangeKeyValue из сервиса.


 
Jetus ©   (2005-02-09 03:00) [5]

2 Набережных С.

А можно небольшой примерчик, как с этой процедуркой работать?


 
Fay ©   (2005-02-09 04:05) [6]

#include <stdio.h>
#include <windows.h>

void main(int argc, char *argv[])
{
DWORD  dwFilter = REG_NOTIFY_CHANGE_NAME |
                 REG_NOTIFY_CHANGE_ATTRIBUTES |
                 REG_NOTIFY_CHANGE_LAST_SET |
                 REG_NOTIFY_CHANGE_SECURITY;

HANDLE hEvent;
HKEY   hMainKey;
HKEY   hKey;
LONG   lErrorCode;

// Display the usage error message.
if (argc != 3)
{
   printf("Usage: notify [HKLM/HKU/HKCU/HKCR/HCC] [subkey]\n");
   return;
}

// Convert parameters to appropriate handles.
if (strcmp("HKLM", argv[1]) == 0)
  hMainKey = HKEY_LOCAL_MACHINE;
else if (strcmp("HKU", argv[1]) == 0)
  hMainKey = HKEY_USERS;
else if (strcmp("HKCU", argv[1]) == 0)
  hMainKey = HKEY_CURRENT_USER;
else if (strcmp("HKCR", argv[1]) == 0)
  hMainKey = HKEY_CLASSES_ROOT;
else if (strcmp("HCC", argv[1]) == 0)
  hMainKey = HKEY_CURRENT_CONFIG;
else
{
   printf("Usage: notify [HKLM/HKU/HKCU/HKCR/HCC] [subkey]\n");
   return;
}

// Open a key.
lErrorCode = RegOpenKeyEx(hMainKey, argv[2], 0, KEY_NOTIFY, &hKey);
if (lErrorCode != ERROR_SUCCESS)
  printf("Error in RegOpenKeyEx.\n");

// Create an event.
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (hEvent == NULL)
   printf("Error in CreateEvent.\n");

// Watch the registry key for a change of value.
lErrorCode = RegNotifyChangeKeyValue(hKey,
                                    TRUE,
                                    dwFilter,
                                    hEvent,
                                    TRUE);
if (lErrorCode != ERROR_SUCCESS)
  printf("Error in RegNotifyChangeKeyValue.\n");

// Wait for an event to occur.
if (WaitForSingleObject(hEvent, INFINITE) == WAIT_FAILED)
  printf("Error in WaitForSingleObject.\n");

// Close the key.
lErrorCode = RegCloseKey(hKey);
if (lErrorCode != ERROR_SUCCESS)
  printf("Error in RegCloseKey.\n");

// Close the handle.
if (!RegCloseKey(hEvent))
  printf("Error in RegCloseKey.\n");
}


 
DeadMeat ©   (2005-02-09 12:27) [7]

ИМХО.. Проще перезапустить сервис. Да и правильней наверняка. Ведь реагировать по сути должен только он.


 
Jetus ©   (2005-02-09 12:52) [8]

Я ничего не понял... Какой еще сервис? Для чего его запускать? Как запускать?



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

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

Наверх




Память: 0.49 MB
Время: 0.025 c
1-1110272807
rolex
2005-03-08 12:06
2005.03.20
У меня вопросик... у самого не хватает логики, чтобы решить его.


14-1109618499
dmk
2005-02-28 22:21
2005.03.20
D2005 и скорость работы приложений


14-1109684176
Vlad Oshin
2005-03-01 16:36
2005.03.20
WinXP не подключает сетевые диски


4-1107533427
_Вован
2005-02-04 19:10
2005.03.20
Работа с системным реестром


3-1108115304
DelphiN!
2005-02-11 12:48
2005.03.20
Посоветуйте тип баз данных