- ベストアンサー
JavaScriptによる.exeファイルの実行
JavaScriptファイルJS.htmlの実行によって 同ディレクトリ内のバッチファイルDIR.batファイルを実行し DIR.batがDIR.txtを生成するのを待ってDIR.txtをJavaScriptの内部変数var strに読み込ませる方法を教えてください なおDIR.batの内容はdir>DIR.txtです
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>cgiがhtmlにデータを渡すときの >テクニックは利用できないのでしょうか? サーバーからクライアントのブラウザに文字列を送信するみたいな 機能は無いと思います。 iis + Microsoft .NET Frameworkとか導入すると nubouさんの希望に沿うことができるかもしれません。 ローカルコンピュータではアプローチを 変えたほうがスマートにできるのではないのでしょうか。 >ハンズしてしまいました これは WshShell.Run( p + "dir.bat " + p ,0,0); を WshShell.Run( p + "dir.bat " + p ,0,1); にしてみてください。 どうでしょう?
その他の回答 (4)
- ittochan
- ベストアンサー率64% (2667/4137)
>デスクトップにはdir.txtはできあがっていました dir.bat を dir %1 > %1dir.txt としてくれないとそうなります。
- ittochan
- ベストアンサー率64% (2667/4137)
HTMLでは通常、ファイルの実行は セキュリティ上ワンクリックでは無理です。 InternetExplorerのセキュリティを下げれば可能ですが dir.bat を dir %1 > %1dir.txt としてくれるなら(駄目?) ↓でできました。 <HTML> <HEAD> <TITLE></TITLE> <SCRIPT LANGUAGE=javascript> <!-- function window_onload() { var input=""; var p = "c:\\"; p = document.location.pathname; p = p.substr(1,p.lastIndexOf("\\")); var WshShell = new ActiveXObject("WScript.Shell"); WshShell.Run( p + "dir.bat " + p ,0,0); var fso = new ActiveXObject("Scripting.FileSystemObject"); while( !fso.FileExists(p + "dir.txt")){ for(i=0;i<1000;i++){} } var f = fso.OpenTextFile( p + "dir.txt"); while (true){ if (!f.AtEndOfStream){ input += f.Read(1); }else{ break; } } f.Close(); document.write("<pre>" + input + "</pre>"); } //--> </SCRIPT> </HEAD> <BODY LANGUAGE=javascript onload="return window_onload()"> <P>Windows+InternetExplorer5以上用です<BR>変数inputにdir.txtが取り込まれます。</P> </BODY> </HTML>
お礼
デスクトップにはdir.txtはできあがっていました
補足
コピーして実行した結果 まずセキュリティ上問題あるというウォーリングが出たけれど決行したところ スクリプトがコンピュータを遅くしている可能性がありハングするかもしれません というメッセージが出たけれど続けると また同じメッセージが出たけれど続けるとハンズしてしまいました cgiがhtmlにデータを渡すときのテクニックは利用できないのでしょうか? よろしくお願いします
- ittochan
- ベストアンサー率64% (2667/4137)
Windows Script Host 5.6の execメソッドを使用すると dir コマンドの標準出力を取り込めるので dir.txtは不要になります。
補足
dir.html: <html> <head> <title></title> <script language="JavaScript" type="text/javascript"> </script> </head> <body bgcolor> <script language="JavaScript" type="text/javascript"> //////////////////// var str;//<---------------- //////////////////// document.write(str); </script> </body> </html> dir>dir.txtによってdir.txtに書きこまれる内容をstrに格納してdir.htmlをクリックすればstrの内容がブラウザに表示されるようにするにはどうしたらいいのでしょうか? dir.htmlがいるディレクトリ dir.htmlをクリックするディレクトリ dir>dir.txtを実行するディレクトリ はすべて同一とします よろしくお願いします
- ittochan
- ベストアンサー率64% (2667/4137)
<HTML> <HEAD> <TITLE></TITLE> <SCRIPT LANGUAGE=javascript> <!-- function button1_onclick() { var input=""; var p = "c:\\"; var WshShell = new ActiveXObject("WScript.Shell"); WshShell.Run( p + "dir.bat",0,0); //while(oE.Status==0){} var fso = new ActiveXObject("Scripting.FileSystemObject"); while( !fso.FileExists(p + "dir.txt")){ for(i=0;i<1000;i++){} } var f = fso.OpenTextFile( p + "dir.txt"); while (true){ if (!f.AtEndOfStream){ input += f.Read(1); }else{ break; } } //var input = f.ReadAll(); f.Close(); //while (true){ // if (!oE.StdOut.AtEndOfStream){ // input += oE.StdOut.Read(1); // }else{ // break; // } //} //TEXTAREA1.value = input; window.alert(input); } //--> </SCRIPT> </HEAD> <BODY> <P>>JavaScriptファイルJS.htmlの実行によって<BR> Windows Script Host(Windowsに標準搭載)を使用します。<BR><BR> htmlファイルですとセキュリティ警告がでるので<BR> Jscriptファイル(.js)を検討してください。</P> <P>dir.batの内容は<BR>dir c:\ > c:\dir.txt<BR>としました。<BR>どの環境でも出力先が固定されるように<BR>パスを明確にしました。<BR>ブラウザ上から実行させるとデスクトップの内容が<BR>出力され、dir.txtもデスクトップに保存されてしまうからです。<BR>(私の環境だけかもしれません。)</P> <P>Windows+InternetExplorer5以上用です<BR>変数inputにdir.txtが取り込まれます。</P> <P><INPUT language=javascript id=button1 onclick="return button1_onclick()" type=button value=実行 name=button1></P> <P></P> <P> </P> </BODY> </HTML>
補足
「実行する専用のディレクトリ」で実行するのでpはすべてカットしてしました 前記ディレクトリに作成したdir.htmlに回答をコピーして 前記ディレクトリにdir.batをつくり 前記ディレクトリ内のdir.htmlをクリックして 出た実行ボタンをクリックしましたが 前記ディレクトリにdir.txtが作成されません 何が悪いのでしょうか? よろしくお願いします なおdir.htmlは以下の内容です <HTML> <HEAD> <TITLE></TITLE> <SCRIPT LANGUAGE=javascript> <!-- function button1_onclick() { var input=""; var WshShell = new ActiveXObject("WScript.Shell"); WshShell.Run("dir.bat",0,0); //while(oE.Status==0){} var fso = new ActiveXObject("Scripting.FileSystemObject"); while( !fso.FileExists("dir.txt")){ for(i=0;i<1000;i++){} } var f = fso.OpenTextFile("dir.txt"); while (true){ if (!f.AtEndOfStream){ input += f.Read(1); }else{ break; } } //var input = f.ReadAll(); f.Close(); //while (true){ // if (!oE.StdOut.AtEndOfStream){ // input += oE.StdOut.Read(1); // }else{ // break; // } //} //TEXTAREA1.value = input; window.alert(input); } //--> </SCRIPT> </HEAD> <BODY> <P>>JavaScriptファイルJS.htmlの実行によって<BR> Windows Script Host(Windowsに標準搭載)を使用します。<BR><BR> htmlファイルですとセキュリティ警告がでるので<BR> Jscriptファイル(.js)を検討してください。</P> <P>dir.batの内容は<BR>dir > dir.txt<BR>としました。<BR>どの環境でも出力先が固定されるように<BR>パスを明確にしました。<BR>ブラウザ上から実行させるとデスクトップの内容が<BR>出力され、dir.txtもデスクトップに保存されてしまうからです。<BR>(私の環境だけかもしれません。)</P> <P>Windows+InternetExplorer5以上用です<BR>変数inputにdir.txtが取り込まれます。</P> <P><INPUT language=javascript id=button1 onclick="return button1_onclick()" type=button value=実行 name=button1></P> <P></P> <P> </P> </BODY> </HTML>
お礼
ローカルコンピュータではアプローチを 変えたほうがスマートにできるのではないのでしょうか。: そうですね 戦術を変えてCでやることを考え始めています ありがとうございました