Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Вниз"Перезапуск" иконок в трее Найти похожие ветки
← →
IceBeerg © (2005-10-13 18:26) [0]В общем так. Снимаю через диспетчер задать explorer и болшинство иконок из трея пропадают.
Есть ли способ как то оповестить запущенные программ, что им надо заово иконки свои винде пихнуть?
И вообще какой может быть выход из подобной ситуации?
Не снимать explorer через диспетчер задач НЕ прдлагать, иногда приходится.
← →
IceBeerg © (2005-10-13 18:28) [1]Ой, помоему не туда вопрос кинул, надо в потрепаться, извиняюсь.
← →
Leonid Troyanovsky © (2005-10-13 18:42) [2]
> IceBeerg © (13.10.05 18:26)
> Есть ли способ как то оповестить запущенные программ, что
> им надо заово иконки свои винде пихнуть?
For IE4+
WM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated")
--
Regards, LVT.
← →
Leonid Troyanovsky © (2005-10-13 18:45) [3]
> Leonid Troyanovsky © (13.10.05 18:42) [2]
> > Есть ли способ как то оповестить запущенные программ,
> WM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated")
В смысле, что если они его не обрабатывают, то, видимо, только перезапустить.
--
Regards, LVT.
← →
IceBeerg © (2005-10-13 18:52) [4]Leonid Troyanovsky © (13.10.05 18:42) [2]
ОК, попробую.
Leonid Troyanovsky © (13.10.05 18:45) [3]
В смысле, что если они его не обрабатывают, то, видимо, только перезапустить.
Непонял... 8(
← →
Ball (2005-10-13 19:04) [5]http://www.delphikingdom.info/asp/answer.asp?IDAnswer=29588
← →
Leonid Troyanovsky © (2005-10-13 19:04) [6]
> IceBeerg © (13.10.05 18:52) [4]
> В смысле, что если они его не обрабатывают, то, видимо,
> только перезапустить.
> Непонял... 8(
Это сообщение рассылается широковещательно при рестарте explorer
окнам верхнего уровня, которые могут, например, восстановить свои иконки.
Ну, а если они не восстанавливают, значит они его игнорируют ;)
--
Regards, LVT.
PS Сначала мне показалось, что речь идет о своих приложениях.
← →
Leonid Troyanovsky © (2005-10-14 16:19) [7]
> IceBeerg © (13.10.05 18:26)
> И вообще какой может быть выход из подобной ситуации?
Можно было бы сделать приложение с (невидимой) формой, которое:
1. будет хранить список проблемных приложений, не умеющих
восстанавливать свои иконки, и хранить данные, необходимые для
восстановления иконок;
2. будет запущено раньше проблемных приложений;
3. соберет данные всех проблемных приложениях с помощью
установки хука на окно ShellTray_Wnd и отлова WM_COPYDATA;
4. при обработке TaskbarCreated будет посылать окну ShellTray_Wnd
SendMessage(h, WM_COPYDATA, ..) c dwID = $34753423
и параметрами, сохраненными раннее для каждого приложения.
В качестве структуры данных можно испытать изложенное в
http://groups.google.com/group/fido7.su.win32.prog/msg/d966e07f9ad4c70e
Одна проблема очевидна уже на этой стадии: приложения, меняющие
после старта свою иконку, хинт, и т.д. могут оказаться в несогласованном
со своим изображением состоянии.
Но, в любом случае, IMHO, это может оказаться более интересным
развлечением на выходные, чем вариант с простым рестартом.
--
Regards, LVT.
← →
Antonn © (2005-10-14 16:56) [8]Leonid Troyanovsky © (13.10.05 18:45) [3]
WM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated")
если не секрет, что за сообщение, в Delphi7 его не нашел.
← →
Leonid Troyanovsky © (2005-10-14 17:51) [9]
> Antonn © (14.10.05 16:56) [8]
> WM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated")
> если не секрет, что за сообщение, в Delphi7 его не нашел.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/programmersguide/shell_int/shell _int_programming/taskbar.asp
--
Regards, LVT.
← →
Antonn © (2005-10-14 18:00) [10]Leonid Troyanovsky © (14.10.05 17:51) [9]
прошу прощения за наглость, но не могли бы вы просто сказать значение WM_TASKBARCREATED? по данной ссылке не нашел(или не понял, что искать). WM_TASKBARCREATED в поиске выдает "not found"
← →
Leonid Troyanovsky © (2005-10-14 18:28) [11]
> Antonn © (14.10.05 18:00) [10]
> прошу прощения за наглость, но не могли бы вы просто сказать
> значение WM_TASKBARCREATED? по данной ссылке не нашел(или
> не понял, что искать).
Конкретное значение выдает RegisterWindowMessage.
Ссылка, к сожалению, здесь искажается.
Следует скопировать ее целиком, скажем, в Notepad и убрать лишнее (в
т.ч. и пробелы).
Или, в строке поиска msdn.microsoft.com набрать "TaskbarCreated" -
там, IMHO, лишь одна ссылка: The Taskbar (Windows Explorer and Controls)
--
Regards, LVT.
← →
Antonn © (2005-10-14 18:31) [12]Leonid Troyanovsky © (14.10.05 18:28) [11]
Конкретное значение выдает RegisterWindowMessage.
покопаюсь...
>Ссылка, к сожалению, здесь искажается.
> Следует скопировать ее целиком, скажем, в Notepad и
>убрать лишнее (в
>т.ч. и пробелы).
> Или, в строке поиска msdn.microsoft.com набрать
>"TaskbarCreated" -
> там, IMHO, лишь одна ссылка: The Taskbar (Windows
> Explorer and Controls
знак переноса надо лишь убрать(%20) в пути, догодался:)
← →
Lexer © (2005-10-21 14:30) [13]IceeBerg, если тебе надо просто перезапускать explorer, чтоб при этом не пересоздавлась панль задач, то попробуй выделить панель задач в отдельный ппроцесс.
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer
Добавь туда ключ DesktopProcess типа DWORD со значением 1.
← →
Eraser © (2005-10-21 19:50) [14]Может поможет вот это
http://help.madshi.net/TrayIcons.htm
← →
GrayFace © (2005-10-22 17:08) [15]Antonn © (14.10.05 16:56) [8]
WM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated")
если не секрет, что за сообщение, в Delphi7 его не нашел.
В Forms есть RM_TaskbarCreated, только оно в interface.
Примерно так надо:TForm1 ...
protected
procedure WndProc(var msg:TMessage); override;
end;
implementation
procedure TForm1.WndProc(var msg:TMessage); override;
begin
inherited;
if msg.Msg=RM_TaskbarCreated then
begin
TrayIcon.Visible:=false;
TrayIcon.Visible:=true;
end;
end;
initialization
RM_TASKBARCREATED := RegisterWindowMessage("TaskbarCreated")
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.018 c