1 名前:デフォルトの名無しさん [2005/08/12(金) 19:29:35 ] JScript .NETを語るスレです。質問等どうぞ。 関連リンク JScript .NETの紹介 www.microsoft.com/japan/msdn/columns/scripting/scripting07142000.asp [MSDN] JScript www.microsoft.com/japan/msdn/library/ja/jscript7/html/jsoriJScript.asp .NET Framework ダウンロード情報 www.microsoft.com/japan/msdn/netframework/downloads/ JScript.NET (入門者向け) homepage3.nifty.com/aya_js/JScript.NET/ .NET Framework SDKで始める .NETプログラミング www.atmarkit.co.jp/fdotnet/special/dotnet_sdk/dotnetsdk01.html 関連スレ ECMAScript デス 2 pc8.2ch.net/test/read.cgi/tech/1088298991/l50
13 名前:デフォルトの名無しさん mailto:sage [2005/08/15(月) 14:00:22 ] コードの冒頭から実行したいとき、エントリーポイントはどうなるんですか? CodeDomでコンパイルしてアセンブリオブジェクトを取得した後 アセンブリ内の関数を呼び出す方法はわかったのですが、コードの冒頭から実行する方法がわかりません
14 名前:デフォルトの名無しさん mailto:sage [2005/08/18(木) 12:58:54 ] CodeDomはまだ使ったことないなあ。
15 名前:デフォルトの名無しさん [2005/08/19(金) 22:25:13 ] 自分自身のソースを表示 import System;var q='"',s="import System;var q='{0}',s={0}{1}{0};Console.WriteLine(s,q,s);";Console.WriteLine(s,q,s);
16 名前:デフォルトの名無しさん [2005/08/24(水) 00:12:17 ] 数式を計算 E:\>type calc.js import System; var expr : String, ans : Number; while ((expr = Console.ReadLine()) != null) { try { eval("with(Math) { ans=(" + expr + ");}"); Console.WriteLine(ans); } catch (e : Exception) { Console.WriteLine("Error"); } } E:\>jsc /nologo /fast- calc.js E:\>calc.exe 1+2+3 6 1/3 0.333333333333333 sqrt(2) 1.4142135623731 r=5 5 2*PI*r 31.4159265358979 Console.WriteLine("hello") hello NaN (非数値) ^Z
17 名前:デフォルトの名無しさん [2005/08/25(木) 17:31:44 ] PUBLIC:COMPONENT で始まるコードってなんですか? これあるとFirefoxで読めないんですけど。 どうすればいいのでしょか?
18 名前:デフォルトの名無しさん mailto:sage [2005/08/25(木) 19:39:36 ] >>17 思いっっきりスレ違いですなあ。誤爆? www.microsoft.com/japan/msdn/workshop/author/behaviors/overview/elementb_ovw.asp
19 名前:デフォルトの名無しさん mailto:sage [2005/08/26(金) 00:12:52 ] 関連スレ追加 ■(((Microsoft.NET総合スレッド)))■ pc8.2ch.net/test/read.cgi/tech/1124784480/l50
20 名前:デフォルトの名無しさん [2005/08/29(月) 22:13:51 ] echoコマンド(もどき) import System; import System.Collections; var arguments: ArrayList = new ArrayList(Environment.GetCommandLineArgs()); arguments.RemoveAt(0); var nFlag = arguments.Count > 0 && arguments[0] === "-n"; if (nFlag) arguments.RemoveAt(0); Console.Write(String.Join(" ", String[](arguments.ToArray()))); if (! nFlag) Console.WriteLine();
21 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 22:16:45 ] >>20 booleanが抜けてた。なくても動くけれど var nFlag : boolean = …
22 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 22:22:24 ] 正直、一々型付けしてたらJScript.NETの利点が見あたらなくなると思うんだ。
23 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 22:25:51 ] 即席でちょっとしたプログラム作るなら 一々型付けしなくてもいいってメリットはあるね。
24 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 22:45:43 ] こうするとJavaScriptっぽい感じ // echo.js import System; var arguments = Environment.GetCommandLineArgs().slice(); arguments.shift(); var nFlag = arguments.length > 0 && arguments[0] == "-n"; if (nFlag) arguments.shift(); Console.Write("{0}{1}", arguments.join(" "), nFlag ? "" : "\n");
25 名前:デフォルトの名無しさん mailto:sage [2005/08/29(月) 23:24:30 ] >>20 の5行目を const nFlag : boolean = arguments.Count > 0 && arguments[0] === "-n"; とすると「***内部コンパイラ エラー***」となる。これはコンパイラのバグか。 var t : boolean = arguments.Count > 0 && arguments[0] === "-n"; const nFlag : boolean = t; とするとエラーにならないし。
26 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 01:39:44 ] >>13 Assemblyが手に入ったならあとはEntryPointプロパティでMethodInfoが手にはいるからそいつをInvokeだ。 ちなみにjsc.exeだと自動的に"JScript Main"クラスを作成し、その静的メソッドMainをエントリポイントに割り当てる。 この中身にベタで書かれたコードが内蔵される。 ……エントリポイントを任意のメソッドであると明示することってできたっけ?
27 名前:デフォルトの名無しさん mailto:sage [2005/08/30(火) 23:07:26 ] >>26 わ。ありがとうございます。やってみます。 jsc でコンパイルして、Reflect関連ツールで覗いてみたらグローバルオブジェクトを継承したクラスのメソッド?になってたような。
28 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 08:45:33 ] >>26 EntryPoint が null でした orz jscと同じような加工を施さないとだめな気がしてきた。
29 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 10:51:42 ] えー、nullになる? ……あ、ひょっとしてCompilerParametersのExecutableをtrueにしてないんじゃ? サンプル書いてみた。 import System; import System.CodeDom.Compiler; import System.Reflection; import Microsoft.JScript; var source : String = "var ie = new ActiveXObject(\"InternetExplorer.Application\");" + "ie.Navigate(\"ttp://www.yahoo.com/\");" + "ie.Visible = true;"; var provider : JScriptCodeProvider = new JScriptCodeProvider(); var jsc : ICodeCompiler = provider.CreateCompiler(); var param : CompilerParameters = new CompilerParameters(); param.GenerateInMemory = true; param.GenerateExecutable = true; var result : CompilerResults = jsc.CompileAssemblyFromSource(param, source); var assembly : Assembly = result.CompiledAssembly; var entry : MethodInfo = assembly.EntryPoint; var args : Object[] = new Object[1]; entry.Invoke(null, new Object[1]);
30 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 11:19:18 ] × CompilerParametersのExecutable ○ CompilerParametersのGenerateExecutable for...inってSystem.Arrayから派生した配列には使えないの? いや使えないことはないんだけど何故か要素じゃなくてキー、つまり0からの添え字が列挙されちゃう……役たたねー。
31 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 11:23:22 ] WSHでもそうなってた
32 名前:デフォルトの名無しさん mailto:sage [2005/08/31(水) 13:29:32 ] >>29 GenerateExecutable = true してませんでした m(_ _)m わぁ出来た。ありがとうございました。
33 名前:デフォルトの名無しさん mailto:sage [2005/09/20(火) 00:29:12 ] var
34 名前:デフォルトの名無しさん mailto:sage [2005/10/03(月) 02:11:08 ] const
35 名前:デフォルトの名無しさん mailto:sage [2005/11/30(水) 22:00:35 ] 保守
36 名前:デフォルトの名無しさん [2005/12/17(土) 01:31:42 ] JScript 8.0は7.0とほとんど変わってないような…
37 名前:デフォルトの名無しさん [2005/12/17(土) 05:47:58 ] WSH の JScript が ECMAScript 4th edition ベースになるのはいつですか?
38 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 20:45:55 ] Windows Vista が出てから?
39 名前:デフォルトの名無しさん [2006/01/18(水) 21:48:01 ] スレ冬眠中... // sleep.js - suspend execution for an interval of time import System; import System.Threading; var args: String[] = Environment.GetCommandLineArgs(); if (args.Length == 2) { try { Thread.Sleep(1000 * Int32.Parse(args[1])); } catch (e: Exception) { Console.Error.WriteLine("{0}: Invalid time interval '{1}'", args[0], args[1]); usage(); } } else usage(); function usage(): void { Console.Error.WriteLine("Usage: {0} <time>", args[0]); Console.Error.WriteLine(" Specify time in seconds"); Environment.Exit(1); }
40 名前:デフォルトの名無しさん [2006/02/03(金) 21:15:14 ] JScript.NET(ASP) + Ajaxなんて面白いかもと考えている漏れ
41 名前:デフォルトの名無しさん [2006/02/12(日) 23:10:30 ] // defragman.js import System; var a = []; var c; while ((c = Console.Read()) >= 0) if (c > 32) a.push(String.fromCharCode(c)); print(" [゚д゚] <デフラグガカンリョウシマシタ"); print(" /[_]ヽ"); print(" | |"); print(a.sort().join(""));
42 名前:まいちゃん ◆sGiKVw3hJo [2006/02/13(月) 03:35:35 ] break;
43 名前:デフォルトの名無しさん [2006/02/14(火) 00:33:04 ] error JS1019: 'break' をループの外に設定できません。
44 名前:ms ◆OOuOpXqoBQ mailto:諸君、私はデフレが大好きだ! [2006/02/20(月) 20:02:12 ] これか? // defragman.js import System; var a = []; var c; print("スタート : "); while ((c = Console.Read()) >= 0 ) { if (c > 32) a.push(String.fromCharCode(c)); else break; } print(" [゚д゚] <デフラグガカンリョウシマシタ"); print(" /[_]ヽ"); print(" | |"); print(a.sort().join(""));
45 名前:デフォルトの名無しさん [2006/02/20(月) 20:35:02 ] >>44 breakしたらだめだと思う
46 名前:繁蔵 [2006/02/20(月) 21:05:20 ] 1
47 名前:デフォルトの名無しさん [2006/02/20(月) 21:05:26 ] .Netっぽくしてみた // defragman.js import System; import System.Collections; var a : ArrayList = new ArrayList(); var c : int; while ((c = Console.Read()) >= 0) if (c > 32) a.Add(c); a.Sort(); Console.WriteLine(" [゚д゚] <デフラグガカンリョウシマシタ"); Console.WriteLine(" /[_]ヽ"); Console.WriteLine(" | |"); for (var i: char in a) Console.Write(Convert.ToChar(i)); Console.WriteLine();
48 名前:繁蔵 [2006/02/20(月) 21:06:36 ] すいません、お邪魔します。初めて2CHやるのですが、いいですか?
49 名前:繁蔵 [2006/02/20(月) 21:08:24 ] C#.NETで自動販売機のプログラミングをやるのですが、文字列がまったく解りません。 誰か、教えて頂けませんか?
50 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 21:09:19 ] いいですけどJScript.netスレッドでも良ければ
51 名前:デフォルトの名無しさん mailto:sage [2006/02/20(月) 21:12:31 ] >>49 C#初心者なら↓がいいですよ。 ふらっとC♯(初心者用) Part6 pc8.2ch.net/test/read.cgi/tech/1122001458/l50
52 名前:デフォルトの名無しさん [2006/02/21(火) 00:55:25 ] IISなしにtest.aspx (ASP.NETファイル)を解釈するテスト // main.js import System; import System.IO; import System.Web; import System.Web.Hosting; import MyAspHost; var mh: MyHost = MyHost(ApplicationHost.CreateApplicationHost( MyHost, "/", Environment.CurrentDirectory)); var page: String = "test.aspx"; var sw: StringWriter = new StringWriter(); mh.WriteHtmlPage(page, String.Empty, TextWriter(sw)); sw.Flush(); Console.Write(sw.GetStringBuilder().ToString()); // myasphost.js - myasphost.dllをbinフォルダに入れておく import System; import System.IO; import System.Web; import System.Web.Hosting; package MyAspHost { class MyHost extends MarshalByRefObject { function WriteHtmlPage(page: String, query: String, output: TextWriter) { var swr: SimpleWorkerRequest = new SimpleWorkerRequest(page, query, output); HttpRuntime.ProcessRequest(swr); } } }
53 名前:デフォルトの名無しさん mailto:sage [2006/03/15(水) 00:21:12 ] // 眠い
54 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 19:49:49 ] あらかじめ言っておくが64bitにネイティブ対応したテキスト置換ソフト はJScript.netで簡単に作れる。
55 名前:デフォルトの名無しさん [2006/03/18(土) 21:02:56 ] コンパイル時間含めても全般的にActivePerlより速かった
56 名前:http://www.vector.co.jp/soft/win95/util/se072729.html mailto:http://msdn2.microsoft.com/ja-jp/library/h2k70f3s.aspx [2006/03/18(土) 21:51:16 ] TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
57 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 22:06:09 ] マルチに見せかけた嵐か
58 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 20:16:32 ] C#でラップしてwin32apiは呼び出せたんだけど、 UNLHA32.dllみたいなのだとラップしてもTypeLoadException で落ちる。 これってアンマネージ側が対応してないと無理ってことっすか?
59 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 21:10:15 ] caldbase.sourceforge.jp/ を見てみては?
60 名前:58 mailto:sage [2006/03/28(火) 17:32:03 ] すまん普通にできた /r:で違うとこ指してただけというオチでした・・・
61 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 15:26:42 ] print("sage");
62 名前: ◆DEATHPgXXc mailto:sage [2006/05/20(土) 02:23:29 ] JScript.NET ではなくて、JScriptについて質問があるんですが(オフトピでスマソ)、 MSIEで外部のウェブサイト閲覧中に HTMLに埋め込まれたJScriptでWMIが操作できるのって普通ですか? とあるアプリにオブジェクトを色々作れる関数が入っているのですが、ユーザーに無表示でサービス止めたり、ファイル埋め込みができるスクリプトが書けたりして困ってます。 開発者曰く、「WebからJScriptでWMIが弄れるのは普通に仕様だからアプリの問題では無い」とか。 でもそうすると悪質なサイトを訪問するだけで一発BOT感染できるのでないかと疑問が。 MSIEでどのようなセキュリティ上の制限が適用されているかの一覧みたいのがあったら助かります。 オフトピですが、宜しくお願いします。
63 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 10:40:47 ] >>62 そういうのってインターネットオプションで信頼済サイトに登録してないと 実行できないようになってなかったっけ。
64 名前: ◆DEATHPgXXc mailto:sage [2006/05/21(日) 23:31:39 ] >>63 矢張りそのような制限が本来はありますか。 するとどこでもWMIはセキュリティホールですね。 どうやって開発者にねじ込むか。
65 名前:デフォルトの名無しさん mailto:sage [2006/05/24(水) 00:29:22 ] poderosaってマクロ機能で、アプリケーションからJScript.NETを動かしてて しかもpoderosa自身のオブジェクトを公開してるけど、どうやってるの? ソース見てもわからんかった。
66 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 11:35:52 ] 人いないお
67 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:36:19 ] ijs.jsを完璧にパクッたというか改良したというかとにかくこういうの作ってみた d.hatena.ne.jp/rahAloe/20060712 パクッタだけなのにそこそこいいできだと思ってはいるんだがisComplete()関数がちょっとイマイチなんだわ。 具体的にいうと単純に2回以上のネストに耐えられない。 正直正規表現とかよくわからなくててきとーなんだ。 だれかisComplete関数よくするアイディアください。
68 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:40:39 ] あと言い忘れたけどisComplete()関数の目的はとりあえずいまのところ引数文字列においてブレースが閉じられているか閉じられていないかどうか判別するというだけ。
69 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 16:16:02 ] >>67-68 それは.NetでなくWSHなので↓のいずれかのほうが適当でしょう。 WSH(・∀・)スレッド! pc8.2ch.net/test/read.cgi/tech/1055075469/l50 お前ら、wsh使ってますか? part5 pc8.2ch.net/test/read.cgi/win/1126543183/l50 ECMAScript デス 2 pc8.2ch.net/test/read.cgi/tech/1088298991/l50
70 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 22:49:45 ] >>69 そうかすまん。ここ.NETスレか。 OKありがとう。
71 名前:67=68=70 mailto:sage [2006/07/17(月) 17:49:54 ] d.hatena.ne.jp/rahAloe/20060716/p2#c なんとかこのようなJScript shellができますた。 できたはいいのだが、いちいち コマンドプロンプトで > cscript.exe imjs.js とする。 とやらないといけないのが面倒くさい。 そこで簡単に実行できるようにJScript.NETのほうからこのスクリプト呼び出すようにしようと 『JScriptハンドブック』という本の最後のページにあるように import System; System.Diagnostics.Process.Start("./imjs.js"); でjsc.exeでコンパイルして実行させてみたんだけれど imjs.jsの中にあるWScript.StdOut.Writeという部分でエラー起こすんだわ。 どうすれば.NETから実行できる?
72 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 17:52:37 ] d.hatena.ne.jp/rahAloe/20060716/p2 微妙にリンク間違えた。
73 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 20:17:02 ] 解決しますた。 import System; System.Diagnostics.Process.Start("cscript.exe", "./imjs.js"); とすればよかった。
74 名前:デフォルトの名無しさん mailto:sage [2006/08/01(火) 16:12:42 ] >>73 一々別窓を開かないバージョンを作ってみた。 import System; import System.Diagnostics; var imjs : Process = new Process(); imjs.StartInfo.FileName = "cscript.exe"; imjs.StartInfo.Arguments = "//nologo ./imjs.js"; imjs.StartInfo.UseShellExecute = false; imjs.Start(); imjs.WaitForExit();
75 名前:73 mailto:sage [2006/08/04(金) 18:22:27 ] >>74 ありがとう! 早速反映させました。
76 名前:デフォルトの名無しさん [2006/08/23(水) 16:37:17 ] JScriptで普通に a / b のように割り算をやるとaもbもdoubleに変換して 計算してしまうので、そうならないようにするには、下のように するしかないのかな。 「独自に作成したコードから直接使用するためのものではありません」な メソッド使ってるけど。 import Microsoft.VisualBasic.CompilerServices; import System; var a : int = 123; var b : int = 45; var x : int; x = Operators.IntDivideObject(a, b); Console.WriteLine(x); と思ったけどOperators.IntDivideObjectを一々呼ぶよりは単純に x = int(a / b); としたほうがはるかに速かった。
77 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 15:25:09 ] IEの背景の色とイメージの印刷をon/offする // SetIEPrintBackground.js // コンパイル方法: jsc /t:winexe SetIEPrintBackground.js import Microsoft.Win32; import System; import System.Windows.Forms; var result: DialogResult = MessageBox.Show("印刷時、背景の色とイメージを印刷しますか?", "Internet Explorer 設定", MessageBoxButtons.YesNoCancel); const keyName: String = "Software\\Microsoft\\Internet Explorer\\Main"; const name: String = "Print_Background"; var regKey: RegistryKey = Registry.CurrentUser.OpenSubKey(keyName, true); if (result == DialogResult.Yes) regKey.SetValue(name, "yes"); else if (result == DialogResult.No) regKey.SetValue(name, "no");
78 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 19:04:54 ] 改行付き文字列を見た目にもキレイに簡単出力 var name = [ "line1", "line2", "line3", ].join("\n"); + で連結するより高速です。
79 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 19:17:39 ] >>78 var name = "\ line1\ line2\ line3\ "; なんて書き方をよく使ってます。 ※行末の「\」の直後で改行するように
80 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 21:53:33 ] 改行付きなら var name = "\ line1\n\ line2\n\ line3\n\ "; だった
81 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 22:09:47 ] JScript.NETで var name = ["line1", "line2", "line3"].join("\n"); と var name = "line1\n" + "line2\n" + "line3\n"; の処理速度を比べてみたら後者の方がはるかに速かった。 後者はコンパイル時に var name = "line1\nline2\nline3\n"; とみなしているようです。
82 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 00:10:05 ] var name = ["line1", "line2", "line3"].join("\n"); と var name = "line1\n" + "line2\n" + "line3\n"; は,等価じゃないな
83 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 00:16:54 ] line3の\nを取ればいいさ
84 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 15:46:24 ] VBScriptとJScriptのどっちをよく使いますか?
85 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 16:00:02 ] 断然JScript。 C#,J#,Java等への移行も楽だし。
86 名前:デフォルトの名無しさん mailto:sage [2006/09/24(日) 05:22:02 ] JScript.NETってフォーム使ったアプリケーション作れますか? あと統合環境ってない?
87 名前:デフォルトの名無しさん mailto:sage [2006/09/24(日) 11:11:58 ] >>86 作れるんじゃね? VC2005あるんじゃね?
88 名前:デフォルトの名無しさん mailto:sage [2006/09/25(月) 00:56:27 ] >>86 作れますよ。統合環境で作ったことは無いけれど。
89 名前:デフォルトの名無しさん mailto:sage [2006/09/25(月) 00:58:54 ] BASICのgotoのようなものを実現するテスト。 // gototest.js import System; var $goto : int = 0; do switch ($goto) { case 0: Console.Write("文字列を入力: "); var s : String = Console.ReadLine(); case 20: $goto = 40; break; case 30: Console.WriteLine(s); $goto = 20; break; case 40: Console.Write("hello, "); $goto = 30; break; default: $goto = 0; } while ($goto);
90 名前:デフォルトの名無しさん mailto:sage [2006/09/25(月) 01:22:02 ] ダイアログの表示だけなら // monadialog.js import Accessibility; import System.Drawing; import System.Windows.Forms; var f: Form = new Form(); f.Size = new System.Drawing.Size(300, 125); f.Text = "確認"; var mona : Label = new Label(); mona.AutoSize = true; mona.BackColor = Color.White; mona.BorderStyle = BorderStyle.FixedSingle; mona.Font = new Font("MS PGothic", 12); mona.Location = new Point(10, 10); mona.Text = "\n ∧_∧ \n( ´∀`) \n( )"; f.Controls.Add(mona); var message : Label = new Label(); message.Text = "ダイアログを表示してみますた。"; message.AutoSize = true; message.Location = new Point(100, 20); f.Controls.Add(message); var yes: Button = new Button(); yes.DialogResult = DialogResult.Yes; yes.Location = new Point(110, 60); yes.NotifyDefault(true); yes.Text = "はい"; f.Controls.Add(yes); var no : Button = new Button(); no.DialogResult = DialogResult.No; no.Location = new Point(190, 60); no.Text = "いいえ"; f.Controls.Add(no); f.ShowDialog();
91 名前:デフォルトの名無しさん [2006/09/30(土) 21:53:54 ] WSH(JScript)からJScript.NETで作ったコンポーネントを利用するテスト D:\>type MyServer.js import System; import System.Runtime.InteropServices; public Guid("E65CFE0B-2F1E-45A4-9FBE-4CC1D2B20AE8") ProgId("MyServer.Sample") class MyServerSample { private var _property : int = 0; public function Method(s: String): int { Console.WriteLine(s); return s.Length; } public function get Property() : int { return _property; } public function set Property(n : int) { _property = n; } }
92 名前:デフォルトの名無しさん mailto:sage [2006/09/30(土) 21:55:00 ] D:\>jsc /nologo /t:library MyServer.js D:\>regasm MyServer.dll /tlb:MyServer.tlb /silent D:\>copy MyServer.dll %SystemRoot%\System32 1 個のファイルをコピーしました。 D:\>type test.js var Sample = new ActiveXObject("MyServer.Sample"); Sample.Property = 123; Sample.Method(Sample.Property); D:\>cscript //nologo test.js 123 D:\>
93 名前:デフォルトの名無しさん [2006/10/06(金) 16:48:28 ] msdn2.microsoft.com/ja-jp/library/system.timers.timer.aspx の使用例を JScriptにしてみたけど、とりあえず動作するからこんなんでいいのかな。 import System; import System.Timers; public class Timer1 { public static function Main(): void { var aTimer : Timer = new Timer(); aTimer.add_Elapsed(OnTimedEvent); aTimer.Interval = 2000; aTimer.Enabled = true; Console.WriteLine("Press the Enter key to exit the program."); Console.ReadLine(); GC.KeepAlive(aTimer); } private static function OnTimedEvent(source : Object, e : ElapsedEventArgs): void { Console.WriteLine("Hello World!"); } } Timer1.Main();
94 名前:デフォルトの名無しさん [2006/10/25(水) 00:59:39 ] JScriptって便利だね。 仕事のツールが簡単に出来ちゃうよ。
95 名前:デフォルトの名無しさん [2006/10/26(木) 10:46:02 ] しかしあまり人気ないような。 JScriptで書かれたWSHのスクリプトや、Perlのスクリプトを移植するのに 重宝してるけど。
96 名前:デフォルトの名無しさん [2006/10/29(日) 02:57:21 ] 会社でWSHを広めています。 大変便利でかなりいいですね。
97 名前:デフォルトの名無しさん [2006/10/29(日) 03:03:24 ] >>96 WSH(・∀・)スレッド! pc8.2ch.net/test/read.cgi/tech/1055075469/l50 というのもありますよ。 JScript.NETもなかなか使えるので使ってやってください。
98 名前:デフォルトの名無しさん [2006/10/29(日) 14:55:46 ] JScript.NETでActiveXコントロールを作ってHTMLに埋め込むテスト J:\>type SampleControl.js import Accessibility; import System; import System.ComponentModel; import System.Drawing; import System.Runtime.InteropServices; import System.Windows.Forms; public Guid("5C466CE7-5C06-49FA-869D-E0BBE71F833B") ProgId("Sample.Control") class SampleControl extends UserControl { private var textName: TextBox; private var labelName: Label; private var components: IContainer; public function SampleControl() { InitializeComponent(); } public function InitializeComponent(): void { components = new System.ComponentModel.Container(); textName = new TextBox(); labelName = new Label(); textName.Location = new Point(64, 8); textName.Size = new System.Drawing.Size(240, 23); textName.TabIndex = 0; labelName.Location = new Point(8, 8); labelName.Size = new System.Drawing.Size(56, 23); labelName.Text = "Name:"; labelName.TextAlign = ContentAlignment.MiddleRight; Controls.AddRange(Control[]([labelName, textName])); Size = new System.Drawing.Size(300, 80); } public function get Value(): String { return textName.Text; } public function set Value(val: String) { textName.Text = val; } }
99 名前:デフォルトの名無しさん mailto:sage [2006/10/29(日) 14:57:19 ] (続き) J:\>jsc /nologo /t:library SampleControl.js J:\>regasm /nologo /tlb:SampleControl.tlb SampleControl.dll 型は正常に登録されました。 アセンブリは 'J:\SampleControl.tlb' にエクスポートされ、タイプ ライブラリは正常 に登録されました。 J:\>copy /y SampleControl.dll %windir%\system32 1 個のファイルをコピーしました。 J:\>type Sample.hta <html> <head><title>Test</title></head> <body> <object id="Control1" classid="clsid:5C466CE7-5C06-49FA-869D-E0BBE71F833B" width="300" height="80" ></object><br /> <input type="button" value="Click me" onclick="alert(Control1.Value)" /> </body> </html> J:\>Sample.hta (以下後始末) J:\>regasm /nologo /unregister SampleControl.dll 型は正常に登録が解除されました。 J:\>del %windir%\system32\SampleControl.dll J:\>
100 名前:デフォルトの名無しさん [2006/11/01(水) 14:06:23 ] バッチファイルにJScript.NETスクリプトを埋め込むテスト ※ pc8.2ch.net/test/read.cgi/tech/1148485555/65 を参照 /rスイッチは.exeが存在しても強制的にコンパイル [hello.cmd] @if (0==1) rem [hello.cmd] @echo off if exist "%0.cmd" "%0.cmd" %1 setlocal path %SystemRoot%\Microsoft.NET\Framework\v2.0.50727 set source=%0 set target=%source:.cmd=.exe% if /i "%1"=="/r" goto build if exist "%target%" goto run :build jsc /nologo /out:"%target%" "%source%" :run "%target%" goto :eof @end // ここからJScript print("hello, world!");
101 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 21:59:16 ] ものすごい初歩的な質問だと思うのですが、1つの変数に改行コードを 入れる場合はどうすればよいのでしょうか? var a = "A"; var b = "B"; var c = a + (ここに改行コードを入れたい) + b; document.writeln (c); 出力結果 A B \nとか%0Dとか試したのですが、エラーになってしまってよくわかりません。 よろしくお願いします。
102 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 22:21:04 ] var c = a + "\n" + b;
103 名前:101 mailto:sage [2006/11/27(月) 22:33:42 ] >>102 ありがとうございます。 しかし、IEで実行すると、改行表示されずに、 A B と、出てしまいました。
104 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 23:34:48 ] >>103 そういうことなら var c = a + "<BR>" + b;
105 名前:101 mailto:sage [2006/11/27(月) 23:50:59 ] >>104 結果、 A B になりました。 VBのように、 c = a & chr(13) & chr(10) & b みたいなものを想像してたので、タグを直接入れるとは驚きです。 ありがとうございました。
106 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 00:09:43 ] >>105 ここは JScript「.NET」 のスレ何だけど(w VBだってIE上で改行かけるんなら<BR>なんですが。 根本的に分かってない。 document.writeln はHTMLソースを書き出すものだぞ。 ソース自体を改行したいならJSだろうとVBSだろうと文字列に改行を入れるんだし、 レンダリング結果を改行するならHTMLにしたがって<BR>
107 名前:デフォルトの名無しさん mailto:sage [2007/01/07(日) 12:09:40 ] あけおぬ
108 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 21:47:05 ] Win32API呼び出せますか? ほかのサンプルはあるのにJScript.NETだけないような。
109 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 21:55:07 ] >>100 jsc.exeのフルパスをレジストリかどっかから取り出せませんか?
110 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 10:42:14 ] >>108 直接は呼び出せないから、C#等ででラッパーを作ってやるしかなかったような。 >>109 直接取り出す方法はないような。 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\InstallRoot から C:\WINDOWS\Microsoft.NET\Framework\ は取り出せるけれど。 この中の v2.0.50727、v1.1.4322、v1.0.3705 というフォルダに jsc.exeがある。
111 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 16:47:55 ] >>110 ラッパーというと、DLL作って呼び出すということでしょうか? JScriptソースにC#ソースを埋め込んで、とか出来ます? 或いは、C#で>>100 みたいなCMD埋め込み
112 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 20:56:08 ] >>110 Set WindowsInstaller=CreateObject("WindowsInstaller.Installer") WScript.Echo WindowsInstaller.ComponentPath("{7131646D-CD3C-40F4-97B9-CD9E4E6262EF}","{0BC7A7D7-183A-472C-BE1F-A40A0E626C74}") で取り出せました。ありがと
113 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 21:06:41 ] >>111 C#でdll作るのが楽だけど、埋め込むというならCodeDomが使えるような気がする。 >>112 バージョン決め撃ちならそれでもいいな。
114 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 15:31:38 ] バッチではこんなの FOR /F "delims=" %%1 IN ('DIR /AD /B /ON "%SystemRoot%\Microsoft.NET\Framework\v*"') DO SET DOTNET=%%~1 ECHO "%SystemRoot%\Microsoft.NET\Framework\%DOTNET%\jsc.exe"
115 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 18:34:48 ] >>114 しかし、v3.0というフォルダ内には jsc.exe はないのだった。
116 名前:115 mailto:sage [2007/02/05(月) 18:49:53 ] これでどうでしょう @ECHO OFF SETLOCAL SET Framework=%SystemRoot%\Microsoft.NET\Framework FOR /F "delims=" %%1 IN ('DIR /AD /B /ON "%SystemRoot%\Microsoft.NET\Framework\v*"') DO IF EXIST "%Framework%\%%~1\jsc.exe" set DOTNET=%%~1 SET JSC="%Framework%\%DOTNET%\jsc.exe" ECHO %JSC%
117 名前:115 mailto:sage [2007/02/05(月) 18:51:59 ] >>116 の4行目は↓でok FOR /F "delims=" %%1 IN ('DIR /AD /B /ON "%Framework%\v*"') DO IF EXIST "%Framework%\%%~1\jsc.exe" set DOTNET=%%~1
118 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 18:53:47 ] コンソールのタイトルを表示するバッチファイル+JScript.NET @if(0)==(0) ECHO OFF SETLOCAL SET DOTNET=%SystemRoot%\Microsoft.NET\Framework FOR /F "delims=" %%1 IN ('DIR /AD /B /ON "%DOTNET%\v*"') DO IF EXIST "%DOTNET%\%%~1\jsc.exe" SET DOTNET=%DOTNET%\%%~1\jsc.exe "%DOTNET%" /nologo /d:_ /out:"%~f0.exe" "%~f0" "%~f0.exe" DEL "%~f0.exe" GOTO :EOF @end import System; import System.Diagnostics; var PC : PerformanceCounter=new PerformanceCounter('Process','Creating Process Id',Process.GetCurrentProcess().ProcessName); var PID : int = PC.RawValue; Console.WriteLine(Process.GetProcessById(PID).MainWindowTitle) ワーンングが出ますが、コードのほうで直せませんか?
119 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 22:05:05 ] >>118 RawValueはlongですよ。なので var PID : int = int(PC.RawValue); とすればよいでしょう。
120 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 22:39:48 ] >>119 サンクス。直りました。今度は最小化ですが、 import System; import System.Diagnostics; import System.Windows.Forms; const WM_SYSCOMMAND : int = 0x0112; const SC_MINIMIZE : int = 0xF020; var nCmdShow : int =SC_MINIMIZE; var PC : PerformanceCounter=new PerformanceCounter('Process','Creating Process Id',Process.GetCurrentProcess().ProcessName); var PID : int=int(PC.RawValue); var oProcess : System.Diagnostics.Process=System.Diagnostics.Process.GetProcessById(PID); var hwnd : IntPtr=oProcess.MainWindowHandle; var m : Message = Message.Create(hwnd,WM_SYSCOMMAND,IntPtr.op_Explicit(nCmdShow),IntPtr.op_Explicit(0)); var nw : NativeWindow = new NativeWindow(); nw.AssignHandle(hwnd); print(m.ToString()); nw.DefWndProc(m); // 型が一致しません。のエラーになります。なぜでしょう? nw.ReleaseHandle(); nw = null;
121 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 22:59:04 ] Microsoft .NET Framework SDK v2.0のドキュメントによると NativeWindow.DefWndProc()のC#の構文は, public void DefWndProc ( ref Message m ) refとは参照渡しなので,引数にmではなくてmの参照を渡す必要があります。 (mという名前の箱の中に入っている値を渡すのではなくて, mという名前の箱がある場所を渡すというイメージ。) JScriptでは, &m と書けばmの参照を表します。 すなわち, nw.DefWndProc(&m); と書けばいいわけです。
122 名前:120 mailto:sage [2007/02/09(金) 01:00:05 ] >>121 感謝。最小化されました。
123 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 16:21:10 ] >>29 を以下に変えて、codedom.exeを作ります。 import System; import System.IO; import System.CodeDom.Compiler; import System.Reflection; import Microsoft.JScript; var source : String = new StreamReader(Environment.GetCommandLineArgs()(1)).ReadToEnd(); var provider : JScriptCodeProvider = new JScriptCodeProvider(); var jsc : ICodeCompiler = provider.CreateCompiler(); var param : CompilerParameters = new CompilerParameters(); param.GenerateInMemory = true; param.GenerateExecutable = true; var result : CompilerResults = jsc.CompileAssemblyFromSource(param, source); var assembly : Assembly = result.CompiledAssembly; var entry : MethodInfo = assembly.EntryPoint; var args : Object[] = new Object[1]; entry.Invoke(null, new Object[1]);
124 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 16:22:59 ] これを使うと、見た目、テンポラリファイルを作ることなく、できます。 @if(0)==(0) ECHO OFF codedom.exe "%~f0" GOTO :EOF @end var ie = new ActiveXObject("InternetExplorer.Application"); ie.Navigate("ttp://www.yahoo.com/"); ie.Visible = true;
125 名前:デフォルトの名無しさん [2007/03/16(金) 23:24:23 ] 教えてください! 現在.NET C#で開発しています。 cs側からRegisterStartupScriptを使って aspx側にjavascriptを埋め込んでいるのですが、 onload時に処理を走らせようとしても、通ってくれません。 onloadが実行される前にcs側のjavascriptがaspxに埋め込まれる方法はありませんか? [.aspx] 〜 <body onload="initList()"> 〜 </body> </html> <.cs> RegisterStartupScriptを使って以下をaspx側に埋め込む function initList() { 〜 }
126 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 00:07:48 ] >>125 JScript.NETとは関係ない内容なので↓あたりで 改めて質問されたほうがいいですよ。 【質問】ASP.NETスレ Part3【議論】 pc11.2ch.net/test/read.cgi/php/1160355849/l50
127 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 01:35:04 ] JScript.NETじゃないやん マルチやめれ
128 名前:デフォルトの名無しさん [2007/03/20(火) 16:00:16 ] C# 3.0で T a = new T(); を var a = new T(); と書けるように,JScriptで var a := new T(); のように書ければいいのにと思った。
129 名前:デフォルトの名無しさん [2007/03/28(水) 16:15:35 ] ブラウザの閉じるボタンのイベントってどう拾うんだ?
130 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 17:31:49 ] NativeWindowつかってサブクラス化してメッセージ盗めばいいんじゃない?