Autor Zpráva
zetrozet
Profil *
Jedná se mi o použití na lokálním počítači.
Spustit *.EXE javascriptem není problém, ale nevím jak onomu *.EXE předat parametry zadané uživatelem do formuláře. Přitom by mi bylo jedno, jestli by ten *.EXE měl číst parametry z příkazové řádky nebo ze souboru.
Marek88
Profil
Kde je problém? V tom, že nevíte, jak předat programu parametry nebo jak ty parametry vytáhnout z formuláře? Jestli chcete radu (ať už ode mě nebo od někoho jiného), doporučuji vám sem vložit kód, který máte hotový - formulář + spuštění programu.
zetrozet
Profil *
Nevím, jak parametry předat programu.

 
function poslat(adr99) {
 kde=adr99;
// zde = document.location.toString();
// zde = zde.substring(0,zde.lastIndexOf("/")+1);
 konc0=document.zobradr["konc"].value;
 soub0=document.zobradr["nazsoub"].value;
 adresa0=document.zobradr["adresa"].value;
 while (konc0.indexOf(" ")>0) konc0=konc0.replace(" ","");
 while (soub0.indexOf(" ")>0) soub0=soub0.replace(" ","");
 while (adresa0.indexOf(" ")>0) adresa0=adresa0.replace(" ","");
 if (konc0!="" && soub0!="") {
  alert("Název souboru nebo koncovka souboru musí zůstat prázdný\nOpravte"); return false; }
 if (konc0=="" && soub0=="") {
  alert("Název souboru nebo koncovka souboru musí být vyplněn.\nOpravte"); return false; }
 if (adresa0=="") {
  alert("Adresář (složka) kde má prohledávání začít, musí být vypněn vždy.\nOpravte"); return false; }
 if (konc0!="") vystup=' /F *.'+konc0; else vystup=' /F '+soub0;
 vystup=vystup+' /D \"'+adresa0+'\" /S '+kde+'obrazky_v.js /e '+kde+'obrazky_v.HTM /P nalezeno';
// vystup='hledani.exe '+vystup;
// document.zobradr.vystup=encodeURI(vystup);
 alert('Vystup: '+vystup);
 return window.open("hledani.exe ","",vystup);
// return window.open(vystup,"");
}
Witiko
Profil
Deklarace proměnných jsou viditelně pouze pro zelenáče, pravý zálesák to zvládne i bez nich, no nemám já pravdu? Tohle by mělo fungovat:
window.open("hledani.exe " + vystup);
zetrozet
Profil *
Možná by to fungovat mělo, ale nefunguje - v tomto případě je hledán a nenalezen soubor "hledani.exe%20/..." atakdál. Prostě v tomto případě není mezera a "%20" považována za stejný znak.
Witiko
Profil
zetrozet:
Bude to tipuju pevně daným formátem URI schématu. Prohlížeč není příkazová řádka windows.
zetrozet
Profil *
Proto se ptám zkušenějších, jak parametry předat *.EXE. U způsobů, které nefungují, mne nezajímá, proč nefungují.
Mike8748
Profil
zetrozet:
a co tě dovedlo k názoru že to takto vůbec lze? (neřeknu být to v IE a používat VB, ale javascriptem spouštět program s parametry?)
Chamurappi
Profil
Reaguji na zetrozeta:
U způsobů, které nefungují, mne nezajímá, proč nefungují.
Ale z vysvětlení jde odvodit, že žádné jiné nejsou.

Spustit *.EXE javascriptem není problém
Není problém přesvědčit prohlížeč, aby se zeptal uživatele, co chce se souborem udělat — uživatel si může vybrat, že ho chce spustit (jen tak, bez parametrů), nebo uložit (pak se parametry pochopitelně také neukládají).


Reaguji na Mika8748:
neřeknu být to v IE a používat VB
Skriptovací jazyky mají v Exploreru ekvivalentní možnosti. Prakticky vše, co umí VBScript, umí i JavaScript.
Mike8748
Profil
Chamurappi:
javascript mě nechá vytvořit new ActiveXObject("wscript.shell") ? sem netušil (pravda, nebyla potřeba to zjišťovat)
zetrozet
Profil *
Ale v dotazu jsem se ptal, jestli lze předat parametry buď zapsáním do nějakého souboru nebo příkazovou řádkou, případně jinak. O tom, že by mělo jít výhradně o předání příkazovou řádkou, řeč nebyla.
Jde mi o fungování na lokálním počítači bez instalace Apache nebo jiných podobných aplikací.
Chamurappi
Profil
Reaguji na Mike8748:
Na webové stránce nenechá, pokud WScript.Shell není v registru poznačený jako bezpečný pro skriptování. Přesně totéž platí pro VBScript.


