Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Исчезают иконки в трее в Windows 7

Автор: MOHCTP
Дата сообщения: 10.12.2015 21:02
bomzzz

Цитата:
если причина не в кеше то винду надо переставлять

а это чем поможет??? волшебным образом сменится ограничение таймаута? в виста+ немного по-другому этот механизм реализован чем в хр, но проблема всё та-же и корень зла всё там-же.. а насчёт кеша иконок - ну установить его ограничение в 16-30мб, против 512кб по умолчанию и можно забыть про вопросы с ним надолго)

Вопрос непрорисовки иконок как правило возникает на системах с неким условно большим количеством (индивидуально) программ автозапуска при использовании нмжд, например на ссд-диске её возникновение будет значительно отодвинуто в силу большого уменьшения задержек, - но это не повод покупать ссд) например у меня 21 иконка в трее и без вариантов 19 нужны - на ссд этой проблемы нету, но повторюсь - это не повод покупать ссд)
Автор: GEGEMON
Дата сообщения: 20.01.2016 12:13
bomzzz
по первой ссылке после согласия очистить реестр - "непридвиденная ошибка чтения реестра". На отбубись сработала контора Бомж и К ))

Чистил и оптимизировал реестр RegOrganizer 'ом - иконок появилось больше, но не все.

MOHCTP
залейте ваш скрипт, попытаю его до кучи
Автор: MOHCTP
Дата сообщения: 09.02.2016 19:49
Как я выше писал, скрипт помогает только тем программам, которые понимают сообщение “TaskbarCreated“, таких программ большинство, конечно, но не все. Работает при установленном ие.


Код:
On Error Resume Next

WScript.Sleep (1000)

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegDelete "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\IconStreams"
WshShell.RegDelete "HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify\PastIconsStream"

Set WshExec = WshShell.Exec ("ie4uinit.exe -ClearIconCache")

Set WshShell = Nothing

On Error GoTo 0

WScript.Sleep (3000)

For Each Process in GetObject("winmgmts:"). _
ExecQuery ("select * from Win32_Process where name='explorer.exe'")
Process.terminate(0)

Set WshShell = CreateObject("WScript.Shell")

WshShell.Popup "Completed OK", 3, "Clear Icon Cache", 0

Set WshShell = Nothing

Next
Автор: GEGEMON
Дата сообщения: 09.02.2016 20:40
MOHCTP
сохранил на рабочем столе, спасибо! Скрипт сказал - комплит ок! в панели задач остались только пустые места от программ - перезагрузка проводника и вот оно! все значки вызываются по стрелке, настроил какие показывать какие нет - сижу радуюсь ), посмотрим насколько долго проживет.
Автор: Denn29
Дата сообщения: 09.02.2016 22:35

Цитата:
настроил какие показывать какие нет


New Windows Tray / Notification Manager is here!
Автор: MOHCTP
Дата сообщения: 10.02.2016 05:31
GEGEMON
так и должно быть) можно установить большее время ожидания при статре (подобрать под свою с-му), убрать сообщение, чтобы не мешало и поместить в автозагрузку.
Автор: GEGEMON
Дата сообщения: 11.02.2016 08:38
на второй день после запуска скрипта одна из тех которая должна появится не появилась, заюзал прогу от Denn29 - по сию пору все нормально. Судя по тексту автора проги он для решения проблемы даже заюзал дебагер ) результатом чего явилась данная программа. Вообщем кто/что помогло больше непонятно но результат положительный.
Автор: MOHCTP
Дата сообщения: 11.02.2016 19:49
Denn29
Интересно, посмотрим.

GEGEMON
Скрипт не решает проблему "раз и навсегда", да и сама проблема гораздо глубже) он просто устраняет ряд препятствий к заданному отображению трея, поэтому неким промежуточным решением является его автозапуск.
Автор: ABVBAV
Дата сообщения: 12.04.2016 21:26
MOHCTP, я как то столкнулся с проблемой пропадающих иконок в Windows 7 и мне многие советовали не пользоваться некоторыми программами. Покопавшись, я набрел на тему о патчинге shell32.dll в Windows XP и на основе той информации пропатчил себе shell32.dll в Windows 7. По моим тестам проблема тогда пропала, хотя и 100% гарантии я дать не могу. У меня осталась патченная dll и пару скринов подсказок для себя самого. Но сейчас сходу разобраться не могу сам уже что там менял толком, так как это было два года назад. Я сейчас немного удивлен, что у кого то похожие проблемы были на Win7, так как все, кого я спрашивал об этом, доказывали мне что это у меня винда/комп тормозячий. Если кто заинтересовался, то напишите мне на скайп (логин такой же как и ник), отправлю что осталось.

