>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Запуск внешнего приложения http://forum.mozilla-russia.org/viewtopic.php?id=9403 |
formatC'vt > 02-04-2006 23:23:11 |
Собсно сабж. Поделитесь кодом плз. |
Yan > 02-04-2006 23:25:59 |
Код можно подглядеть в расширении External Application Buttons. |
diagnostik > 04-04-2006 23:30:46 |
Разберешся? function startProcess(str_LocalProgram, arguments){ //try to create process |
formatC'vt > 08-04-2006 13:10:17 |
Выделить код Код:function launchfile1() { var file = Components.classes['@mozilla.org/file/local;1'] .createInstance(Components.interfaces.nsILocalFile); var process = Components.classes['@mozilla.org/process/util;1'] .getService(Components.interfaces.nsIProcess); file.initWithPath('c:\windows\notepad.exe'); if(! file.exists()) { alert('file not found!'); } else { alert('start'); file.launch(); process.init(file); var arguments='123'; process.run(false, arguments, arguments.length); } } Выделить код Код:function launchfile2() { alert('begin'); const FileFactory = new Components.Constructor("@mozilla.org/file/local;1","nsILocalFile","initWithPath"); str_LocalProgram ='c:\windows\notepad.exe'; try { alert('try1'); var obj_Program = new FileFactory(str_LocalProgram); if (! obj_Program.exists()) { alert('file not found!'); } } catch (e) { alert('catch1'); alert(e) } try { alert('try2'); var obj_Process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); } catch (e) { alert('catch2'); alert(e); } alert('init'); obj_Process.init(obj_Program); alert('start'); obj_Process.run(false, arguments, 0, {}); } Оба варианта выносит с сообщением 'file not found' |
formatC'vt > 08-04-2006 13:14:00 |
c:\\windows\\notepad.exe ыыыть, разоблася, всем спс |
formatC'vt > 08-04-2006 13:27:04 |
Но вот возник другой вопрос, как из XULRunner запустить браузер установленный в системе по-умолчанию? Выше перечисленные функции не работают, если в качестве файла указать урл. Есть какой-нибудь способ сделать это? Или другого пути нет кроме как "встроить" свой браузер? |
mojo > 12-04-2006 18:10:35 |
может быть |
formatC'vt > 15-04-2006 10:44:00 |
Неа, виснет на |
Anton > 15-04-2006 15:15:21 |
formatC'vt пишет
Если файл локальный, то Выделить код Код:var lf = Components. classes ["@mozilla.org/file/local;1"]. createInstance (Components. interfaces. nsILocalFile); lf. initWithPath ("P:\\close_wind.html"); lf. launch (); |
formatC'vt > 15-04-2006 15:34:44 |
Прошу за простить за неточность формулировки вопроса, надо УРЛ открыть в браузере по-умолчанию. |
formatC'vt > 16-04-2006 02:41:28 |
Вспомнил детство, написал свою версию start.exe Выделить код Код:format PE GUI entry start section '.flat' code data readable executable writeable start: call [GetCommandLine] @@loop: inc eax cmp byte[eax],'"' jnz @@loop inc eax inc eax push 1 push 0 push 0 push eax push lpOperation push 0 call [ShellExecute] push 0 call [ExitProcess] lpOperation db 'open',0 data import dd 0,0,0,RVA kernel_name,RVA kernel_table dd 0,0,0,RVA shell_name,RVA shell_table dd 0,0,0,0,0 kernel_table: ExitProcess dd RVA _ExitProcess GetCommandLine dd RVA _GetCommandLineA dd 0 shell_table: ShellExecute dd RVA _ShellExecuteA dd 0 kernel_name db 'KERNEL32.DLL',0 shell_name db 'SHELL32.DLL',0 _ExitProcess dw 0 db 'ExitProcess',0 _GetCommandLineA dw 0 db 'GetCommandLineA',0 _ShellExecuteA dw 0 db 'ShellExecuteA',0 end data |
ViRUS > 16-04-2006 16:04:54 |
formatC'vt, насчёт детства ты загнул! Фасма тогда ещё не было! Кстати, насчёт просмотра строки до закрывающей кавычки - моветон, сделай ещё проверку на нуль, вдруг кавычек не окажется? |
formatC'vt > 16-04-2006 17:51:16 |
ViRUS, да не многим он от TASM'a отличается, что первое под руку попалось, на том и написал и особых проблем этот запоздалый переход не вызвал Выделить код Код:start: call [GetCommandLine] @@loop: inc eax cmp byte[eax],'"' jnz @@loop inc eax inc eax push 1 push 0 push 0 push eax push lpOperation push 0 call [ShellExecute] push 0 call [ExitProcess] Сделать: Выделить код Код:start: call [GetCommandLine] cmp byte[eax],0 jz @@exit cmp byte[eax],'"' jnz @@woQuote @@quote: inc eax cmp byte[eax],0 jz @@exit cmp byte[eax],'"' jnz @@quote inc eax jmp @@exec @@woQuote: inc eax cmp byte[eax],0 jz @@exit cmp byte[eax],' ' jnz @@woQuote @@exec: inc eax push 1 push 0 push 0 push eax push lpOperation push 0 call [ShellExecute] @@exit: push 0 call [ExitProcess] Но самом деле проблема не в этом, а вот в чем: Не работает Т.е. при попытке передать запускаему процессу какую-либо строку параметров он не запускается |
ViRUS > 16-04-2006 17:57:19 |
Не запускается из-за переделанного start.exe? Или я чего не понял... Сорри, уже просто сплю... Завтра перечитаю - подумаю... |
formatC'vt > 16-04-2006 18:05:00 |
Ничего не запускает, даже это: Выделить код Код:include 'include\win32ax.inc' .code start: invoke GetCommandLine invoke MessageBox,HWND_DESKTOP,eax,"Command Line is",MB_OK invoke ExitProcess,0 .end start |
Merlyel > 16-04-2006 18:05:01 |
А если попробовать Если то получаем, что длина arguments - 12, а надо-то наверное всего 1... Мож из-за этого? %) |
formatC'vt > 16-04-2006 18:08:03 |
Lynxx, понял, учим матчасть, спс заработало |
Merlyel > 16-04-2006 18:11:33 |
formatC'vt |
AntoshaChips > 21-12-2009 15:19:52 |
Привет, запускаю из firefox питоновский скрипт: Выделить код Код:var file = Components.classes['@mozilla.org/file/local;1'] .createInstance(Components.interfaces.nsILocalFile); var process = Components.classes['@mozilla.org/process/util;1'] .getService(Components.interfaces.nsIProcess); file.initWithPath('D:\\python\\script3.py'); process.init(file); var arguments=['...']; process.run(true, arguments, arguments.length); Всё работает, но только один раз. Второй раз скрипт не запускается. Помогает только перезапуск firefox. |
formatC'vt > 21-12-2009 18:41:32 |
мою тему трёхлетней давности подняли |
Infocatcher > 21-12-2009 20:15:58 |
Относительно недавно поменяли, теперь нужно так. |
AntoshaChips > 28-12-2009 15:14:30 |
Выделить код Код:var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); Спасибо! Работает! 28-12-2009 15:27:16 |
Infocatcher > 29-12-2009 01:49:35 |
AntoshaChips пишет
Проверять нужно... |
alex345 > 02-10-2011 17:04:59 |
formatC'vt пишет
formatC'vt пишет
Как можно запустить приложение или, например, текстовый файл, находящийся в установленном расширении, внутри zip (xpi) архива? Можно ли запустить это приложение поверх всех окон? |
tenshi > 02-10-2011 18:31:13 |
распаковать и запустить 02-10-2011 18:53:40 |
hydrolizer > 02-10-2011 19:18:43 |
alex345 пишет
Для начала - прочитать содержимое файла, и сохранить во временную папку. Распаковку можно сделать c помощью nsIZipReader. alex345 пишет
Вообще-то это исключительно свойство окна запускаемого приложения, и в общем случае запускающим приложением никак не задается. Если очень хочется - получайте хэндл окошка запущенного приложения (только учтите, что нужен хэндл от top-level window), далее - через js-ctypes делаете вызов SetWindowPos, задав hWndInsertAfter=HWND_TOPMOST. Разумеется, это решение специфично для платформы. |
selevo > 13-07-2012 16:21:01 |
объясните понятным языком что куда приделать |
formatC'vt > 13-07-2012 17:03:45 |
selevo пишет
всё зависит от конечной цели |
selevo > 13-07-2012 23:13:11 |
да вот хочу как бы панель управления сделатть на страничке своей |
selevo > 14-07-2012 13:13:35 |
на локальном компе надо всё запускать |
selevo > 14-07-2012 20:04:23 |
я уже начинаю нервничать.... |
selevo > 14-07-2012 20:34:01 |
web-бот написан на selenium IDE расширение такое для web автоматизации Мне надо только что бы заработала гиперссылка подобного типа и только это. |
selevo > 14-07-2012 20:44:07 |
аа,тоесть какое-то расширение даже типа CB ,отслеживает клик на эту ссылку и запускает уже само от своего имени блокнот ,так ? |
selevo > 14-07-2012 22:39:56 |
ну да так проще |
selevo > 15-07-2012 08:03:29 |
а можно пример странички с которой это будет работать ? |
selevo > 15-07-2012 13:01:22 |
понял, сегодня завтра потестю. |
selevo > 15-07-2012 16:35:18 |
работает вроде... |
selevo > 15-07-2012 17:16:51 |
оо,гибко))) |
selevo > 19-07-2012 23:00:51 |
о я про rundll32 уже начинал было читать но потом как то интересы повернулись. |
selevo > 28-07-2012 16:56:12 |
а как таким же образом сделать так, чтобы нажался элемент управления (кнопка) в одном из аддонов FF ? Да и вообще интересует сам принцип реализации и доступа к таким вещам. вот ролик |
selevo > 28-07-2012 17:36:48 |
вот что показывает Выделить код Код:id="play-button" label="Play" class="icon" tooltiptext="Play current test case" command="cmd_selenium_play" oncommand="goDoCommand('cmd_selenium_play')" А в каком месте этого кода разместить команду ? Выделить код Код:var myExt_urlBarListener = { QueryInterface: function(aIID) { if (aIID.equals(Components.interfaces.nsIWebProgressListener) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports)) return this; throw Components.results.NS_NOINTERFACE; }, onLocationChange: function(aProgress, aRequest, aURI) { setTimeout(progstart, 300); }, onStateChange: function(a, b, c, d) {}, onProgressChange: function(a, b, c, d, e, f) {}, onStatusChange: function(a, b, c, d) {}, onSecurityChange: function(a, b, c) {} }; gBrowser.addProgressListener(myExt_urlBarListener,Components.interfaces.nsIWebProgress.NOTIFY_LOCATION); function progstart(){ var url=gURLBar.value; if (url.match(/runmyprograms\.html#/g)=="runmyprograms.html#"){ var chkpoint='runmyprograms.html#'; var arrayOfStrings = url.split(chkpoint); var numprg=arrayOfStrings[1] if (numprg==1){ BrowserBack(); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\windows\\notepad.exe"); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); var args = ["c:\\boot.ini", ""]; process.run(false, args, args.length) } else { if (numprg==2){ BrowserBack(); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\windows\\notepad.exe"); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); var args = ["c:\\autoexec.bat", ""]; process.run(false, args, args.length) } else { if (numprg==3){ BrowserBack(); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\windows\\notepad.exe"); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); var args = ["c:\\boot.ini", ""]; process.run(false, args, args.length) } else { if (numprg==4){ BrowserBack(); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\windows\\notepad.exe"); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); var args = ["c:\\boot.ini", ""]; process.run(false, args, args.length) } else { if (numprg==5){ BrowserBack(); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\windows\\notepad.exe"); var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); var args = ["c:\\boot.ini", ""]; process.run(false, args, args.length) } //-----------куски кода с обработкой вставляем сюда----сам кусок см.ниже закомментированный //------------------------------------------------------------------------ } } } } } //--------сюда добавляем фигурную скобку при добавлении куска с обработкой } /* -------кусок который нужно вставлять else { if (numprg==4){ // указываем цифру которую будем обрабатывать BrowserBack(); var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); file.initWithPath("C:\\windows\\notepad.exe"); // путь до екзешника НЕЗАБЫВАЕМ про двойные косые в пути! var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.init(file); var args = ["c:\\boot.ini", ""]; // аргументы для запуска, при надобности заменяем двойные кавычки одинарными, // всё что через пробел это отдельный арумент, т.е для aa.exe -vasya +pupkin "ololo 1111" u /z // записываем так: var args = ["-vasya", "+pupkin","'ololo","1111'","u","/z"]; // если прога не понимает одинарные кавычки в параметрах то делаем так var args = ['-vasya', '+pupkin','"ololo','1111"','u','/z']; process.run(false, args, args.length) } */ |
selevo > 28-07-2012 18:24:13 |
благодарю,первое работает вроде нормально,буду тестить. |
selevo > 19-08-2012 09:37:33 |
Совершенно тупой вопрос,а как "нажать на кнопку " панели инструментов ? Выделить код Код:if (numprg==6){ BrowserBack(); toggleSidebar('viewSeleniumIDESidebar');// так кнопка называется в инспекторе //goDoCommand('cmd_selenium_play'); Но так не пашет ))) |
selevo > 19-08-2012 20:51:16 |
пробовал вместо писать |
selevo > 20-08-2012 08:22:27 |
попробовал |
selevo > 21-08-2012 19:05:18 |
отдельно созданная кнопка selenium запускает сам обработчик ссылки 6 вообще не обрабатывается,алертов нет. И ещё почему-то я поменял цифру 5 на 6 в обработчике ссылок,а при нажатии на 5 всё равно запускается что было на ней раньше скрытый текст var myExt_urlBarListener = { QueryInterface: function(aIID) { if (aIID.equals(Components.interfaces.nsIWebProgressListener) || aIID.equals(Components.interfaces.nsISupportsWeakReference) || aIID.equals(Components.interfaces.nsISupports)) return this; throw Components.results.NS_NOINTERFACE; }, onLocationChange: function(aProgress, aRequest, aURI) onStateChange: function(a, b, c, d) {}, gBrowser.addProgressListener(myExt_urlBarListener,Components.interfaces.nsIWebProgress.NOTIFY_LOCATION); function progstart(){ var url=gURLBar.value; if (numprg==1){ } } } } } //------------------------------------------------------------------------ } /* -------кусок который нужно вставлять else { var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); process.run(false, args, args.length) } */ и я так и не понял для цего набор скобок } после тестов я посчитал и мне показалось что они вообще лишние ))) и для чего везде ставится else ,без него if не будет отрабатываться ? Консоль завтра посмотрю. |
selevo > 22-08-2012 10:15:23 |
работает,благодарю А почему когда я раскоментировал обработку только первой ссылки вот так: скрытый текст if (numprg==1){ var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); остальные же оставив,у меня все остальные стали работать как первая ? |