Reaguji na zetrozeta:
buď zapsáním do nějakého souboru nebo příkazovou řádkou, případně jinak
Webová stránka má v tomto směru hodně omezené možnosti. Zapsat do souboru nemůžeš, příkazovou řádku nevyvoláš. Možná bys mohl zapsat cookie a tu pak tím EXE programem odněkud pracně vylovit. Můžeš měnit ten EXE? Máš jeho zdroják? Pomohlo by upřesnění, o co se vlastně snažíš a co tě přivedlo k této slepé uličce.
zetrozet
Profil *
Zdroják *.EXE mám a upravovat ho jakžtakž umím.
Původ problému - když žena počítala zájemcům důchodovou kalkulačku, uložila si *.XLS z každého výpočtu extra a já jí to musel ručně zpřístupnit = šlo sice jen o řádek v javascriptovém souboru - základ je na www.zetrozet.com v prográmku "Domovská stránka".

Když mě to přestalo bavit, tak jsem udělal *.EXE jako obecný vyhledávač, který spouštím *.BAT s natvrdo nastavenými parametry. Vyhledávač podle parametrů vyhledá v zadaném adresáři a podadresářích všechny soubory splňující zadanou masku vtvoří buď *.TXT nebo *.JS a případně i spustí vybraný *.HTM, kterým zobrazí seznam vyhledaných souborů (o obrázků s náhledem) a uživateli umožní odkazem jednotlivý soubor otevřít/spustit.
Teď jsem chtěl ony natvrdo napsané *.BATy nahradit variabilnějším systémem.
zetrozet
Profil *
Protože nelze k příspěvkům připojit soubory, jsou soubory ke stažení na www.zetrozet.biz/index.php?load=jakpsatweb . Je tam HLEDANI.EXE, zobrazovací OBRAZKY_V.HTM i vzorová data v OBRAZKY_V.JS. Požadované parametry pro HLEDANI.EXE jsou v jeho helpu, je-li *.EXE spuštěn bez parametrů. Posílat obrázky pro záhlaví *.HTM mi připadá pro řešení problému zbytečné.
Witiko
Profil
Tak si javascriptem vygeneruj ty baty, poté je ručně překopíruj a spusť.
Chamurappi
Profil
Reaguji na zetrozeta:
Jestli tomu dobře rozumím, tak tu hypertextovou část svého díla sestavuješ jen proto, abys nemusel vymýšlet jiný způsob komunikace s uživatelem (programovat si vlastní formuláře).

Zkus si vyhledat něco o „HTML Application“ (HTA). Kdysi s tím přišel Microsoft, je to lokálně spouštěná HTML stránka v holém jádru Internet Exploreru s rozšířenými právy. Skripty v ní tuším mohou libovolně pracovat se soubory (třeba je i přímo spouštět) pomocí ActiveX komponent, s nimiž není dovoleno pracovat v prostředí webu, jako je např. FileSystemObject, možná i ten WScript.Shell.
_es
Profil
zetrozet:
Ešte sa dá okrem Chamurappiho riešenia použiť aj spustenie JS intrepretu v prostredí OS, teda vytvorenie priamo spustiteľného .js súboru, v ktorom bude kód spúšťajúci to jadro IE a ovládajúci ho.
zetrozet
Profil *
Reaguji na Chamurappiho:
Uživatel, který neumí programovat, zadá požadavek do formuláře v HTML, ale ten skript mám právě díky nefunkčnímu předávání parametrů jen v "domácím" exempláři (ve fungujícím InnerTextu), obrázky píchnu za chvíli na výše uvedenou stránku.

Reaguji na Witika:
Kdybych to měl jen pro sebe, je prašť jako uhoď jestli zapíšu pár písmenek do příkazové řádky nebo stvořím generátor baťáků. Ale pro normálního uživatele je ono navrhované "překopírování a spuštění" nepřijatelné, protože je to něco víc, než kliknutí na zástupce na ploše nebo na volbu v prohlížeči.
_es
Profil
zetrozet:
Ale pro normálního uživatele je ono navrhované "překopírování a spuštění" nepřijatelné
Podľa môjho návrhu by tomu užívateľovi stačilo kliknúť na .js súbor na ploche.
Chamurappi
Profil
Reaguji na zetrozeta:
… a podle mého návrhu by mu stačilo kliknout na .hta soubor na ploše.

Jestli se dá spolehnout na přítomnost .NET Frameworku v počítači uživatele (tuším, že verze 2.0 byla v nějakém service packu WinXP), nebylo by těžké napsat baťák, který u uživatele sám vytvoří celou okenní EXE aplikaci.
zetrozet
Profil *
Reaguji na _es:
Vysvětli aspoň mě, který to zatím nikdy nepotřeboval, jak (asi nainstalovat a) spustit JS interpret v prostředí OS. Pak spolu zkonzultujeme je-li to tlumočitelné uživatelům, aby si to udělali ve svých počítačích sami.

