Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
восстановление предыдущего выделения объектов в проводнике по комбинации клавиш
не буду сейчас ничего говорить насчёт нескольких тысяч, но не далее чем сегодня возникла реальная ситуация, когда нужно было запомнить те самые 932 папки. не могу сказать, что подобные примеры возникают очень часто, но всё-таки они бывают
результаты кое-каких тестирований:
из 4322 папок восстановилось выделение у 3813 (при $iLogItems_Cache = 10,000) и у 4258 (при $iLogItems_Cache = 100,000)
неплохо бы было, конечно, точно знать количество, на которое можно спокойно рассчитывать
вот такой ещё вопрос (нужный, но не самый значимый):
в логе на одну папку приходится только один блок (по умолчанию в данный момент максимум блоков может быть 20,000)
не будет ли сложно сделать так, чтобы каждая папка имела не одну запись, а хотя бы 10? лучше, конечно, чтобы в #Region User Settings была возможность менять данный параметр по своему усмотрению. при появлении 11-го выделения внутри конкретной папки запись о первом стирается и 11-й сразу записывается на место десятого. пример того, как может выглядеть реализация всего этого для папки C:\z : [1]
0=0x00060EB4
1=
2=C:\z
3=4.txt;6.txt
4=6;8 [2]
0=0x00060EB4
1=
2=C:\z
3=5.txt;6.txt
4=7;8
это может понадобиться в определённых случаях (и при их наступлении будет данная возможность - просмотреть лог и увидеть небольшую историю выделений конкретной папки)
пока буду продолжать тестировать - на данный момент не все нюансы я для себя уяснил (не покидает ощущение некоторой ненадёжности скрипта; не получается пока что окончательно понять, какие параметры лучше выставить)
это понятно. имелось в виду, что хотелось бы понимать точнее, какое количество восстановленных выделенных объектов под силу программе, а при каком начинается ненадёжность. ориентировочно-то кое-как ясно - десятки/сотни восстановятся. но слегка некомфортно пользоваться и знать, что в любой момент программа может подвести и не восстановить должным образом выделение. хочу особо подчеркнуть - я ценю усилия, затраченные на написание данного скрипта и не пытаюсь выпендриваться, просто стараюсь максимально вежливо озвучить замеченные минусы
теперь о главном. поскольку много раз ужé доводилось компилировать, то была возможность заметить (далеко неоднократно), что:
- не всегда все выделения записываются в лог
- лог может вообще не создаться (иногда создаётся, иногда - нет)
расписал кратко, поскольку детально объяснить это всё сложно, а я, если честно, порядком подустал от того, что всё никак не удаётся добиться устойчивой работы без беспричинных сбоев; вероятно, если CreatoR вдруг не обнаружит ещё какие-то возможности для улучшения/исправления кода, придётся пользоваться программой вообще без лога; чего не хотелось бы делать, поскольку при этом в значительной степени уменьшаться возможности
вот всё, что я менял в скрипте:
Код:
Global $sLogFile = @WindowsDir & "\Temp" & "\SelectionRestorer.log" ;Log File Path
Global $iLogItems_Cache = 500 ;Log items cache
HotKeySet("#8", "_ExplorerRestoreSelection")
думаю, не в этом причина нестабильной работы
ещё один очень важный замеченный досадный момент:
программа, по-видимому, работает только в одном конкретном окне проводника. если открыть ещё такой же, то в нём ужé ничего не работает. если переключиться на первый - работает. это очень существенный минус, поскольку зачастую у меня открыты и нужны для каких-то действий несколько проводников
Давай договоримся, ты сначала проверяешь скрипт в том виде в котором я его выложил, и в случае удачной работы начинаешь делать изменения в настройках ;)
программа, по-видимому, работает только в одном конкретном окне проводника. если открыть ещё такой же, то в нём ужé ничего не работает. если переключиться на первый - работает
жаль, что до меня только сейчас дошло: пока программа работает только в одном конкретном окне проводника, то все остальные главные проблемы разом нивелируются по причине того, что использование лога в любом виде не имеет ни малейшего смысла (к большому сожалению), а выставление $iLogItems_Cache = 20,000 и подавно представляется чуть ли не фарсом. какие уж там 20,000 блоков, если истории выделений, записываемой в лог, суждено прожить в большинстве случаев считанные часы, а то и вовсе десятки минут (проводник всё-таки перезапускается мной время от времени)
Теоритический - любое. Программа всего лишь посылает сообщение окну проводника о том что нужно выделить объект.
тогда интересно было бы понять:
- с чем может быть связано то, что в ряде случаев (масштабных, с тысячами объектов) восстановление беспричинно обрывается, не дойдя до конца? ведь ничто не мешает завершить задание
- какова причина радикальной разницы в скорости восстановления? (в начале - не мгновенно, но достаточно быстро; ближе к концу - всё медленнее; в конце (если объектов хорошо за тысячу) - безумно медленно, выделение идёт буквально по жалкому десятку объектов в секунду)
При $bWriteLogFileAlways = True пишет при каждом выделение.
то есть, при false программа может позволить себе не всегда в лог записывать? мне вот этот момент непонятен. получается, что в таком случае значение $bUseLogFile = True стаёт муляжом, ни на что не влияющим параметром - лог хоть типа и создаётся, но может и не создаться, в него что-то пишется, но может и не писаться
Добавлено:
Сообщение автоматически объединено:
только что попробовал пользоваться скриптом, отключив все настройки, имеющие отношение к логу, чтобы убедиться, что хотя бы основная функция работает, но не тут-то было
оказалось, что программа не просто работает только в одном конкретном окне проводника. она вообще отказывается работать, если это окно подверглось закрытию, а позднее запущено другое. выгружать и снова запускать её при появлении каждого нового окнá проводника мне представляется крайне неудобным занятием
судя по всему, варианты имеются следующие:
1) оптимальный - попытаться решить вот это:
это обойти пока не удалось, видимо я в этом направлений копал недостаточно
2) сомнительно-обходной - прописать что-то типа автовыгрузки скрипта при закрытии проводника и автозагрузки скрипта при запуске проводника
третий вариант - оставить как есть и не пользоваться вообще, но об этом думать бы не хотелось
чуть позже мне стало ясно, что всё-таки эта функция тоже очень важна. по большому счёту, достаточно было бы истории, хранящей всего 2 выделения. это на те случаи, когда по ошибке выделение не снимается вообще, а каким-то образом меняется (ctrl+a, shift+home, shift+end...)
для меня это особо актульно по причине наличия ряда клавиш (F2, F3, F4, F5), назначенных как раз на изменение выделения
F2 - select to end
F3 - select to beginning
F4 - select all
F5 - select by type
Смысл в том чтобы восстановить настройки после перезапуска программы.
какие уж там 20,000 блоков, если истории выделений, записываемой в лог, суждено прожить в большинстве случаев считанные часы, а то и вовсе десятки минут (проводник всё-таки перезапускается мной время от времени)
При чём здесь перезапуск проводника, я уже писал для чего нужны эти блоки.
с чем может быть связано то, что в ряде случаев (масштабных, с тысячами объектов) восстановление беспричинно обрывается, не дойдя до конца? ведь ничто не мешает завершить задание
Медленный процессор, забитая всяким хламом система?
Кстати есть идея как ускорить этот процесс в некоторых случаях. Например, если нужно восстанавливать число выделенных объектов превышающее число всех объектов в папке, то можно просто выделить всё, и снимать выделение с тех объектов которые не должны быть выделенный, так должно быть быстрее.
при false программа может позволить себе не всегда в лог записывать?
Единственная проблема, так это выделение файлов.
Есть свойство SelectItem, но во-первых оно выделяет файл и снимает выделение с других, а во-вторых очень медленно :(.