Как уведомить окно об изменениях в системе?
От: Filatov_AV  
Дата: 06.12.04 12:34
Оценка:
Меняю иконку у папки.
в файле desktop.ini модифицирую строку: IconFile=ИмяНужнойМнеИконки.ico, сохраняю файл.
Какую функцию следует API вызвать, чтобы чтобы окно (допустим Explorer.exe) обновило вид папки
Re: Как уведомить окно об изменениях в системе?
От: MOZG Россия  
Дата: 06.12.04 13:55
Оценка: 2 (1)
Здравствуйте, Filatov_AV, Вы писали:

F_A>Меняю иконку у папки.

F_A>в файле desktop.ini модифицирую строку: IconFile=ИмяНужнойМнеИконки.ico, сохраняю файл.
F_A>Какую функцию следует API вызвать, чтобы чтобы окно (допустим Explorer.exe) обновило вид папки


Как я понимаю ... это должно происходить автоматом :o)

Я бы сделал так

FindWindow .... ляля тополя ! HWND нужного окна ...

PostMessage ( нужное окно , WM_ACTIVATE , .. ) вот ...

Но это позорный метод :o)))


Ногу сверло ...
Re: Как уведомить окно об изменениях в системе?
От: algol Россия about:blank
Дата: 06.12.04 14:18
Оценка: 1 (1)
Здравствуйте, Filatov_AV, Вы писали:

F_A>Меняю иконку у папки.

F_A>в файле desktop.ini модифицирую строку: IconFile=ИмяНужнойМнеИконки.ico, сохраняю файл.
F_A>Какую функцию следует API вызвать, чтобы чтобы окно (допустим Explorer.exe) обновило вид папки

Попробуй SystemParametersInfo(SPI_SETICONS) или WM_SETTINGCHANGE.
Re[2]: Как уведомить окно об изменениях в системе?
От: Filatov_AV  
Дата: 06.12.04 14:49
Оценка:
Здравствуйте, MOZG, Вы писали:

MOZ>Здравствуйте, Filatov_AV, Вы писали:


F_A>>Меняю иконку у папки.

F_A>>в файле desktop.ini модифицирую строку: IconFile=ИмяНужнойМнеИконки.ico, сохраняю файл.
F_A>>Какую функцию следует API вызвать, чтобы чтобы окно (допустим Explorer.exe) обновило вид папки


MOZ>Как я понимаю ... это должно происходить автоматом :o)


MOZ> Я бы сделал так


MOZ> FindWindow .... ляля тополя ! HWND нужного окна ...


MOZ> PostMessage ( нужное окно , WM_ACTIVATE , .. ) вот ...


MOZ>Но это позорный метод :o)))



MOZ>


Это действительно происходит автоматом, но через секунды 3, а я хочу сразу
Re: Как уведомить окно об изменениях в системе?
От: Alex Fedotov США  
Дата: 06.12.04 17:12
Оценка: 2 (1)
Здравствуйте, Filatov_AV, Вы писали:

F_A>Меняю иконку у папки.

F_A>в файле desktop.ini модифицирую строку: IconFile=ИмяНужнойМнеИконки.ico, сохраняю файл.
F_A>Какую функцию следует API вызвать, чтобы чтобы окно (допустим Explorer.exe) обновило вид папки

SHChangeNotify.
-- Alex Fedotov
Re: Как уведомить окно об изменениях в системе?
От: Filatov_AV  
Дата: 13.01.05 14:39
Оценка:
Здравствуйте, Filatov_AV, Вы писали:

F_A>Меняю иконку у папки.

F_A>в файле desktop.ini модифицирую строку: IconFile=ИмяНужнойМнеИконки.ico, сохраняю файл.
F_A>Какую функцию следует API вызвать, чтобы чтобы окно (допустим Explorer.exe) обновило вид папки


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

Как оказалось, функцию никакую вызывать не нужно (типа SystemParametersInfo или SHChangeNotify).

Если я правильно понимаю, после сохранения файла desktop.ini система автоматом просекает изменения и вызавает нужные функции API. Все что нужно сделать, это обновить браузер, в котором просматривается папка. А можно и не делать Все тот же стандартный,виндовый explorer обновляет свой вид с интервалом около 3 сек. Но я нетерпелив...

У explorer'а есть команда меню: Вид -> Обновить (F5). Поэтому, самый простой, на мой взгляд,
способ обновить его — это послать сообщение окну, что была нажата горячая клавиша F5.

Если кому интересно, привожу код:

...................................................

unsigned long processID;
GetWindowThreadProcessId(m_hWnd, &processID); // get parent processId

//refresh parent window (if it is EXLORER.EXE then SEND it F5)

if ( lstrcmp(GetProcessName(processID), "explorer.exe") == 0 ){
PostMessage(m_hWnd, WM_KEYDOWN, VK_F5, 0);
PostMessage(m_hWnd, WM_KEYUP, VK_F5, 0);
}

........................................

char* CrenumberExt::GetProcessName(unsigned long processId)
{
char szProcessName[MAX_PATH] = "";
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processId);

GetModuleBaseName(hProcess, 0, szProcessName, sizeof(szProcessName));

CloseHandle(hProcess);
CharLowerBuff(szProcessName, sizeof(szProcessName)); //to lowercase
return szProcessName;
}
Re[2]: Как уведомить окно об изменениях в системе?
От: unintruder  
Дата: 13.01.05 16:24
Оценка:
Здравствуйте, Filatov_AV, Вы писали:

F_A>Здравствуйте, Filatov_AV, Вы писали:


F_A>>Меняю иконку у папки.

F_A>>в файле desktop.ini модифицирую строку: IconFile=ИмяНужнойМнеИконки.ico, сохраняю файл.
F_A>>Какую функцию следует API вызвать, чтобы чтобы окно (допустим Explorer.exe) обновило вид папки


F_A>Благодарю всех кто откликнулся на мой вопрос и хочу закрыть эту тему...


F_A>Как оказалось, функцию никакую вызывать не нужно (типа SystemParametersInfo или SHChangeNotify).


F_A> Если я правильно понимаю, после сохранения файла desktop.ini система автоматом просекает изменения и вызавает нужные функции API. Все что нужно сделать, это обновить браузер, в котором просматривается папка. А можно и не делать Все тот же стандартный,виндовый explorer обновляет свой вид с интервалом около 3 сек. Но я нетерпелив...


F_A> У explorer'а есть команда меню: Вид -> Обновить (F5). Поэтому, самый простой, на мой взгляд,

F_A>способ обновить его — это послать сообщение окну, что была нажата горячая клавиша F5.

F_A>Если кому интересно, привожу код:


F_A>...................................................


А если я предпочитаю другой file manager ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.