Page 1 of 97

Scripts discussion (1)

Posted: Fri Jul 06, 2007 6:29 pm
by Instructor
RUS: Обсуждение скриптов.

ENG: Scripts discussion.


Scripts discussion (1) 07.07.2007 - 08.09.2011
Scripts discussion (2) 08.09.2011 - 17.04.2014
Scripts discussion (3)

Posted: Wed Jul 18, 2007 11:38 am
by wisgest
Это и последующие сообщения: #1362 (VladSh), #1363 (wisgest), #1364 (VladSh), #1371 (wisgest), #1373 (VladSh), #1382 (wisgest), #1385 (VladSh), #1391 (wisgest), #1392 (VladSh), #1402 (wisgest), #1408 (VladSh) — перемещены из темы «Scripts collection» (эта тема — «Scripts discussion» — создана позднее), в которой являлись обсуждением вопроса «СКРИПТ ДЛЯ ВСТАВКИ ФАЙЛА».
Рассматривался способ вызова диалога выбора файла.

К сожалению, как это сдлелать штатными функциями я не знаю. Могу предложить следующий "финт ушами":

Code: Select all

var IE = new ActiveXObject("InternetExplorer.Application");
IE.navigate("javascript:\"<FORM><INPUT type='file'></FORM>\";");
while (IE.Busy) WScript.Sleep(100);
IE.document.forms[0].elements[0].click();
var fileName = IE.document.forms[0].elements[0].value;
IE.Quit();

ошибка

Posted: Wed Jul 18, 2007 12:03 pm
by VladSh
wisgest
В таком варианте у меня сразу автоматом стартует DownloadMaster (у меня там галка "отслеживать URL в буфере обмена", без неё неудобно..) с параметром |"javascript:"<FORM><INPUT type='file'></FORM>";|
а потом на строке 7 вылетает ошибка 80004005.

Posted: Wed Jul 18, 2007 12:17 pm
by wisgest
А если так?:

Code: Select all

var IE = new ActiveXObject("InternetExplorer.Application");
IE.navigate("");
while (IE.Busy) WScript.Sleep(100);
IE.document.write("<FORM><INPUT type='file'></FORM>");
IE.document.close();
IE.document.forms[0].elements[0].click();
var fileName = IE.document.forms[0].elements[0].value;
IE.Quit();

ничего

Posted: Wed Jul 18, 2007 12:32 pm
by VladSh
wisgest
Ничего не происходит, но и ошибок нет.

Updated: oops! Диалоги на самом деле есть, но ПОД AkelPad'ом!

Posted: Wed Jul 18, 2007 2:06 pm
by wisgest
Кстати, если нет открытых окон Internet Explorer, то диалог выводится на переднем плане.
Для того, чтобы на панели задач появлялась кнопка (она будет подмаргивать), позволяющая переключится на диалог, не сворачивая AkelPad, после строки

Code: Select all

IE.document.close();
можно добавить:

Code: Select all

IE.document.title = WScript.ScriptName;
IE.height = 0; IE.width = 0; IE.visible = true;

Работает!

Posted: Wed Jul 18, 2007 2:29 pm
by VladSh
wisgest
Да, прикольно, :lol:
ещё такое маленькое окошко вылазит под диалогом открытия файла.. без него никак низя? :D

Кстати у меня и IE и EXPLORER запущены и ничего не мигает - всё нормально открывается поверх Akel'а!
P.S. WinXP sp2 ru

Re: Работает!

Posted: Wed Jul 18, 2007 4:36 pm
by wisgest
У меня никаких окошек нет (SP1). Возможно дело в SP2, не позволяющий "из соображений безопасности" задать нулевые размеры окна (IE.height = 0; IE.width = 0;)? Может попробовать перемещать окошко за пределы экрана:

Code: Select all

IE.document.Script.moveTo(-500, -500);
но опять же, если дело в SP2, то неуверен, что она это позволит.
Мигание, в принципе, могло быть отключено (или не включено), см. http://doclab.org/2007/01/21/print:page ... adach.html
VladSh wrote:всё нормально открывается поверх Akel'а!
Так поверх или под?!!

Вместо wsh-сценария можно создать приблизительно такое hta-приложение

Code: Select all

<HTML>
<HEAD><HTA:APPLICATION
 applicationName='AkelpadFileInsertion'
 singleInstance='yes'
 caption='no'
 showInTaskBar='no'
/></HEAD>
<BODY><FORM><INPUT type='file'></FORM>
<SCRIPT language='JavaScript'>
window.resizeTo(0,0);
document.forms[0].elements[0].click();
var fileName = document.forms[0].elements[0].value;
/*
  Делаем с fileName, что нам надо...
*/
window.close();
</SCRIPT>
</BODY></HTML>
и создать для него в меню команду:
Exec('mshta "<путь к hta-файлу>"'), в этом случае диалог выбора файла у меня всегда выводится на переднем плане.

Re: Работает!

Posted: Wed Jul 18, 2007 5:07 pm
by VladSh
wisgest wrote:Может попробовать перемещать окошко за пределы экрана:

Code: Select all

