Форум: "WinAPI";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизОповещение всех об изменениях в системном реестре Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c