View previous topic :: View next topic |
Author |
Message |
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Thu Nov 07, 2013 12:29 Post subject: |
|
|
Вот, решил проблему с критерием "юникодности" имени файла: Code: | var // проверяем на юникодность имена файлов, переданных короткими (8.3) именами
a=new ActiveXObject('Shell.Application'),
c=new ActiveXObject('MSScriptControl.ScriptControl'),
f=new ActiveXObject('Scripting.FileSystemObject'),
n=a.NameSpace(f.getParentFolderName(filename));
c.language='VBScript';
c.allowUI=false;
c.addCode(
'Function FC(E)\n'+
' FC = ""\n'+
' For i = 1 to Len(E)\n'+
' FC = FC & Chr(Asc(mid(E,i,1)))\n'+
' Next\n'+
'End Function\n'
);
Content=fb(fa(filename));
function fa(e){return(n.ParseName(f.getFileName(e)).path);}
function fb(e){var u=c.run('fc',e);return(f.fileExists(u)||f.folderExists(u));}
| Asc, похоже, использует "общевиндовский" механизм замены символов Unicode, а видно файл после преобразования имени, или нет - пусть сама винда и разбирается. Попутно обнаружилось ещё одно воплощение проблемы с именами в плагине: папка с именем "Õ" не обрабатывается вообще, даже скриптом
Добавлено спустя 10 минут:
На VBS, пожалуй, покороче будет, но сейчас не до этого. Кстати, нет ли в VBS команды, преобразующей строку Unicode в строку ANSI целиком, не по одному символу в цикле? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 09, 2013 15:22 Post subject: |
|
|
Serge Yolkin wrote: | короткого (8.3), которое плагин радостно передаёт скрипту | Забыл спросить, это тоже только на 8-ке? На семёрке имя полностью передаётся.
И я правильно понимаю, что ты вернулся к варианту проверки по знакам вопроса? Если да, то по логике должно было бы хватить этого:
Code: | Content = "Нет"
For i = 1 to Len(FileName)
If Chr(Asc(Mid(FileName, i, 1))) = "?" Then
Content = "Да" : Exit For
End If
Next | Хотя вместо Да плагин возвращает почему-то пустое значение. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sat Nov 09, 2013 18:18 Post subject: |
|
|
Flasher
Имя, например, "ЯÕ" у меня на всём коротким (точнее, более длинным, но валидным) передаётся, а "нормальные" - да, на семёрке нормально, на восьмёрке - коротким. Спасибо, что обратил внимание.
А проверка - нет, не по "?". Полное имя преобразуется с помощью Asc, результат скармливается fso.fileExists()|folderExists(). Если винда (точнее, её fileSystemObject) объект нашла - считаем имячко "ансишным", поскольку старые программы его тоже найдут. Если не нашла - что-то здесь не так...
Добавлено спустя 4 минуты:
Сейчас я конвертирую полное имя в цикле посимвольно, потому и спрашиваю: Quote: | Кстати, нет ли в VBS команды, преобразующей строку Unicode в строку ANSI целиком, не по одному символу в цикле? |
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 09, 2013 18:24 Post subject: |
|
|
Serge Yolkin
Wait a second. Но ведь по логике винда найдёт все имена, где нет знаков вопроса? Или нет?
Вопрос видел. Стандартных методов преобразования нет.
Боюсь, что у плагина проблемы с возвратом юникодных имён. К примеру àéÿüĄŀĦĤŕž.ext +
Code: | Content = CreateObject("Shell.Application").NameSpace(CreateObject("WScript.Shell").CurrentDirectory).ParseName(filename).Name | даёт пустое значение. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sat Nov 09, 2013 18:44 Post subject: |
|
|
Flasher wrote: | винда найдёт все имена, где нет знаков вопроса | Не скажи... Пока я со всякими смайликами-солнышками игрался, на какие только варианты не насмотрелся. Да и цель - определить валидность имён для старых программ - так достигается более точно, чем построение собственных предпроложений. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Nov 09, 2013 18:53 Post subject: |
|
|
Serge Yolkin
См. дописку. У тебя есть с этим проблемы? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sat Nov 09, 2013 18:57 Post subject: |
|
|
Да, и это не единственный вариант имени, которое не обрабатывается плагином совсем. Даже, если скрипт не трогает имена, а делает что-нибудь другое. Придётся подождать юникодной версии плагина. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sun Nov 10, 2013 20:35 Post subject: |
|
|
Ай нид хелп: в инишнике к старой версии был ключик, позволяющий обрабатывать и папки тоже, инишник в ходе экспериментов сильно пострадал, а в инишнике к последней версии этого ключа нет. Может кто-нибудь напомнить? |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10268 Location: Россия, Саратов
|
(Separately) Posted: Sun Nov 10, 2013 21:20 Post subject: |
|
|
Serge Yolkin
Все ключи, содержащиеся в старом инишнике, есть и в новом, хотя и с некоторыми вариациями, включая упоминание ParseDirs=0 в комментарии. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Sun Nov 10, 2013 21:24 Post subject: |
|
|
Avada
Точно. Спасибо. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Thu Nov 14, 2013 15:41 Post subject: |
|
|
Маленькое резюме моих "открытий":
- ключ LongName=0/1 переключает не длинные/короткие имена, как я думал, а длинные/полные имена, т.е. при 0 в filename только имя объекта, при 1 - имя с путём;
- ParseDirs=0 отключает не только обработку папок, но и некоторых файлов, таких как hiberfil.sys, pagefile.sys;
- плагином очень удобно пользоваться для подсветки определённых файлов/папок, если она нужна не часто, или, по крайней мере, не всегда: имя плагина и поля всегда одни и те же, настраиваем шаблон поиска и цвет для него, а в зависимости от подключенного скрипта подсвечиваться будет то что нужно;
- для отключения плагина можно создать пустой скрипт (нулевого размера) и переключаться на его секцию в инишнике;
- чтобы не захламлять папку плагина скрипты можно сложить в подпапку, или разложить по нескольким подпапкам, относительные пути вида Script=".\Scripts\test.js" в инишнике поддерживаются;
- если плагин заинтересовал не только меня, могу поделиться HTA утилиткой, которая навешивается на хоткей и позволяет менять активную секцию в инишнике;
прошу прощения, если это мой очередной велосипед, и всем нормальным людям всё это давно известно. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Nov 14, 2013 17:02 Post subject: |
|
|
Serge Yolkin
Про hiberfil.sys, pagefile.sys не знал, да и не требовалось.
Serge Yolkin wrote: | - плагином очень удобно пользоваться для подсветки определённых файлов/папок, если она нужна не часто, или, по крайней мере, не всегда: имя плагина и поля всегда одни и те же, настраиваем шаблон поиска и цвет для него, а в зависимости от подключенного скрипта подсвечиваться будет то что нужно; | Не понял, пример приведи, пож-та.
Serge Yolkin wrote: | для отключения плагина можно создать пустой скрипт (нулевого размера) и переключаться на его секцию в инишнике; | Прямо таки отключения? Да и зачем?
Serge Yolkin wrote: | могу поделиться HTA утилиткой | На код глянуть можно. Хотя менять секцию можно и обычным путём. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Thu Nov 14, 2013 17:44 Post subject: |
|
|
Flasher
Просто другая логика работы с плагином:
Плагин подключен, в тотале настроен шаблон поиска (у меня - highlight_plugin=script.Result = "!", но это на вкус), в [colors] настроена подсветка ColorFilter1=>highlight. В подпапке Scripts папки плагина - несколько скриптов, детектирующих определённые файлы/папки, в script.ini для каждого создана секция, в Section= та самая заглушка, которая "зачем". Ничего не подсвечивается. При необходимости, или остром желании, по хоткею вызываем утилитку, выбираем интересующий скрипт - в тотале подсвечены желаемые элементы. Через так же выбираем заглушку - всё как было. Чтобы в утилитке отображалось что-то более вменяемое, чем имена секций, в инишнике, в следующей после названия каждой секции строчке пишем комментарий (начинается с точки_с_запятой). Вот утиль: Code: | <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>
<html>
<head>
<title>Переключатель Script.wdx</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />
<script type="text/jscript" language="JScript">
self.resizeTo(400,200);
self.moveTo(200,100);
</script>
<hta:application
applicationName="WDXScriptSwitcher-II"
border="thin"
icon="%SystemRoot%/system32/scrobj.dll"
id="HTApp"
innerBorder="no"
maximizeButton="no"
minimizeButton="no"
selection="no"
singleInstance="yes"
version="0.2"
/>
<style type="text/css">
*{color:navy;font:normal 14px/16px Arial;margin:0;padding:0;}
p{cursor:hand;padding:5px 10px;}
p:hover{background-color:yellow;}
</style>
</head>
<script type="text/jscript" language="JScript">
var
a=[],
f=new ActiveXObject('Scripting.FileSystemObject'),
o=HTApp.commandLine.replace(/^"|[^\\]+$/g,'')+'script.ini',p,q,r,s,t;
s=f.openTextFile(o);
t=s.readAll();
s.close();
q=t.match(/Section\=[^\n\r]+/)[0].split('=')[1];
a=t.match(/\[\w+\](\s*;\s*[^\n\r]*)?/g);
for(var i=0;i<a.length;i++){
r=a[i].split(/\s*;\s*/);
if(r[0]!='[Script]'){
p=document.createElement('P');
p.comment=r[0].replace(/^\[|\]$/g,'');
p.innerHTML='• '+(r.length>1?r[1]:r[0]);
p.attachEvent('onclick',fa);
if(p.comment==q)p.style.fontWeight='bold';
document.documentElement.appendChild(p);
}
}
function fa(e){
self.resizeTo(0,0);
self.moveTo(-100,-100);
var u,v;
t=t.replace(/Section\=[^\n\r]+/,'Section='+f.getFileName(e.srcElement.comment));
s=f.openTextFile('script.ini',2);
s.write(t);
s.close();
try{
with(new ActiveXObject('WScript.Shell'))
run(
expandEnvironmentStrings('%COMMANDER_PATH%\\PlugIns\\util\\tccp.exe')+' 540',
0,
true
);
}catch(e){}
window.close();
}
</script>
</html> |
|
|
Back to top |
|
|
Lev
Joined: 02 Mar 2005 Posts: 392
|
(Separately) Posted: Fri Nov 15, 2013 18:37 Post subject: |
|
|
Как вариант можно наделать ini файлов и копировать утилиткой нужный поверх script.ini, т.е. перезаписывать весь, вместо редактирования строк.
-----
Еще можно заводить отдельный script.lng для именования колонок.
Code: | [eng]
Result=ColumnName
[rus]
Result=ИмяКолонки |
|
|
Back to top |
|
|
Serge Yolkin
Joined: 25 Jul 2009 Posts: 664
|
(Separately) Posted: Fri Nov 15, 2013 19:31 Post subject: |
|
|
Lev
Можно и скрипты хранить в архиве, вместе с инишниками, а распаковывать скриптом парами, поверх имеющихся, но это хорошо для готовой сборки, в прцессе написания отлаживать лучше ничего не удаляя, а то я тут выше уже жаловался, что инишник потерял совсем. Перезаписал, блин... Зато, обжогшись, научил утилитку генерить инишник при его отсутствии (болванка, конечно, но для всех имеющихся скриптов, включая подпапки). |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|