upd: патчил я там Shell_NotifyIconW, а именно SendMessageTimeoutW. uTimeout с 7 на 60 секунд (7000 и 60000) и fuFlags c 0Bh на 09h судя по оставленным мной же записям.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952%28v=vs.85%29.aspx
Автор: MOHCTP
Дата сообщения: 14.04.2016 01:15
ABVBAV


Цитата:
По моим тестам проблема тогда пропала, хотя и 100% гарантии я дать не могу.

На ХР патченье shell32 полностью устраняло проблему, думаю что и на Win7+ результат будет такой-же)

Цитата:
как все, кого я спрашивал об этом, доказывали мне что это у меня винда/комп тормозячий

Полностью согласен, это тут совсем ни при чём.

Цитата:
Если кто заинтересовался, то напишите мне на скайп (логин такой же как и ник), отправлю что осталось.

Очень; на днях обязательно

Цитата:
upd: патчил я там Shell_NotifyIconW, а именно SendMessageTimeoutW. uTimeout с 7 на 60 секунд (7000 и 60000) и fuFlags c 0Bh на 09h судя по оставленным мной же записям.

Я ранее начал смотреть, в Vista+ реализация этой части в сравнении с ХР изменилась, времени сильно не было глубоко вникать. Это в shell32 или в user32?
Автор: ABVBAV
Дата сообщения: 16.04.2016 13:29
В shell32.dll. В х64 системах есть папка system32, а есть SysWOW64.

http://i80.fastpic.ru/big/2016/0416/ae/785c074dd493e6badba95a4e50952fae.png
Автор: MOHCTP
Дата сообщения: 18.04.2016 22:32
ABVBAV

Цитата:
В shell32.dll. В х64 системах есть папка system32, а есть SysWOW64.

Это понятно)

С х86 вроде всё ясно, с х64 может я что-то торможу, или не так делаю.. но если я правильно понимаю и это тут (shell32.dll 6.1.7601.23338)
x86

x64


то в итоге получается следующая замена:
x86 (1faf8)
FF FF 50 68 58 1B 00 00 6A 0B 8D 85 C0 E9 FF FF
FF FF 50 68 60 EA 00 00 6A 09 8D 85 C0 E9 FF FF

x64 (1d8c9)
c7 44 24 28 58 1b 00 00 c7 44 24 20 0b 00 00 00
c7 44 24 28 60 EA 00 00 c7 44 24 20 09 00 00 00

Что делает замена fuFlags c 0Bh на 09h?
Автор: ABVBAV
Дата сообщения: 19.04.2016 02:45
Давайте по порядку. В х64 системах есть папка system32 и есть папка SysWow64
http://stackoverflow.com/questions/949959/why-do-64-bit-dlls-go-to-system32-and-32-bit-dlls-to-syswow64-on-64-bit-windows
Открываем свойства shell32.dll в system32 и смотрим версию файла. Видим 6.1.7601.19135 (у меня сейчас)
Открываем свойства shell32.dll в SysWOW64 и видим 6.1.7601.19135
Смотрим через поиск (использую Everything) и видим что последняя версия shell32 6.1.7601.23338
Убедится что используется именно 19135 версия можно и через Hardlink Scanner (https://james-ross.co.uk/weblog/2008/10/31/01)
C:\Windows\system32\shell32.dll = C:\Windows\winsxs\amd64_microsoft-windows-shell32_31bf3856ad364e35_6.1.7601.19135_none_ca3a5b9728ab07df
C:\Windows\SysWOW64\shell32.dll = C:\Windows\winsxs\wow64_microsoft-windows-shell32_31bf3856ad364e35_6.1.7601.19135_none_d48f05e95d0bc9da
Открываем первый файл в system32 и смотрим что там нет похожих участков кода
Отркываем второй и видим все тот же кусок кода, что я давал выше уже.
fuFlags детально расписано тут: https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
замена 0Bh на 09h выключает SMTO_ABORTIFHUNG флаг
Надеюсь, все понятно расписал. Если где ошибся сам, то жду исправлений )
Автор: MOHCTP
Дата сообщения: 19.04.2016 03:27
ABVBAV