IE.document.Script.moveTo(-500, -500);
но опять же, если дело в SP2, то неуверен, что она это позволит.
Точно - вылетает ошибка "Отказ в доступе".
wisgest wrote:
VladSh wrote:всё нормально открывается поверх Akel'а!
Так поверх или под?!!
После тех 2-х строк стало открываться поверх! и маленькое окошко видно только если перемещать окно выбора файла. Так что всё нормально! :)
wisgest wrote: Вместо wsh-сценария можно создать приблизительно такое hta-приложение...
Попробую. Конечно же лучше, когда работает под любой виндой.
А ещё лучше если независимо от платформы :)
Updated:
----------
Попробовал - диалог мерзко дёргается, как бы с запаздываением, а маленькое окошко всё равно видно - маленький квадратик в левом верхнем углу диалога :)
Недостаток обоих вариантов - можно свернуть AkelPad и потом очень долго искать окно с диалогом. Плохо что нельзя задать APPLMODAL, чтобы диалог был привязан к окну Akel'а, а так получается Akel можно закрыть, а окно будет болтаться.
Так что останавливаюсь пока на чистом JavaScript'е.
Спасибо за помощь! 8)
----------

ПыСы: никогда не думал, что такая простая вещь - проблема :-\

Re: СКРИПТ ДЛЯ ВСТАВКИ ФАЙЛА

Posted: Thu Jul 19, 2007 5:05 am
by wisgest
VladSh
В InsertFile.js в строке:

Code: Select all

    var File = fso.OpenTextFile(fileName, 1, false, 0);
вместо 0 лучше поставить -2 - тогда можно будет вставлять файлы и в юникоде.

Re: СКРИПТ ДЛЯ ВСТАВКИ ФАЙЛА

Posted: Thu Jul 19, 2007 7:47 am
by VladSh
wisgest wrote:в строке:

Code: Select all

    var File = fso.OpenTextFile(fileName, 1, false, 0);
вместо 0 лучше поставить -2 - тогда можно будет вставлять файлы и в юникоде.
Согласен. Изменил код InsertFile.


UPDATED:

Code: Select all

//Открытие файла
var OpenFileDialog = new ActiveXObject("UserAccounts.CommonDialog");
OpenFileDialog.Filter = 'All Files|*.*';
OpenFileDialog.ShowOpen();
fileName = OpenFileDialog.FileName;
Взято здесь: http://www.microsoft.com/technet/script ... y0128.mspx

Большая просьба! ПОЖАЛУЙСТА попробуйте и отпишитесь!
Т.к. я сначала пытался использовать MSComDlg.CommonDialog, так он писал что-то типа "Нелицензированное использование..." А этот вариант заработал без вопросов. Нужно знать, он у всех работает?

UserAccounts.CommonDialog

Posted: Thu Jul 19, 2007 6:38 pm
by wisgest
Апплет "Учётные записи пользователей" Панели управления в Windows XP фактически представляет собой hta-приложение (nusrmgr.hta), находящееся в ресурсах файла nusrmgr.cpl. Для того чтобы из него можно было вызывать диалог выбора рисунка пользователя и создан объект UserAccounts.CommonDialog. Насколько я знаю, до Windows XP он недоступен.

К сожалению

Posted: Fri Jul 20, 2007 9:23 am
by VladSh
действительно... Только что проверил на Win2000 - не работает :( а так всё было бы красиво...

Posted: Mon Aug 06, 2007 8:20 pm
by Idjo
VladSh wrote:Idjo, Instructor
Still there is an idea :idea: - by pressing Enter after a sign { on a new line at once to do the necessary space + on the third line to put closing }. And that this script worked always in a background, instead of on hotkeys. Is better to make small plug-in which would support it + automatic formation of spaces. It would be possible to take options of spaces from options AkelPad'а (spaces and their quantity or tabulation).
Idea with Shift+Right/Left not so good, even, I would tell, very bad - it is impossible to select the text!!! It is much better to use Alt+Right/Left etc.
Thanks for the English. Google Translate doesn't do a very good gob. :lol:
I can make a plugin like but there is no option to assign it to the Enter key. And you're right, it'd be better as a plug-in.
And I assigned my plug-in to Alt+Right/Left, I just called it Shift+Right/Left because it shifts the text. :)

просьба

Posted: Tue Aug 07, 2007 10:39 am
by VladSh
Instructor wrote:SelCompliteLine.js

Code: Select all

/// Select complite lines
...
Код отличный! Только нужно, чтобы он работал и без выделения, т.е. когда я просто установил курсор в определённую строку.
Можете подправить? /здесь должно быть просящая рожа/ :D
Idjo wrote:I can make a plugin like but there is no option to assign it to the Enter key. And you're right, it'd be better as a plug-in.
And I assigned my plug-in to Alt+Right/Left, I just called it Shift+Right/Left because it shifts the text. :)
EN: On ...+Enter at me too it has not turned out to appoint a combination of keys therefore I use Ctrl+Down.
Sorry, but I have not restrained - have written script itself :mrgreen: Yet I do not wish to spread, as SelCompliteLine.js works not absolutely how it would be desirable...
Then it will be possible to do a plug-in.

RU: На ...+Enter у меня тоже не получилось назначить комбинацию клавиш, потому использую Ctrl+Down.
Прошу прощения, но я не сдержался - написал скрипт сам :mrgreen: Пока не хочу выкладывать, так как SelCompliteLine.js работает не совсем так, как хотелось бы... т.е. скрипт ещё глючит.
Потом можно будет делать и плагин.