Вверх ↑
Этот топик читают: Гость
Ответов: 278
Рейтинг: 4
#1: 2008-01-07 01:26:48 ЛС | профиль | цитата
Вот такой вопросик, может кто знает:

Меняю (через рееестр, ветку HKCR, там где надо) иконку ассоциированного файла, ну допустим - sha.
Она как бы меняется, но проводник её ещё не видит, предпологая, что стоит прежняя. Если завершить его принудительно или перезапустить ОС - всё в поряде. Так вот, многие программы так делают, когда при смене ассоциации и смене, соответственно, его иконки - они делают некое обновление Explorer.
Так вот, название темы случайно не эта комманда, которую нужно послать системе, чтобы та обновилась? Если да, то, подскажите пожалуйста, кто знает, как это сделать. Если нет, то анологично
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
vip
#1.1контекстная реклама от партнеров
Ответов: 278
Рейтинг: 4
#2: 2008-01-07 12:25:19 ЛС | профиль | цитата
Ребят, ну не таите, пожалуйста, знаю, что вы знаете, что как-то можно..
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 1305
Рейтинг: 29
#3: 2008-01-07 12:35:19 ЛС | профиль | цитата
Как уведомить все приложения, что реестр был изменён?

Для этого можно послать в систему широковещательное сообщение WM_WININICHANGE, указав в нём, что изменения касаются реестра. Большинство приложений, работа которых связана с реестром, должны реагировать на сообщение WM_WININICHANGE.

Пример:


procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,LongInt(PChar('RegistrySection')));
end;

PS: судя по заголовку топика, ты об этом и сам уже знаешь
карма: 0

0
файлы: 1code_8082.txt [150B] [575]
Ответов: 278
Рейтинг: 4
#4: 2008-01-07 22:54:46 ЛС | профиль | цитата
v258, я понимаю, что иногда я очень странный тип (уж какой есть), но не понимаю почему этот код не обновляет ассоциации?

1. IC - пишу:
...
procedure THiAsmClass.doWinRefresh;
begin
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,LongInt(PChar('HKEY_CLASSES_ROOT\uufile')));
end;

2. Меняю параметр, который в текущем ключе задан по-умолчанию.
3. Смотрю при этом на проводник в упор на эту ассоциацию -> ничего, обновляю его по F5 -> ничего...

Вопрос: что я делаю не так?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 9906
Рейтинг: 351
#5: 2008-01-07 23:03:50 ЛС | профиль | цитата
Vanchila писал(а):
Вопрос: что я делаю не так?

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

Vanchila писал(а):
я очень странный тип (уж какой есть)

А кому от этого хуже, интересно
Ты чего-то делаешь
Получаешь "не работает"
Мы этого повторить не можем, недельные изыскания на предмет "угадать" - просто не хочется
Ну и славненько
карма: 9

0
Ответов: 278
Рейтинг: 4
#6: 2008-01-08 22:04:42 ЛС | профиль | цитата
Galkov писал(а):
Ну и славненько

Это не ответ
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 9906
Рейтинг: 351
#7: 2008-01-08 22:31:57 ЛС | профиль | цитата
Это ответ.
Для тех, кто в танке, поясняю: он дословно означает - "а вопроса-то и не было"
Будет вопрос, можно будет говорить.
Galkov писал(а):
Мы этого повторить не можем, недельные изыскания на предмет "угадать" - просто не хочется

карма: 9

0
Ответов: 2125
Рейтинг: 159
#8: 2008-01-09 12:28:28 ЛС | профиль | цитата
Vanchila писал(а):
иконку ассоциированного файла...
комманда, которую нужно послать системе, чтобы та обновилась?

Видимо

SystemParametersInfo(SPI_SETICONS,0,nil,SPIF_SENDCHANGE);
------------ Дoбавленo:

Не всё так просто оказалось...
Вот рабочий пример:


Add(Button,16419700,98,119)
{
Left=35
Top=35
link(onClick,13389651:doRead,[])
}
Add(InlineCode,10252830,364,140)
{
WorkPoints=#8:doNotify|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|7: public|48: procedure doNotify(var dt:TData; index:word);|5: end;|0:|14:implementation|0:|29:const WM_SETTINGCHANGE = $1A;|0:|31:procedure THiAsmClass.doNotify;|22:var dwResult:cardinal;|5:begin|54: SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE,|63: SPI_SETNONCLIENTMETRICS, cardinal(PChar('WindowMetrics')),|55: SMTO_NORMAL or SMTO_ABORTIFHUNG, 10000, dwResult);|4:end;|0:|4:end.|
}
Add(Registry,13389651,161,119)
{
HKey=1
Key="Control Panel\Desktop\WindowMetrics"
Value="Shell Icon Size"
link(onRead,15519479:doValue,[])
}
Add(Registry,6094033,476,112)
{
HKey=1
Key="Control Panel\Desktop\WindowMetrics"
Value="Shell Icon Size"
}
Add(Registry,2029964,329,189)
{
HKey=1
Key="Control Panel\Desktop\WindowMetrics"
Value="Shell Icon Size"
link(Data,15519479:Value,[(335,170)(223,170)])
}
Add(Hub,12121991,273,119)
{
OutCount=4
link(onEvent1,13873015:doOperation,[])
link(onEvent2,4279563:doWork2,[])
link(onEvent3,2029964:doWrite,[(317,139)(317,202)])
link(onEvent4,4279563:doWork3,[(326,146)])
}
Add(Memory,15519479,217,119)
{
link(onData,12121991:doEvent1,[])
}
Add(Math,13873015,420,119)
{
OpType=3
Op2=2
link(onResult,6094033:doWrite,[])
}
Add(HubEx,4279563,322,119)
{
link(onEvent,10252830:doNotify,[(347,132)(347,146)])
}

------------ Дoбавленo:

Можно, наверное, только эксплореру посылать сообщения - быстрее должно получиться.
карма: 1

0
Ответов: 278
Рейтинг: 4
#9: 2008-01-18 03:05:58 ЛС | профиль | цитата
tsdima, спасибо тебе, брат, понял меня, в отличии от некоторых (недельные изыскания, "угадать"). Немножко "Педальный вариант", конечно, получился (/2, Notify, back, Notify), НО - работает А это как раз то, о чём я просил

v258, непонял с 'RegistrySection' и не работает, но всё равно благодарю

Ну и конечно господин - Galkov, пожалуйста, извини меня за мою глупость, я понял свою ошибку, в следующий раз сразу выложу исходный пример (обычно я так и делал, но в этот раз предположил, что меня поймут и на словах (некоторые так и сделали)).
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)