Reaguji na Chamurappiho:
Na .NET Framework se asi spolehnout dá. Na druhou stranu mám dost možná uživatele, kteří ještě neopustili Win 95/98, ale těmi bych se netrápil.
Proč psát baťák vytvářející celou EXE aplikaci nechápu, když mi stačí do baťáku dostat uživatelem aktuálně vymyšlené parametry = adresář, ve kterém se mají hledat soubory dle zadané masky nebo koncovky a pak ten baťák spustit. To následné počínaje spuštěním baťáku už mi funguje, a podle helpu v HLEDANI.EXE si to můžete vyzkoušet - na [url=www.zetrozet.biz/index.php?load=jakpsatweb]www.zetrozet.biz/index.php?load=jakpsatweb[/url] si můžete soubory stáhnout a vyzkoušet včetně vytvoření datového *.js. *.HTM je natolik jednoduchý, že nikomu z Vás by úprava názvu proměnné a názvy *.js neměla činit problémy.

Vzorový baťák přikládám:
F:\doma\hledani.EXE /D "X:\LADA_FOTO\08 07-08" /F *.jpg /S F:\doma\obrazky_v.js /e F:\doma\obrazky_v.htm /P nalezeno
_es
Profil
zetrozet:
Vysvětli aspoň mě, který to zatím nikdy nepotřeboval, jak (asi nainstalovat a) spustit JS interpret v prostředí OS.
Tak isto, ako spustíš .exe súbor, len spustíš .js súbor, vo Windows ten JS interpret už je.
zetrozet
Profil *
A jaká je jeho struktura, případně jak ho na té ploše vytvořím. Zatím jsem se s koncovkou .js setkal pouze u souborů JavaScriptu.
zetrozet
Profil *
Chamurappi:
… a podle mého návrhu by mu stačilo kliknout na .hta soubor na ploše.
Vyzkouším, v téhle chvíli a s mými znalostmi je to asi nejschůdnější cesta zkusit to nejnutnější pro .HTA nastudovat.
_es
Profil
zetrozet:
Zatím jsem se s koncovkou .js setkal pouze u souborů JavaScriptu.
No veď ide o JavaScript, teda presnejšie o JScript, len nebeží v prostredí prehliadača, ale využíva knižnice OS. Napríklad tu máš nejaký príklad z dokumentácie.

jak ho na té ploše vytvořím.
V hocijakom textovom editore vytvoríš súbor s koncovkou .js.
zetrozet
Profil *
Pánové děkuji za spolupráci, už to funguje k mé spokojenosti. V podstatě jsem použil obojí - z HTM udělal HTA a do výše uvedeného sktiptu doplnil čtyři řádky pro FileSystemObject. Nový tvar přikládám:
function poslat(adr99) {
var fso = new ActiveXObject("Scripting.FileSystemObject");
 kde=adr99;
 konc0=document.zobradr["konc"].value;
 soub0=document.zobradr["nazsoub"].value;
 adresa0=document.zobradr["adresa"].value;
 while (konc0.indexOf(" ")>0) konc0=konc0.replace(" ","");
 while (soub0.indexOf(" ")>0) soub0=soub0.replace(" ","");
 while (adresa0.indexOf(" ")>0) adresa0=adresa0.replace(" ","");
 while (adresa0.lastIndexOf("/")==adresa0.length-1) adresa0=adresa0.substr(0,adresa0.length-1);

 if (konc0!="" && soub0!="") {
  alert("Název souboru nebo koncovka souboru musí zùstat prázdný\nOpravte"); return false; }
 if (konc0=="" && soub0=="") {
  alert("Název souboru nebo koncovka souboru musí být vyplnìn.\nOpravte"); return false; }
 if (adresa0=="") {
  alert("Adresáø (složka) kde má prohledávání zaèít, musí být vypnìn vždy.\nOpravte"); return false; }
 if (konc0!="") vystup=' /F *.'+konc0; else vystup=' /F '+soub0;
 
 vystup=vystup+' /D \"'+adresa0+'\" /S '+kde+'obrazky_v.js /e '+kde+'obrazky_v.HTM /P nalezeno';
 vystup=kde+'hledani.exe '+vystup;
var soubor = fso.CreateTextFile("hledani.bat", true);
soubor.WriteLine(vystup);
soubor.Close();
return window.open("hledani.bat");
}

_es
Profil
zetrozet:
Len ešte drobný nedostatok: Používejte var

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0