高瀬重人 さん (takase@ewb.dec.com) 2000年 02月 28日 10時 38分 14秒

むたぐちさん、お世話になっております。

>これでもやりたいことは実現できそうですが、
>visual basic では sendkeys "{TAB}" などとできるようなので(実は小生はVB
>はまるで使用したことがないのですが)同じようなことをWSH-VBSで行いたいのです。

試行錯誤しているうち、以下のようにやればよいとわかりました。

set WshShell=WScript.CreateObject("wscript.shell")
WshShell.SendKeys "{TAB}"

高瀬

高瀬重人 さん (takase@ewb.dec.coom) 2000年 02月 28日 10時 24分 30秒

むたぐちさん、お世話になっております。

> ないと思います。かなりマニアックな手法だと思います。
> まあ普通は、せいぜいIEを立ち上げて、navigateするくらいでしょうね。
> 私も自分でいろいろ試行錯誤して、ここまできました。
> この掲示板でも、いろいろ情報をいただきました。
> (思えば1年前は、WSH初心者だったのだなあ…)
>
> 「オブジェクトの解説」で、そろそろIE関係の研究成果をまとめておきましょうかね。
> 下の方にも書いたように、まだ未解明な部分もあるのですが。
> #その前にLessonを再開しろ?

ぜひともお願いします。

>> web page 内の複数のテキストボックスをタブキー
>> を使ってカーソルを移動したいのですが
>
> これ、ちょっと意味がわからないんですが…。
>
> For Each form In document.forms
> For Each tag In form.all
> If tag.tagname="INPUT" Then
> If tag.type="text" Then
> Select Case tag.Name
> Case "url" tag.Value="http://"
> Case "email" tag.Value="abc@hoge.com"
> Case "name" tag.Value="名前"
> End Select
> End If
> End If
> Next
> Next
>
> のように、各テキストボックスに文字列を入れていくということですか?

これでもやりたいことは実現できそうですが、
visual basic では sendkeys "{TAB}" などとできるようなので(実は小生はVB
はまるで使用したことがないのですが)同じようなことをWSH-VBSで行いたいのです。

お手数ですがよろしくお願いします。

高瀬

うしさん さん 2000年 02月 28日 09時 03分 04秒

管理人むたぐち さん こんにちは
すごい! 本当にありごとうございます。
Win98SEですので、Win2000のものは確認できませんでした。
また、よろしくお願いします。
まずは御礼まで

Decorative さん 2000年 02月 28日 03時 09分 20秒

管理人むたぐち さん こんにちは。

> <object> 要素のeventsパラメータが使えます。

すごい! 本当にありごとうございます。
これで WSH をもっと楽しめまス。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 27日 18時 54分 46秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

しかし、Win9xの「conconバグ」はやばいですよ。
http://www.wakaba.toyonaka.osaka.jp/%7Eikemo/concon.html

To: うしさん さん

> 作業フォルダの指定の方法(ショートカットではなく、実行ファイル実行して、その中でファイル選択にするとデスクトップのフォルダーを開いてしまいます。これを指定したいのですが)お願いします。

スクリプト中でショートカットを作成して、そのショートカットをRunするしか
ないと思います。

こんなかんじでしょうか。(デバッグしてません)
Set WshShell=WScript.CreateObject("WScript.Shell")
Set objShortCut=WshShell.CreateShortcut("C:\Windows\Temp\temp.lnk")
objShortCut.TargetPath="C:\windows\nantoka.exe"
objShortCut.WorkingDirectory="C:\"
objShortCut.Save
WshShell.Run "C:\Windows\Temp\temp.lnk"
一時フォルダの取得や、一時ファイル名の生成、一時ファイルの削除などの
ルーチンを適宜加えてください。

Win2000でのShell.Applicationオブジェクトには
ShellExecute(File As String, [vArgs], [vDir], [vOperation], [vShow])
というアプリケーションを実行するメソッドがありますが、
このvDirオプションは作業フォルダ指定かもしれません。
今Win2000環境がないので確認できませんが。
(ShellExecuteは非表示のメンバです)

Win2000をお持ちの方は、作業フォルダ指定に意味があるアプリを指定して、
以下のコードを試してみてください。報告、お待ちしてます。

Set Shell=WScript.CreateObject("Shell.Application")
Shell.ShellExecute "EXEのパス",, "C:\"

うしさん さん 2000年 02月 27日 12時 07分 28秒

作業フォルダの指定の方法(ショートカットではなく、実行ファイル実行して、その中でファイル選択にするとデスクトップのフォルダーを開いてしまいます。これを指定したいのですが)お願いします。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 27日 03時 56分 43秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: Decorative さん

例のスクリプトですが、RequestTimeOutを設定することで、ドキュメントを
取得することができました! (情報提供、感謝です)
みなさんも使ってみてください。

> <object> 要素が CreateObject メソッドなどの代替となれますように!

<object> 要素のeventsパラメータが使えます。

<object id="oInet" progid="InetCtls.Inet" reference="yes" events="true" />

のように記述しておくと、

Sub oInet_StateChanged(ByVal iState)

のイベントが実行されます。IDとイベントのプレフィックスを一致させる必要があります。
(この場合はoInet)

これで、ConnectObjectもCreateObjectもConstも要りません。
実にエレガントです。あまり意識してなかったですけど、WSFって結構偉大ですね。
#これでIEでもeventsで正しくイベントが実行されればいうことなしですけど。

ちなみにeventsパラメータは、何故かundocumentedです。
こんなに重要な機能をなぜちゃんと書かないのでしょう?

Decorative さん 2000年 02月 27日 01時 53分 12秒

管理人むたぐち さん こんにちは。

> wsfって、VBSだけ使う私にとってあまり使い道がないですが、
> referenceで定数が参照できるのがいいですね。

そうですよねぇ。WSH 1.0 のときは "参照" が使えず、WSH 投げ捨てちゃいました。
WSH 2.0 ナイス!


> ConnectObjectはIE関係では全然使えません(バグがあるらしい)が、Inetコントロール
> では使えるんですね。

<object> 要素でオブジェクトを作成したとき、 イベントソースへの接続方法が
分からなかったので、止むを得ずって感じで使ったのですが・・・
使い慣れてないせいか、DisconnectObject メソッドが抜けてしまった。ふぅ。

<object> 要素が CreateObject メソッドなどの代替となれますように!

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 26日 02時 58分 36秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: かのん さん

>”投稿王は誰だ?!”を使用させていただきました。

楽しんでいただけたようで、よかったです。

>ちょっと減らそうかな・・・。