Цитата:
Давайте по порядку. В х64 системах есть папка system32 и есть папка SysWow64

Понятно) То я неточно, написал) просто shell32.dll из SysWOW64 в 64-битной совпадает с таковым в 32-битной с-ме, потому я собирательно имел ввиду shell32 x86 = system32 в win7x86 = SysWOW64 в win7x64, а shell32 x64 = system32 в win7x64); то, что всё это hardlink (C:\Windows\winsxs\..), тоже понятно)

Цитата:
Видим 6.1.7601.19135

просто я использую LDR-ветку, там shell32 сейчас 6.1.7601.23338

Цитата:
fuFlags детально расписано тут: https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396
замена 0Bh на 09h выключает SMTO_ABORTIFHUNG флаг

То, что отключаем SMTO_ABORTIFHUNG флаг, по аналогии с ХР, понятно; просто чего-то туплю, там написано - SMTO_ABORTIFHUNG 0x0002, мы меняем 0b -> 09? (т.е. остаются SMTO_BLOCK 0x0001, SMTO_NORMAL 0x0000, SMTO_NOTIMEOUTIFNOTHUNG 0x0008?)

Добавлено:
посмотрел 6.1.7601.19135, по идее всё также, только адреса другие:

для shell32.dll x86, из system32 в win7x86 или из SysWOW64 в win7x64 (1f710)
FF FF 50 68 58 1B 00 00 6A 0B 8D 85 C0 E9 FF FF
FF FF 50 68 60 EA 00 00 6A 09 8D 85 C0 E9 FF FF