なんでですか?(^^;
1位を目指しましょう。

To: 秦野の大島 さん

> OLECMDID_SAVEAS等の定数宣言は盲点でした。
↓のDecorativeさんが書かれているように、WSFファイルを使えば、定数宣言は
不要だったりします。
私のページでいうと、「WSH2.0の新機能」というところで解説しています。

To: 三浦 さん

> WSHをHTMLに入れ実行するとセキュリティ警告がでます。この警告が出ないようにする方法はありませんか?

拡張子を.htmから.htaにしましょう。
ただし、IE5以上が必要です。
HTAに関しては、「WSH技術情報」で紹介しています。

三浦 さん (miura@system-in.co.jp) 2000年 02月 26日 01時 04分 09秒

--先ほどの記事の追加--
セキュリティ警告が出ない方法をWSH-VBScriptで解決できませんか。
もしあれば、その記述方法を教えてください。

三浦 さん (miura@system-in.co.jp) 2000年 02月 26日 00時 30分 59秒

WSHをHTMLに入れ実行するとセキュリティ警告がでます。この警告が出ないようにする方法はありませんか?

秦野の大島 さん (tohshima@woodstream.gr.jp) 2000年 02月 26日 00時 22分 30秒

To : 管理人むたぐち さん

ばっちり、うまくいきました。\(^_^)\
OLECMDID_SAVEAS等の定数宣言は盲点でした。
ご回答、ありがとうございました。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 25日 20時 30分 04秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: Decorative さん

> Inet コントロールは、RequestTimeout プロパティを設定して OpenURL メソッドを実行すればデータを受信できると思います。
> 私なりの考えですが、結果が思わしくないときは、StateChanged イベント内にエラー処理を追加すると良いと思います。

どうもご指摘ありがとうございます。
私も実験してみようと思います。
これはwsfですね。wsfって、VBSだけ使う私にとってあまり使い道がないですが、
referenceで定数が参照できるのがいいですね。
ConnectObjectはIE関係では全然使えません(バグがあるらしい)が、Inetコントロール
では使えるんですね。

> 差し支えなければ、MyObj について、より詳しく教えていただけませんか。

というわけで、NashiWaterさんよろしくお願いします。

> おっと! Inet_StateChanged は、Sub プロシージャーだったなぁ。

ですね。というか、イベントはみんなSubプロシージャかとおもってました(^^;

To: 高瀬 さん

> 一連のFor...Next 文を実行するたびに
>
> set document=IE.Document
>
> を直前に実行しないといけないのでしょうか?

そうです。document変数は、代入したときのドキュメントを格納した
documentオブジェクトですので。

> また、IEをWSHで制御する方法を初心者が学習するためにはどんな書籍、
> Web等があるのでしょうか?

ないと思います。かなりマニアックな手法だと思います。
まあ普通は、せいぜいIEを立ち上げて、navigateするくらいでしょうね。
私も自分でいろいろ試行錯誤して、ここまできました。
この掲示板でも、いろいろ情報をいただきました。
(思えば1年前は、WSH初心者だったのだなあ…)

「オブジェクトの解説」で、そろそろIE関係の研究成果をまとめておきましょうかね。
下の方にも書いたように、まだ未解明な部分もあるのですが。
#その前にLessonを再開しろ?

そういえば、AYAさんの「趣味のJavaScriptなページ」に、JSでの例があったような…。

> マイクロソフト社のWebをアクセスしてみましたが
> 初心者には荷が重かったです。

私の場合、英語を読むのがつらいです。IEをWSHで制御するのに必要な資料は、
全部英語だったです。

> 書籍としては技術評論社の”はじめてのWSH"(株)アンク著を買ってみました
> が私のやりたいことはあまり載っていませんでした。

まあ、入門書ですから仕方ないでしょう。

> web page 内の複数のテキストボックスをタブキー
> を使ってカーソルを移動したいのですが

これ、ちょっと意味がわからないんですが…。

For Each form In document.forms
For Each tag In form.all
If tag.tagname="INPUT" Then
If tag.type="text" Then
Select Case tag.Name
Case "url" tag.Value="http://"
Case "email" tag.Value="abc@hoge.com"
Case "name" tag.Value="名前"
End Select
End If
End If
Next
Next

のように、各テキストボックスに文字列を入れていくということですか?

かのん さん (kanon@po.interweb.ne.jp) 2000年 02月 25日 18時 46分 29秒

やふやふ〜、むたぐちさん。
”投稿王は誰だ?!”を使用させていただきました。
とても面白いスクリプトですね。(^_^)

で。結果は・・・。
10位以内に入るカテゴリが一個二個くらいあるかなとは思ってましたが、
ちょっと多すぎる・・・。
私ってあんなに投稿してたの?!
ちょっと減らそうかな・・・。
とまあ、こんな感想を持ったのでした。^^;

ではでは〜。

高瀬重人 さん (takase@ewb.dec.com) 2000年 02月 25日 12時 47分 01秒

お世話になります。

一連の質問の続きなのですが、
web page 内の複数のテキストボックスをタブキー
を使ってカーソルを移動したいのですが
VBSではどのように記述すればよいのでしょうか?

お手数ですがよろしくお願いします。

高瀬

高瀬 さん (shigeto.takase@jp.compaq.com) 2000年 02月 25日 12時 03分 42秒

むたぐちさん、ありがとうございました。 うまくいきそうです。

ただ

For Each tag In document.forms(0).all '最初のフォーム内のタグについて実行
If tag.tagname="INPUT" Then 'INPUTタグなら
If tag.type="text" Then 'テキストボックスなら
tag.Value=data 'テキストボックスに書き込む
tag.focus 'カーソルをテキストボックスに
End If
End If
Next

の直前に

set document=IE.Document

を記述しておかないと、現在表示しているページではなく、ひとつ前の
表示される(’戻る’で表示されるページ)のなかを探してしまうようなのです
が、そういう仕様なのでしょうか?  一連のFor...Next 文を実行するたびに

set document=IE.Document

を直前に実行しないといけないのでしょうか?

また、IEをWSHで制御する方法を初心者が学習するためにはどんな書籍、
Web等があるのでしょうか? マイクロソフト社のWebをアクセスしてみましたが
初心者には荷が重かったです。

書籍としては技術評論社の”はじめてのWSH"(株)アンク著を買ってみました
が私のやりたいことはあまり載っていませんでした。

高瀬

高瀬重人 さん (shigeto.takase@jp.compaq.com) 2000年 02月 25日 12時 01分 10秒

むたぐちさん、 お世話になります。

幾つかweb page 内にテキストボックスが並んでいる場合、 矢印薫や
タブキーをつかってカーソルを移動するにはどのようにすればよいのでしょうか?

お手数でがよろしくお願いします。

高瀬

高瀬 さん (shigeto.takase@jp.compaq.com) 2000年 02月 25日 10時 48分 46秒

むたぐちさん、ありがとうございました。 うまくいきそうです。

ただ

For Each tag In document.forms(0).all '最初のフォーム内のタグについて実行
If tag.tagname="INPUT" Then 'INPUTタグなら
If tag.type="text" Then 'テキストボックスなら
tag.Value=data 'テキストボックスに書き込む
tag.focus 'カーソルをテキストボックスに
End If
End If
Next

の直前に

set document=IE.Document

を記述しておかないと、現在表示しているページではなく、ひとつ前の
表示される(’戻る’で表示されるページ)のなかを探してしまうようなのです
が、そういう仕様なのでしょうか?  一連のFor...Next 文を実行するたびに

set document=IE.Document

を直前に実行しないといけないのでしょうか?

また、IEをWSHで制御する方法を初心者が学習するためにはどんな書籍、
Web等があるのでしょうか? マイクロソフト社のWebをアクセスしてみましたが
初心者には荷が重かったです。

書籍としては技術評論社の”はじめてのWSH"(株)アンク著を買ってみました
が私のやりたいことはあまり載っていませんでした。

高瀬

Decorative さん 2000年 02月 25日 09時 00分 00秒

おっと! Inet_StateChanged は、Sub プロシージャーだったなぁ。

Decorative さん 2000年 02月 25日 08時 06分 14秒

管理人むたぐち さん、岡田 さん こんにちは。
Inet コントロールは、RequestTimeout プロパティを設定して OpenURL メソッドを実行すればデータを受信できると思います。
私なりの考えですが、結果が思わしくないときは、StateChanged イベント内にエラー処理を追加すると良いと思います。
<?xml version="1.0"?>
<job>
<object id="oInet" progid="InetCtls.Inet" reference="yes" />
<script language="VBScript">
<![CDATA[
WScript.ConnectObject oInet, "Inet_"
'''oInet.RequestTimeOut=20 'You must set!
oInet.URL="http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/index.html"
WScript.Echo oInet.OpenURL(oInet.URL)

Function Inet_StateChanged(ByVal iState)
Select Case iState
Case icError
MsgBox "ErrorCode: " & oInet.ResponseCode & " : " & oInet.ResponseInfo
Case icResponseCompleted
Case Else
Exit Function
End Select
End Function
]]>
</script>
</job>

NashiWater さん こんにちは。
念のため確認させて頂きますが、MyObj.Add("Yahoo","www.yahoo.co.jp").ShowBrowser と記述されたとき、
"Sub プロシージャを呼び出すときに、かっこを使うことはできません。"
という構文エラーとなるのですね。
《 この記述で正しいと思うんだけどなぁ 》
差し支えなければ、MyObj について、より詳しく教えていただけませんか。
開発言語や (できれば Interface Description Language(IDL) からの)Add メソッドの引数定義が特に知りたいです。
でも、教えて頂いても恐らくどうもできないと思いますが・・・・ただ、どういう場合に起こるのかを知っておきたいのです。

2つの String 型の引数をもち、オブジェクトを戻値とするメソッドを探して試してみました。
Dim oComputer ' An ADSI object represents a computer on the network
Set oComputer = GetObject("WinNT://WORKGROUP/MYPC")
oComputer.GetObject("User", "Administrator").GetInfo
まあ、これは正常に動作しますが、NashiWater さんの問題解決と関係ないかも・・・うーん。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 25日 02時 38分 30秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: 高瀬 さん

補足です。
もし、<Input type="text" id="hoge">のようにidパラメータが指定されていれば、
document.all.hoge.Value=data
document.all.hoge.focus
だけでアクセスできます。

また、

For Each form In document.forms
For Each tag In form.all
If tag.tagname="INPUT" Then
If tag.type="text" Then
tag.Value=data
tag.focus
End If
End If
Next
Next

のようにネストしておくと、すべてのフォームを調べることができます。
この場合、lengthプロパティを調べる必要もありません。(フォームがない場合は
実行されないので)

ところで、MSのDHTMLの日本語版リファレンスって何処にいったんでしょうね。
英語版のはWebで公開されていますが、あれを英語で読むのはしんどいですよね。
私の場合は、MSDNライブラリに、IE4仕様のDHTMLリファレンス(日本語)があるので
重宝していますが…。(訳が直訳過ぎてよくわからんこともありますが)

To: 岡田 さん

> 最初は、InetコントロールとBasp21を使ってバイナリファイルの保存をしようと考えてました。

Basp21は、バイナリファイルを書き込めるんですか。
ふうむ。やはり外部コントロールは偉大ですね…。

> むたぐちさんに提案していただいたInternetExplorerを利用しようと考えてます。
>
> そこで、再度質問なのですが、
> InternetExplorerを使う場合、画像やページをファイルを保存するメソッドは何を使えばいいのでしょう?

これに関しては、まだ自動化する方法を見いだしていません。
半自動化なら、↓の秦野の大島さんへのレスが参考になると思います。

To: 秦野の大島 さん

> 「登録されていないドロップターゲットを解除しています。」
> と、エラーダイアログが出て、止まってしまいます。
> 私は、「Webページの保存」というダイアログボックスが出て、ファイルが保存
> できると期待したのですが・・・

Dim complete
Const OLECMDID_SAVEAS = 4
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")

IE.Visible=True 'これを省略すると、ダイアログだけが表示される
IE.navigate "http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/"

Do
WScript.Sleep 100
Loop while complete=false
complete=False

On Error Resume Next
IE.ExecWB OLECMDID_SAVEAS,OLECMDEXECOPT_DONTPROMPTUSER,"c:\test.htm"
On Error Goto 0

IE.Quit

Sub IE_DocumentComplete(pdisp,url)
complete=true
End Sub

OLECMDEXECOPT_PROMPTUSERではなく、OLECMDEXECOPT_DONTPROMPTUSERを使います。
(Constで定数宣言するのをお忘れなく)
"c:\test.htm"としておくと、デフォルトで開くフォルダが"C:\"、デフォルトの
ファイル名が"test.htm"になります。
OLECMDEXECOPT_PROMPTUSERでは、ExecWBメソッドの引数を指定しても無視されます。

ダイアログでキャンセルするとエラーになるので、ここだけエラー処理を
します。
#On Error Goto 0の使い方ってあってますよね?

ここから岡田さんへのレスの続きになりますが、
画像やHTMLのURLが既知の場合は、上の方法そのままで、保存ダイアログを
出すことができます。
IE.Visible=Trueという行を削除して、URLを"http://なんとか/nantoka.gif"
のようにし、IE.ExecWB .... "C:\nantoka.gif"にかえてみてください。

次にURLが未知の場合ですが、高瀬さんへのレスにも書いたとおり、
HTMLのドキュメントを読み込んでから、各タグの内容を参照することが
できます。
If tag.tagname="A" Then
If LCase(Right(tag.href,3))="jpg" Then
...
End If
End If
のようにして、リンク先ファイルの拡張子がjpgなら変数に追加し、
全部のタグを読み終わったら、「順番に画像にNavigateし、
読み込み完了したらSaveAsを実行」を繰り返すことで、リンク先
画像ファイルを全部保存することも(たぶん)可能です。

さらに、document.imagesコレクションを使って、IMGタグの画像
すべてにアクセスできます。同様にsrcプロパティを参照すれば、
表示されている画像ファイルを全部保存することもできそうです。

> では、きっとドロップターゲットというもの(これも良く分かりませんが)の登録
> をすれば良いのかと思い、
>
> objIE.PutProperty RegisterAsDropTarget,TRUE
>
> という一文を追加してみたのですが、結果は同じでした。

私もExecWBやPutPropertyに関しては、まだよく理解していません。
要研究です。

秦野の大島 さん (tohshima@woodstream.gr.jp) 2000年 02月 24日 23時 25分 21秒

はじめまして。
WSHを使ってみて壁にぶち当たってしまったので、
相談に乗ってもらえるとありがたいです。

「IEで特定のホームページを表示して、名前を付けて保存する」
という一連の作業を自動化させようとして次のようにスクリプトを記述してみました。

−−−−−−−−−−−[LIST 1]−−−−−−−−−−−
1|Set objIE = WScript.CreateObject("InternetExplorer.Application")
2|objIE.Visible = True
3|objIE.Navigate("うんちゃら.htm")
4|Do While objIE.Busy
5|Loop
6|objIE.ExecWB OLECMDID_SAVEAS,OLECMDEXECOPT_PROMPTUSER
−−−−−−−−−−−−−−−−−−−−−−−−−−

これを実行すると6行目で
「登録されていないドロップターゲットを解除しています。」
と、エラーダイアログが出て、止まってしまいます。
私は、「Webページの保存」というダイアログボックスが出て、ファイルが保存
できると期待したのですが・・・
では、きっとドロップターゲットというもの(これも良く分かりませんが)の登録
をすれば良いのかと思い、

objIE.PutProperty RegisterAsDropTarget,TRUE

という一文を追加してみたのですが、結果は同じでした。
ExecWB の使い方がいけないのか、それとも、
SendKeysメソッドを使ってコントロールするしか方法が無いのでしょうか。

環境は Win98 + IE5.01 です。

情報をお待ちしております。m(_ _)m

岡田 さん 2000年 02月 24日 23時 20分 36秒

むたぐちさん、早速試していただいてありがとうございます。

>ただ、WSHではバイナリファイルの書き込みはできないので、Inetコントロールで
バイナリファイルを取得することはできないと思います。

最初は、InetコントロールとBasp21を使ってバイナリファイルの保存をしようと考えてました。
しかし、Inet.URLOpenはうまく動かないようなので、
むたぐちさんに提案していただいたInternetExplorerを利用しようと考えてます。

そこで、再度質問なのですが、
InternetExplorerを使う場合、画像やページをファイルを保存するメソッドは何を使えばいいのでしょう?
質問ばかりですみません。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 24日 21時 55分 01秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: 高瀬 さん

For Each tag In document.forms(0).all '最初のフォーム内のタグについて実行
If tag.tagname="INPUT" Then 'INPUTタグなら
If tag.type="text" Then 'テキストボックスなら
tag.Value=data 'テキストボックスに書き込む
tag.focus 'カーソルをテキストボックスに
End If
End If
Next

こんな感じでいかがでしょう。
dataには、テキストファイルから読み込んだ文字列を代入しておきます。
<Input type="text">は、普通のページでは、FORMタグ内にあるので、
タグ検索は、document.allではなく、document.forms(0).allでいいと思います。
(document.allより速いです)
forms(0)は、最初のフォームという意味です。フォームがないとエラーになるので、
フォームが確実にあるとわかっているページ以外を読み込むときは、
document.forms.lengthプロパティが0でないか調べる必要があります。
また、FORMタグにNameパラメータがついている場合、forms("formname")のようにも指定できます。
テキストボックスにもたいていNameパラメータがついているので、これを参照して、
書き込むテキストボックスを特定することもできます。
たとえばIf tag.type="text" And tag.name="email" Thenのように。



管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 24日 21時 09分 18秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: 岡田 さん

Inetコントロールを試してみましたが、やはりドキュメントを取得することは
できませんでした。ちょっと理由はわかりません。
以下は、実験に使ったコードです。

Set inet = WScript.CreateObject("InetCtls.Inet")
inet.URL="http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/index.html"
data = Inet.OpenURL(inet.URL,0)
msgbox data

To: dawn さん

> というかむたぐちさんの強調表示を秀丸用に書き直しただけとも言います
> (爆

それでこのファイルでもWendを忘れているのですね(謎)
いや、While...Wendってあまり使わないですからねえ。

というわけで、そのままアーカイブに入れさせていただきました。
ありがとうございました。

WZ EDITORのもいれました。他のファイルもちょっとずつ変更しています。
それにしても、各エディタごとに、見事に拡張子が違うなあ(笑)

To: ぶんぶん さん

> アプリケーションを起動させたいのですが、コマンドプロンプトから処理は、行えるのでしょうか?

cscript.exeでスクリプトを実行します。具体的には、vbsファイルを右クリックして、
「DOSプロンプトで開く」です。DOS窓から直接
cscript nantoka.vbs
と指定してもOKです。
ただし、cscript.exeは、DOSモードでは使えません。
アプリケーションを起動させるコードについては、「WSHテクニック集」をご覧ください。

To: 開発担当者 さん

> EXCELのデータをWSHを使って、AS/400に転送したいのですが、転送方法を
> 教えてください。

すいません。AS/400というのが何だかわかりません。

高瀬 さん (shigeto.takase@jp.compaq.com) 2000年 02月 24日 16時 43分 42秒

お世話になります。

>'ここから
>For Each tag In document.all 'すべてのタグに対して実行
>If tag.tagname="A" Then 'Aタグで
>If tag.href=url2 Then 'リンク先がurl2なら
>tag.Click 'リンク先に移動
>Exit For
>End If
>End If
>Next

を改変して、  <INPUT TYPE="text">によるテキストボックス内にマウスの
ポインタを移し、テキストファイルから文字列を読み出してテキストボックス内に
書き込むにはどうすればよいのでしょうか?

お手数ですがよろしくお願いします。

高瀬

開発担当者 さん (yueda@prime-tech.co.jp) 2000年 02月 24日 15時 12分 17秒

EXCELのデータをWSHを使って、AS/400に転送したいのですが、転送方法を
教えてください。

ぶんぶん さん 2000年 02月 24日 11時 07分 42秒

WINDOWSスクリプト初心者のぶんぶんです。

アプリケーションを起動させたいのですが、コマンドプロンプトから処理は、行えるのでしょうか?


dawn さん 2000年 02月 24日 01時 06分 02秒

ども、dawnです。
>これ、そのまま例のアーカイブに含めてよろしいでしょうか?
okですよん。
というかむたぐちさんの強調表示を秀丸用に書き直しただけとも言います
(爆


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 23日 18時 44分 23秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

テキストファイルビューアの作成が行き詰まってしまった!
フレーム間で、変数を共有するにはどうすればいいのだろう…。
HTMLに値を入れて、そこを参照するしかないのかなあ…。

#THEADはもうほっときます(^^;

To: PECULIES さん

>こわいかも知れませんね。ちゃんとIEの設定しとかないと…。
>やっぱVBScriptは、ローカルでのみ動かすべきものですよね(?)

そうですねえ…。怖いのはActiveXなんですが、VBS単独なら人畜無害かというと
そうでもなく…。(これはJavaScriptでも同じですが)

そういえば、MSのページでもVBSは使ってないですね。JavaScriptのみ。
たしかIE4インストーラには、VBSが使われていましたが…。
Windows Updateもそうでしたっけ?(使ったことがないのでわからない)

ネスケが対応してくれれば、VBSも普及するでしょうが、そんなことは絶対にありえない(笑)

To: dawn さん

> 久しぶりにのぞかせていただいたところ、各エディタのVBS配色ファイル
> があったのでもれなくダウンロードさせていただきました。
> しかし我が愛しの(爆)秀丸くんがない。。
> ということで私の強調表示を下記に書かせていただきます

おお、ありがとうございます。
これ、そのまま例のアーカイブに含めてよろしいでしょうか?

ついでにWZ Editorのも入れておこう…。

そのうちJSの配色ファイルも作ってみたいですね。

To: NashiWater さん

> オブジェクトブラウザって何ですか?

VB/VBAについてくるツールですね。起動してF2キーです。
これで、該当のメソッドが、FunctionかSubかがわかります。

To: 【おじさま】 さん

> 私は () を付けない書き方が嫌いで、戻り値を要しない MsgBox の場合も、
> Sub の呼び出しも Call で () を付けて記載しています。

でも、Subプロシージャの呼び出しには、Callをつけずに、()をつけた場合でも
エラーにならないんですよね。これはVBSのバージョンによって違うかもしれません。

To: 岡田 さん

> WSHで、Inetコントロール(InetCtls.Inet)を使い、ウェブ上の必要なファイルをダウンロードするプログラムを作ろうと考えています。
>
> VBならdata = Inet.OpenURL("http://www.yahoo.co.jp")
> という使い方でdataにドキュメントが入るのですが、
> WSHだとエラーは出ないのですがdataが空のまま帰ってきます。

たしか、引数にはhttp://www.yahoo.co.jp/index.htmlのように指定する必要が
あったと思います。
私もあとでちょっと実験してみます。

ただ、WSHではバイナリファイルの書き込みはできないので、Inetコントロールで
バイナリファイルを取得することはできないと思います。
ドキュメントを取ってくるなら、InternetExplorerを使う手もあります。
以下は、<HTML>タグの中身を取得する例です。これでほぼHTML全部の内容を
取り出せます。ただ、<HTML>...</HTML>の外側の記述まではフォローできません。
タグを個別に調べて、<HTML>の外にあるなら、それを出力に追加するというルーチンを
つければ、あるいはいけるかもしれません。

#あと、フレームの取得がどうもうまくいきません。
#document.ParentWindow.frames(0)で、最初のフレームのWindowオブジェクトが
#返るはずなんですが、実際は返ってきません…何故?

Dim complete
Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")

IE.Visible=True
url="http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/"
Ie.Navigate url
Do
WScript.Sleep 100
Loop while complete=False
complete=False
Set document=Ie.Document
For Each element In document.all
If element.TagName="HTML" Then
msgbox(element.OuterHTML)
Exit For
End If
Next

Sub IE_DocumentComplete(pdisp,surl)
complete=true
End Sub

岡田 さん 2000年 02月 23日 15時 53分 42秒

はじめまして。最近このサイトを知り参考にさせてもらっています。

WSHで、Inetコントロール(InetCtls.Inet)を使い、ウェブ上の必要なファイルをダウンロードするプログラムを作ろうと考えています。

VBならdata = Inet.OpenURL("http://www.yahoo.co.jp")
という使い方でdataにドキュメントが入るのですが、
WSHだとエラーは出ないのですがdataが空のまま帰ってきます。

どのように書けばVBと同じように取得できるのでしょう?

【おじさま】 さん (tomiyama@seagreen.ocn.ne.jp) 2000年 02月 23日 13時 06分 06秒
URL:http://homepage1.nifty.com/~tomiyama/

管理人むたぐち さん

>値を参照する場合はかっこをつける
>値を参照しない場合はかっこをつけない

RetVal = ABC("def")
ABC "def"

この違いの話でしょうか。多分 ABC "def" という書き方自体が省略形で、
本来は Call ABC("def") だと思います。Call は省略可能で、Call を省略
したら () も省略しなくてはならないというお約束だと思います。VB でも
同じ文法です

私は () を付けない書き方が嫌いで、戻り値を要しない MsgBox の場合も、
Sub の呼び出しも Call で () を付けて記載しています。

PS
 Win2000 入れました。

NashiWater さん 2000年 02月 23日 09時 36分 03秒


>値を参照する場合はかっこをつける
>値を参照しない場合はかっこをつけない

私の疑問としては、Stringを1つだけ受け取るAddが
Stringを2つ受け取るように拡張しただけで、
文法エラーになるのはなぜ?
うーん。勉強してみます。
オブジェクトブラウザって何ですか?

ともかく、コメントありがとうございました。

NashiWater

dawn さん 2000年 02月 23日 03時 36分 40秒

どうもおひさしぶりです、dawnです。
久しぶりにのぞかせていただいたところ、各エディタのVBS配色ファイル
があったのでもれなくダウンロードさせていただきました。
しかし我が愛しの(爆)秀丸くんがない。。
ということで私の強調表示を下記に書かせていただきます
長々とすみませんm(__)m
=====FileName VBS.hilight======
~ここから
20,^(PRIVATE|PUBLIC| *) *(FUNCTION|SUB|PROPERTY) +[^ ]+
41,ALIAS
41,BYVAL
41,CALL
41,CBOOL
41,CBYTE
41,CCUR
41,CDATE
41,CDBL
41,CINT
41,CLASS
41,CLNG
41,CONST|TRUE|FALSE
41,CSTR
41,DECLARE
41,EACH
41,ELSEIF
41,EQV
41,ERASE
41,EXECUTE
41,GET
41,IF|END|FOR|NEXT|EXIT|THEN|ELSE
41,IMP
41,IN
113,INTEGER|VARIENT|STRING|LONG|DOUBLE|SINGLE|AS
41,IS
41,JOB
41,LET
41,LIB
41,MOD
241,NOT|OR|AND|XOR
41,OBJECT
41,ON|ERROR|GOTO|RESUME|OPTION|EXPLICIT
41,PACKAGE
41,PRESERVE
113,PRIVATE|SUB|SET|DIM|PUBLIC|FUNCTION
41,PROPERTY
41,RANDOMIZE
41,REDIM
41,REFERENCE
41,REM
41,SCRIPT
41,SELECT|CASE|DO|WHILE|UNTIL|TO|STEP|LOOP
41,SET
41,WITH
41,XML
41,BEGIN
41,CALL
41,CASE
41,CONST
41,DECLARE
41,DIM
41,DO
41,ELSE
41,ELSEIF
41,END
41,ERROR
41,EVENT
41,EXIT
41,EXPLICIT
41,FOR
41,FUNCTION
41,GOTO
41,IF
41,IS
41,LOOP
41,NEXT
41,ON
41,OPTION
41,PRESERVE
41,PRIVATE
41,PROPERTY
41,PUBLIC
41,REDIM
41,SELECT
41,SUB
41,THEN
41,TO
41,TYPE
41,WITH
~ここまで


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 22日 18時 29分 50秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

現在、テキストファイルビューアを一から作り直してます。
メニュー・ファイル一覧・プロパティ・本文のフレーム分割4ペイン構成にします。
ファイル一覧にTableを使うつもりですが、THEADの使い方がわからず、
難航しています。
MSDNライブラリには、「THEADは、表がページ間にまたがって切れる場合に
ヘッダを複製したり、BODY部分がスクロールするパネルに表示される場合に
動かないヘッダを作成するのに使う。」とあるのですが、どうやって実現する
んでしょう? ここに「ファイル名、サイズ、種類…」という固定行を記述し、
ファイル一覧をスクロールさせてたいのですが…。


To: NashiWater さん

>Sub プロシージャを呼び出すときに、かっこを使うことはできません。
>
>というエラーがでるようになってしまいました。
>MyObj.Add "Yahoo","www.yahoo.co.jp"
>このようにすると動くのですが
>MyObj.Add("Yahoo","www.yahoo.co.jp").ShowBrowser
>といったように、戻りオブジェクトに追っかけでメソッドを
>呼び出す事ができなくなってしまいます。(Setする必要が
>でてくる事になる)

オブジェクトブラウザで、Addメソッドが本当にFunctionになっているか
確かめてみてはいかがでしょうか。

以下は、VBSの文法に関してです。

私もよくわからないのですが、VBSでは、

値を参照する場合はかっこをつける
値を参照しない場合はかっこをつけない

という原則があるようです。
これにしたがってコードを記述すればエラーが出ることはありません。

関数は、基本的に値を参照するものですが、MsgBox関数など、値を参照せずに
使用する場合もあります。その場合は、かっこをつけずに書いても、つけて書いても
OKです。

Functionプロシージャも関数と同様です。

Subプロシージャは値を返しませんが、かっこ付き記述もできます。
(ただし、VBSのバージョンによっては認められないみたい(?)ですが、
Callステートメントを使うと、かっこをつけられます。)

メソッドでは、値を返すもの(Function)の場合、どちらの記述もOKですが、
値を返さないもの(Sub)の場合、かっこをつけるとエラーになります。
(CallステートメントだとOK)

PECULIES さん (mimosa@mimosa.virtualave.net) 2000年 02月 22日 18時 10分 43秒
URL:http://mimosa.virtualave.net/peculies/

管理人さまへ
質問に答えていただき、ありがとうございます。
早速ためさせていただきます。

> それにしても、htaはブラウザでも表示されるのね…。
> セキュリティは、htmlと同じなようですが。
こわいかも知れませんね。ちゃんとIEの設定しとかないと…。
やっぱVBScriptは、ローカルでのみ動かすべきものですよね(?)
作業の効率化にはおおいに役立つけど、ネットだと怖い。

今後もなんか質問させていただくかもしれません。
できればまたそのときも、よろしくお願いします。

NashiWater さん 2000年 02月 22日 10時 46分 57秒

上記質問の追加なんですが...

>Sub プロシージャを呼び出すときに、かっこを使うことはできません。

MyObj.Addはオブジェクトを返すので
functionプロシージャーだと思うんですが、
引数を2つにしてからsubプロシージャー扱いみたいなんです。

Nashi Water

NashiWater さん 2000年 02月 22日 10時 43分 02秒

おひさしぶりです。
VBScriptの文法で疑問があります、

いままで
MyObj.Add("Yahoo")
という感じのAddメソッドがあったのですが、
都合により
MyObj.Add("Yahoo","www.yahoo.co.jp")
という感じに2つの引数をとるようにしたところ

Sub プロシージャを呼び出すときに、かっこを使うことはできません。

というエラーがでるようになってしまいました。
MyObj.Add "Yahoo","www.yahoo.co.jp"
このようにすると動くのですが
MyObj.Add("Yahoo","www.yahoo.co.jp").ShowBrowser
といったように、戻りオブジェクトに追っかけでメソッドを
呼び出す事ができなくなってしまいます。(Setする必要が
でてくる事になる)

これって、VBScriptの制限?それとも
何か勘違いしているのでしょうか?

Nashi Water


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 21日 00時 46分 49秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/


To: PECULIES さん

>Sub chkView_OnClick()
>hi1 = hi1 & " /V"
>End Sub
>と書いただけだと、チェックボックスを二回押すと(OnにしてからOFFにする)
>出来事が起こらなくなるのではなくて2度起こってしまいます。
>チェックボックスがOnなら発生して、OFFでは発生しないようにするには
>どのようにすればいいでしょうか。

Sub cmdOK_OnClick()
If chkView.Checked Then hi1 = hi1 & " /V"
End Sub

のように、最後にOKボタンを押すときに、chkViewのチェックがついているかどうかを
判別してはいかがでしょう。

それにしても、htaはブラウザでも表示されるのね…。
セキュリティは、htmlと同じなようですが。

PECULIES さん (mimosa@mimosa.virtualave.net) 2000年 02月 20日 10時 54分 51秒
URL:http://mimosa.virtualave.net/peculies/

ひとつ質問したいことがあるのですが、いいですか。
HTAファイルを作っているのですが、チェックボックスを一度
クリックするとある出来事がおこるプログラムなのですが
Sub chkView_OnClick()
hi1 = hi1 & " /V"
End Sub
と書いただけだと、チェックボックスを二回押すと(OnにしてからOFFにする)
出来事が起こらなくなるのではなくて2度起こってしまいます。
チェックボックスがOnなら発生して、OFFでは発生しないようにするには
どのようにすればいいでしょうか。
WSH初心者で、VBすら知らないような人間ですが、どうぞよろしくお願いします。
http://mimosa.virtualave.net/program/a.hta
↑これが私が試しに作ってみた問題のプログラムです。

POTOS さん (90129@std.jiyu.ac.jp) 2000年 02月 19日 15時 00分 50秒

管理人むたぐちさん、ありがとうございました。
早速手直ししたいと思います。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 19日 06時 45分 09秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

●Windows2000発売
でもまだ買ってません(^^;

●投稿王は誰だ!? for Datula
ニュースグループにちゃっかり宣伝しておきました(爆)
さて、ダウンロードしてくださる方はいるかな?

それはともかく、せっかく作ったこのスクリプトも余命わずかです。
というのも、Datula新バージョンでは、idxファイルのFromヘッダがMIMEエンコード
された状態で記録されるようになるからです。
(マルチリンガル対応の処置だそうで)
さすがにMIMEデコードをスクリプトでやるのは無理なので、あきらめます。
(外部オブジェクトを使えばいけるでしょうが、それはちと大げさだし)

To: POTOS さん

>Option Explicit
>dim a, b
>
>a = 0
>b = 5
>a = InputBox("数字を入力してください。")
>
>if a = b then
>WScript.echo "OK"
>else
>WScript.echo "Error"
>end if
>
>期待している動作は5を入力したらOKが表示されることです。
>実際に5を入力してもErrorと表示されてしまいます。
>何か勘違いしてるかもしれないのですが、原因がわかりません。

InputBox関数の返値は、文字列型です。
よって、そのままだと比較は文字列同士の比較になってしまいます。
そこで、この返値を数値型に変換してやる必要があります。
それには、CInt関数(整数型)、CDbl関数(倍精度浮動小数点数型)などが
使えると思います。
ただし、これらの関数は、数値以外の値を引数にするとエラーになってしまうので、
InputBox関数の返値が、数値として評価できるか調べる必要があります。
これには、IsNumeric関数が使えます。

a=InputBox("数字を入力してください。")
b=5
If IsNumeric(a) Then
a=CInt(a)
If a=b Then
WScript.echo "OK"
Else
WScript.echo "Error"
End If
Else
WScript.echo "Error"
End If



POTOS さん (90129@std.jiyu.ac.jp) 2000年 02月 19日 02時 30分 42秒
URL:http://www8.freeweb.ne.jp/computer/potos/

はじめまして、POTOSといいます。
VBScriptで上手くいかないことがあったので質問させていただきます。
任意の数を入力させてある数と比較するスクリプトなんですが、変数
の比較が変になります。

Option Explicit
dim a, b

a = 0
b = 5
a = InputBox("数字を入力してください。")

if a = b then
WScript.echo "OK"
else
WScript.echo "Error"
end if

期待している動作は5を入力したらOKが表示されることです。
実際に5を入力してもErrorと表示されてしまいます。
何か勘違いしてるかもしれないのですが、原因がわかりません。
比較をa=5にすると上手くのですが・・

よろしくおねがいします。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 16日 18時 11分 10秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

EmEditor v3b7のプラグインに、「アプリケーションの実行」というのがあり、
これを使えば、エディタから編集中のスクリプト実行が可能です。
ただし、いちいち選択ウィンドウから選ばなくてはならないので、ちょっと
面倒です。
プラグインは
http://homepage1.nifty.com/kksoftware/
からダウンロードできます。

プラグインか…。私には作れそうにない。
何でマクロではないのか?

To: いじくり さん

>もしかしてFAQだったら申し訳ないです。過去の掲示板のログを検索する良い
>方法が見つからなかったもので‥‥。

ここの掲示板は、ログを見るには便利ですよね。
私としても、ログ保守しなくていいから楽です。

>スクリプト内部から外部プログラムを実行させようとしています。しかし、起動
>しようとするパスの中にブランクがあると、ブランク以降を Arguments として
>認識するらしくてうまくいきません。

これに関して、まだ質問としては出ていないはずですが、「WSHテクニック集」に
書いてます。

いじくり さん (chabo@nims.nec.co.jp) 2000年 02月 16日 13時 44分 31秒

もしかしてFAQだったら申し訳ないです。過去の掲示板のログを検索する良い
方法が見つからなかったもので‥‥。

スクリプト内部から外部プログラムを実行させようとしています。しかし、起動
しようとするパスの中にブランクがあると、ブランク以降を Arguments として
認識するらしくてうまくいきません。

なにかうまい手はないものでしょうか。

Set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Run "C:\Program Files\Editor\Myeditor.exe",1,True

「C:\Program ってプログラムは見つからない」って言ってるらしいエラーが出
るんです。

FileExists("C:\Program Files\Editor\Myeditor.exe") ではファイルが見
つかるのにとても理不尽です。


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 16日 00時 54分 16秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: kia さん

>乗り換えるところまでいっちゃいますか。(^_^;
>私はサブのエディタとして使ってます。やや気にいらないところもあるので。

ちょっとはしゃぎすぎでした(爆)
やはり私も、気になる点がいくつか…。

・微妙な立ち上がり時間が気になる
・折り返しをツールバーから即時設定できない
・横スクロールバーが固定
・文字列選択に関して
  他のエディタに比べ、選択開始の閾値が微妙(たぶん1ドット程度)に違う
  (↑選択したい文字列よりも一文字多く選択してしまうことが多々あり)
  改行記号より右まで選択してしまう(EmEditor Freeみたい)
  シングルクリック行選択ができない
  D&Dできない。もちろん他アプリからのD&Dも無効

選択文字列の扱いに関しては、このエディタは基本部分を別作者の手による
モジュールを基本に開発していることもあって、改善はあまり期待できそうでは
ないですね。
私的にも、サブエディタに落ち着きそうです。
#ちょっと辛口批評かな? まあ、前回べた褒めだったし、いっか。

やはり、癖のない&最速なEmEditorは偉大かも。1200円の価値は私が保証します(^^;
(ちなみにエディタ部は\50,000のActiveXコントロールとして発売中!)
逆に、EmEditor側に、編集中のファイルを開くコマンドが搭載されないかな。
ちょっと、提案してみようかな?
この機能、何もスクリプトだけではなくて、HTMLソースを書くときにも便利ですし。
プラグイン方面で攻める(謎)手もある…。

#何か最近、配色定義ファイルばっかり書いている気がする。

kia さん (kia@geocities.co.jp) 2000年 02月 15日 06時 19分 40秒

こんにちは。

>むたぐちさん
>これはいいです。私も乗り換えよう。
乗り換えるところまでいっちゃいますか。(^_^;
私はサブのエディタとして使ってます。やや気にいらないところもあるので。

>ところで、IE5.5では、縦書き表示がサポートされるみたいです。
>rubyタグと組み合わせると、小説がWebで公開できるようになりますね。
ほぅ、そうなんですか。
ならば青空文庫などを読むスクリプトも作れそうですね。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 13日 19時 30分 21秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

To: kia さん

>エディタ関連のところですが、K2Editorというのもチェックしてみてください。
>http://web.kyoto-inet.or.jp/people/koyabu/
>ファイルタイプ別の色付け、設定ができるようです。

ちょっと使ってみたんですけど、これは、EmEditor以上に高機能かもしれませんね。
Windows基本インターフェース準拠なフリーのエディタの決定版かもしれません。

「開いているファイルの実行」がある!
私が挙げた、WSHのコードエディタ4箇条をすべて満たしていますね。

起動時間だけはEmEditorには劣りますが、ほとんど問題のないレベルと言えるでしょう。
マクロも、条件分岐などはなく、本格的なマクロとは言えませんが、
メニューコマンドを直接指定できるので、かなり使えそうです。

これはいいです。私も乗り換えよう。

>それから、xyzzyのlispはエディタ関連がemacs風
>その他がCommon Lisp風となっているそうです。

あ、よく知らないもので、紹介文も適当でした(^^;
直します。

>>Dictionaryオブジェクト
>まだ使ったことが無いので間違ってるかもしれませんが(^-^;
>キーに使わないことがわかっている文字(タブとか)をセパレータにして
>多次元風にごまかせませんか?

なるほど。そういう手もありますね。
値を取り出すときがちょっと面倒ですが、VBSにはsplit関数があり、
これで配列に変換できますし、実用性は高いと思います。

>>ポップアップ
>popupというオブジェクトがあるみたいですが、MSIE5.5と書いてありますね。

IE5.5待ちということですか。
IE5.5というと、Windows ME(何とかならんかこの名前)まで待つことになりそうです。

このpopupオブジェクトは、ポップアップの内容をHTMLで記述するみたいですね。
それに対して、IEPopupは、普通の、Windowsのポップアップなようです。
WSHから使えるか実験したことがある(結局無理だった)のみで、実際に動いているところは
見たことがないんですけど。
IEPopupは何処へ?

仕方がないので、Divでなんとかします。

<style>
BODY {font: 12 'MS UI Gothic';background: MENU; border-style: none; margin: 10; cursor: default}
#divMenu {position: absolute; visibility: hidden;border-style: outset ; border-width:thin ;height:100;width:100;background-color: MENU}
a {background-color:MENU;color:MENUTEXT;text-decoration:none}
a:hover {background-color:HIGHLIGHT;color:HIGHLIGHTTEXT;text-decoration:none}
a:link {background-color:MENU;color:MENUTEXT;text-decoration:none}
</style>

で、それらしいものができます。あとは

Sub ta_oncontextmenu() 'taはtextarea
divMenu.Style.Left=window.event.X
divMenu.Style.Top=window.event.Y
divMenu.style.visibility="visible"
window.event.returnValue=False
End Sub

と、

<body onclick="divMenu.style.visibility='hidden'">

で表示・非表示を切り替えます。問題は、ウィンドウ外でのクリックをどうするかですね。

ところで、IE5.5では、縦書き表示がサポートされるみたいです。
rubyタグと組み合わせると、小説がWebで公開できるようになりますね。

いろいろご教示ありがとうございました > kiaさん

kia さん (kia@geocities.co.jp) 2000年 02月 13日 07時 31分 38秒

こんにちは。

エディタ関連のところですが、K2Editorというのもチェックしてみてください。
http://web.kyoto-inet.or.jp/people/koyabu/
ファイルタイプ別の色付け、設定ができるようです。

それから、xyzzyのlispはエディタ関連がemacs風
その他がCommon Lisp風となっているそうです。

>Dictionaryオブジェクト
まだ使ったことが無いので間違ってるかもしれませんが(^-^;
キーに使わないことがわかっている文字(タブとか)をセパレータにして
多次元風にごまかせませんか?
JScriptだと "AAA\tBBB" のような感じです。

>ポップアップ
popupというオブジェクトがあるみたいですが、MSIE5.5と書いてありますね。
http://msdn.microsoft.com/workshop/author/dhtml/reference/objects/popup.asp

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2000年 02月 11日 18時 05分 13秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

●スクリプト紹介
今回アップしたスクリプトは、ニュースグループで投稿数TOP10の人を
調べるスクリプト(Datula用)です。

自分がどれだけ投稿したか、投稿数は何位なのか、なども調べられます。
全投稿数/全投稿者数の比率で、投稿者の偏り具合もわかってしまいます。
メールの分析もできますよ。(inbox.idx)
個人的には結構気に入ってます(^^;

内容的には、初めてDictionaryオブジェクトを使ってみました。
配列より便利な点もある反面、配列のように多次元化できないのが
ちょっと難点でしょうか。

●情報求む!
HTA(HTML)で、OnContextMenuで右クリックを検出できることは
わかっているのですが、そのときポップアップを出す方法というのは
あるのでしょうか?
座標は、window.event.Xとwindow.event.Yで特定できるようです。
そういえば、IE4には「IEPopup」というコントロールがあったような気が
するのですが、IE5をインストールしてからなくなってしまったようです。

Return