для shell32.dll x64, из system32 в win7x64 (1d575)
c7 44 24 28 58 1b 00 00 c7 44 24 20 0b 00 00 00
c7 44 24 28 60 EA 00 00 c7 44 24 20 09 00 00 00
Автор: MOHCTP
Дата сообщения: 25.04.2016 04:45
Почти неделя тестов на семи разных рабочих системах (32/64) патченых shell32 показывает работоспособность патча, все "иконочные костыли" убрал, с иконками всё ок.
Автор: ABVBAV
Дата сообщения: 25.04.2016 11:21
Еще бы кто патчер создал, который автоматом находит нужный кусок и патчит сам. Можно вообще в виде проги на автозагрузке сделать и проверять на изменения кода после обновлений и, если изменено обратно, то патчить заново.
Автор: MOHCTP
Дата сообщения: 25.04.2016 18:04
ABVBAV
простенький патчер сделать не сложно, посмотрим, чуть позже)
Автор: MOHCTP
Дата сообщения: 19.05.2016 03:25
Как и обещал (#), простенький патчик windows 7 x86&x64 shell32.dll, пока только для тестирования у меня работает на последней версии 6.1.7601.23418
Автор: GEGEMON
Дата сообщения: 19.05.2016 08:23
MOHCTP

Цитата:
Как и обещал (#), простенький патчик


какие задачи выполняет патч? а то тут hex'а и слов ругательных много и ничего не понятно

Автор: sw73
Дата сообщения: 19.05.2016 14:38
Denn29 спасибо
Автор: MOHCTP
Дата сообщения: 20.05.2016 20:40
ABVBAV
(#) простенький патчик windows 7 x86&x64 shell32.dll, пока ТОЛЬКО для тестирования Исправил несколько неточностей и переделал уни x86&x64.



Добавлено:
GEGEMON
Исправляет глобальную ошибку TIMEOUT в файле shell32.dll, которая приводит к непрорисовке иконок при загрузке системы)
Автор: ABVBAV
Дата сообщения: 20.05.2016 20:50
Спасибо. Позже потестирую на х86 и х64 патч. Хотя, думаю, если пропатчит нормально, то дальше должно быть все ок =)
Автор: GEGEMON
Дата сообщения: 20.05.2016 22:52
MOHCTP

у меня так -

Автор: ABVBAV
Дата сообщения: 20.05.2016 23:02
GEGEMON, у тебя нет прав на файл shell32.dll в папке system32
Аналогично, нужны будут права на shell32.dll в папке SysWow64 для х64 системы.
Можно этим воспользоваться: http://winaero.com/comment.php?comment.news.18
Через контекстное меню удобно пользоваться и восстанавливать прежние.
Да и патч еще в тестовом режиме и я не помню делаются ли бэкапы, так что тоже не помешает на всякий случай.
Автор: GEGEMON
Дата сообщения: 21.05.2016 10:01
ABVBAV
установил полный доступ к файлу, запускаю патч - не видит (ищет в папке wow64 хотя версия х86 и патч для х86). Ладно, соглашаюсь на поиск, нахожу запускаю - опять не видит!!

MOHCTP

Короче "Пилите Шура"
Автор: ABVBAV
Дата сообщения: 21.05.2016 16:09
Тестируйте: https://www.dropbox.com/s/bbzz67y512gkzn0/Win7x86-64%20missing%20icons%20bug%20patcher-unpatcher%20shell32%20dll.rar?dl=0

Для правильной работы патча должны быть права на чтение и запись у обоих файлов shell32.dll в папках %windir%\system32 и %windir%\SysWOW64 иначе будет вылет патчера

Unpatcher'ы это всего лишь патчер на стандартные значения shell32.dll. Можно ими вернуть все как было, а можно и бэкапом вида shell32.dll.BAK вручную.
Автор: GEGEMON
Дата сообщения: 21.05.2016 21:59

Цитата:
Тестируйте


битый архив
Автор: ABVBAV
Дата сообщения: 22.05.2016 10:45
Скачал еще раз сам, проверил, все ок. Создавалось WinRAR версии 5.31. Насколько понимаю, должен быть не ниже 5 версии у вас. Перезалил в zip еще на всякий: https://www.dropbox.com/s/l9svhgdl9o3ggeb/Win7x86-64%20missing%20icons%20bug%20patcher-unpatcher%20shell32.zip?dl=0
Оба архива в норме
Автор: MOHCTP
Дата сообщения: 23.05.2016 04:02
ABVBAV
(#) простенький патчик windows 7 x86&x64 shell32.dll, пока ТОЛЬКО для тестирования
Немного доделал уни x86&x64 (добавлена чистка кэша иконок в реестре и на диске).
В архиве 3 патча:
x86 - только для 32-битной shell32.dll из \system32 в 32-битной системе, или из \syswow64 в 64 битной;
x64 - только для 64-битной shell32.dll из \system32 в 64 битной;
x86-x64 - универсальный, для Windows 7 32/64 битной


Добавлено:
GEGEMON

Цитата:
установил полный доступ к файлу, запускаю патч - не видит (ищет в папке wow64 хотя версия х86 и патч для х86). Ладно, соглашаюсь на поиск, нахожу запускаю - опять не видит!!

Если запускался x86 патч, то по идее так и должно быть: он патчит только 32-битный shell32.dll, который может находится в \system32 в 32-битной системе, или в \syswow64 в 64 битной; проверьте, возможно что файл пропатчился) или попробуйте уни-патч. Возможно у вас остался файл shell32.dll.tmp (это оригинальный) - переименуйте его, например в shell32.dll.1: патчер использует переименование для изменения файла который используется системой. В любом случае патчер выводит лог своих действий и результатов. Если патчер не срабатывает, приведите лог.
Автор: ABVBAV
Дата сообщения: 23.05.2016 20:21

Цитата:
x86 - только для 32-битной shell32.dll из \system32 в 32-битной системе, или из \syswow64 в 64 битной;
x64 - только для 64-битной shell32.dll из \system32 в 64 битной;
x86-x64 - универсальный, для Windows 7 32/64 битной

Как по мне, то такая система версий только запутает обычного пользователя и таким пользователям не важно знать все технические подробности и патчить отдельно shell32.dll только в syswow64 для х64 систем.
У меня там лишь два варианта патча. Один для х86 (причем проверяет что это именно Win7 х86 система стоит), а второй для х64 и патчит оба файла сразу. Не знаю как вам, а мне так логичнее. Считайте это альтернативным вариантом патча. Позже, подумаю, как прикрутить к самому патчеру еще и автоматическое получение прав на файлы, с последующим восстановлением оригинальных прав, чтобы все это можно было делать даже полному новичку.

Страницы: 123

Предыдущая тема: не добавляются иконки на панель задач


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.