管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 28日 03時 17分 12秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

ここ数日間、
http://pc.2ch.net/test/read.cgi/win/1009175619/
に書き込んでるわけなんですが、そろそろここに帰ってこようかな。

えんど さん 2001年 12月 27日 15時 50分 12秒

スペース空けすぎてしまいすいません。

えんど さん (pisuken1e@mail.goo.ne.jp ) 2001年 12月 27日 15時 46分 31秒

 こんにちは。
つい最近からなんですが、どれでもひとつフォルダを開くとその時点から85%くらいあるシステムリソースがどんどん減っていき何もしなくても最後はフリーズしてしまいます。
 それで、途中Ctrl+Alt+Delでプログラムの強制終了のところをみるとWscriptがたくさんでています。これはWSHテクニック集にあるスクリプトの暴走でしょうか?
 一応テクニック集にあるとおりいろいろ試したのですがまったく状況はかわりません。
対処法が分かる方がいればどうか教えてください。
よろしくお願いします。






























































ポーラ さん 2001年 12月 27日 13時 00分 39秒

はじめまして!
VBSを使用して半年になります。
WinodwsXPにてユーザ切り替え画面にてSendKeyがきかないのですが、キー入力以外にユーザを選択できる方法をご存知の方がいらっしゃいましたら教えてください。
よろしくお願いします。

土屋 さん 2001年 12月 26日 16時 36分 11秒

Dear むたぐちさん

ProcessIDの取得の方法がわかりましたので、次回バージョンアップで実現すると思います。
デバッグウィンドウの実現は、個人的にうれしい。。

土屋 さん 2001年 12月 26日 16時 22分 26秒

TeraPad上でWSHをマクロ的に実行するためのライブラリ DoMacro.dll をバージョ
ンアップしました。
http://csx.jp/~tsuchiya/
WSHでサポートされていないクリップボード操作や開くと保存のコモンダイアロ
グの機能を持つクラスを追加しましたれば、DLサイズが236KBと増えてしまいま
した。(汗)
TeraPad操作系とWSH追加機能系の2つのクラスを持つようになりましたので、
前回のバージョンをお試しいただいた方は、
「ここにドラッグしてね」を使ってアンインストール・インストールを再度お願
いします。
今後のバージョンアップは、ファイルの上書きだけで結構です。

ver0.1.0からの追加機能としては、囲まれた部分をVBSファイルにして実行して
みて下さい。

■コモンダイアログボックス(開く/閉じる)でファイルパスを取得
'=======================================================================
Set DM = CreateObject("DoMacro.Shell")
FileName = DM.OpenDialog("Text files (*.txt)|*.TXT|Pascal files (*.pas)|*.PAS","c:\Notes","ファイルを開いてみよう")
'FileName = DM.SaveDialog("Text files (*.txt)|*.TXT|Pascal files (*.pas)|*.PAS","c:\Notes","名前をつけてね")
MsgBox FileName
'=======================================================================

■メニュー実行機能
'=======================================================================
Set TP = CreateObject("DoMacro.TpMac")
TP.MenuExec 1,1
'=======================================================================
1,1 というのは、左から1番目のメニュー(1はファイルですね)で、
 その中の上から1番目のメニュー(この場合は新規作成ですね)を実行します。

■新規TeraPadウィンドウをVBのデバッグウィンドウみたいに使う
まず、新たにTeraPadを起動して脇の方に見えるように置いておきます。【忘れ
ないでね】 見つからないと何もしません。
次にメインのウィンドウから実行します。
'=======================================================================
Set TP = CreateObject("DoMacro.TpMac")
TP.Debug "それは何かと聞かれたら。"
TP.Debug "(ここでロケット団の登場)"
'=======================================================================
これは、計算結果やデータなどをクリップボードではなくて、
他のウィンドウに渡しておきたい、という時に使います。
TP.DebugClearでウィンドウをクリアします。

'=======================================================================
Set TP = CreateObject("DoMacro.TpMac")
Set DM = CreateObject("DoMacro.Shell")
TP.Debug DM.FromClipBoard
'=======================================================================
とすれば、クリップボード内のテキストをデバッグウィンドウに貼り付けます。


ヘルプ作成まではまだまだ道のりは遠い。。。

SIGNAL9 さん 2001年 12月 26日 14時 04分 14秒


#超々遅レスですが(爆)

To>管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 07日 02時 05分 00秒

えー、拙作のキャプチャの件ですが、

>アクティブウィンドウの振る舞いに関しては、Tweak UIなどでも設定できますが、
>設定によってはうまくいかないのかな?

どーもそうのような…

>(ウィンドウの上にウィンドウがオーバーラップしているとき、そのウィンドウが写りこむ
>のはやっぱり仕様ですか? AppActivateもついでにやってくれるとありがたいんですが…)

えー、これ実はですね、かなり端折った実装にしてまして、本来ならちゃんと画面のオブ
ジェクトをハンドルすべきなんですが、キャプチャ専用ならいざしらず、おまけにGUIもな
い状態なんで、逐一Winの状態を見ないで、何も考えずにbitbltしちゃってますんで画面の
更新タイミングと同期してないからそういうことになるんだと思います。
フィードバックを画面に出せない上、COM内部であんまり「待ち」を作りたくない…という
ことなんで、当面呼び出し元でAppActiveteして、適当にwaitしていただけるとありがたい
んですが…

もう一点、壁紙のレジストリセーブの件は直すといってもパラメータ一個加えるだけなんで
#WinのAPIにレジストリ書き換えのオプションがついてます
次回のバージョンアップの時に、レジストリに書き込むオプションを付加します。

takuro さん 2001年 12月 25日 23時 15分 54秒

どうもありがとうぞざいます(^^
参考にしてみます。

土屋 さん 2001年 12月 25日 15時 32分 48秒

Dear takuroさん

VBならばVBだけでやった方がいいのでは、と思います。
WSHでできることは、たいていできるので、わざわざWSHを使う必要はないのではと。
Outlook関連ならば、
http://www.moug.net/boards/index.htm
とかで質問された方がいいかもしれません。
ただ、セキュリティ上の問題で、アドレス帳は自由に操作できない可能性があります(もしくはバッチをあてると操作できなくなるとか)。
(メリッサなどが流行していた頃は操作できていたと思いますが)


Dear むたぐちさん

> ちょっとクラス名にひっかかりを覚えたりするんですが(^^;

確かに。
DoMacro.Shellだとどうですか?(やはりまぎらわしいかな)

> TP.ProcessIDの実装を強く希望します。

私も同感でした。
ウィンドウハンドルからProcesswIDを取得するAPIってきっとありますよね。

takuro さん 2001年 12月 25日 06時 07分 11秒

↓はOutlookのアドレス帳です。

takero さん 2001年 12月 25日 06時 06分 28秒

みなさん今日は。
VBを使ってメーラーを作っています。
OCXなどを使わず根性でやってます。

ある程度は上手くいったのですが…アドレス帳のデーターを受け継ぐことが出来ません。
VBで作った*.exeから*.VBSを起動して、そのVBSが同じフォルダ内にアドレスを出力する…その出力された*.Txtなどを*.exeでよみとる…こんな方法を考えていますが、WHSでなんとかならないんでしょうか?これは。

なるべく相手のPCに余分なものをインストールさせたくないのでこんな方法を考えております。
どうにかなりませんかねぇ(^^;

どなたかご教授願います…

ちなみに私はWHSは殆ど扱ったことがありません。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 24日 21時 00分 11秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 土屋 さん

> これはライブラリ(DLL)形式のCOMサーバーがイベント処理をどうしているか、
> (そもそもできるのか)がわかってないので、今のところはどうすればいいかわかりません。
> TeraPadにも昔キーボードマクロの記録・実行機能があったのですが、
> あまりうまくいかなかったということで、現在はなくなっています。

うーん。残念です…。

> > MenuExecメソッド
> TP.MenuExec 1,1
> で1番目のメニューの1番目のサブメニュー(新規作成)を実行、
> というのではどうでしょうか。これなら実装できました。

いいですね。
でも、将来のバージョンアップで、メニュー構成が変わっちゃったときは
どうしましょう。
内部的に、メニューを表すユニークな値みたいなのはないんですかねえ?

> 実装の方法自体はおおよそめどはついてきましたが、
> ネーミングをどうしようかと、そちらの方で時間がかかってたりして、、、

きっちり作っておかないと、あとあと混乱の元になるので大変ですよね。
FileSystemObjectのTextStreamとか、HTMLのDOMとか、あるいは
他エディタのマクロ(^^;とかを参考にしてはいかがでしょうか。

> > その他
> TeraPad操作系以外に、WSH Plus的な部分をいれようと思っています。
> クラスを分けて、
> Set Plus = CreateObject("DoMacro.WSHPlus")
> てな感じで、、、
>  LenA
>  OpenDialog
>  SaveDialog
>  ToClipboard
>  FromClipboard
>  OpenURL(直接HTTPリクエストを送る)

ちょっとクラス名にひっかかりを覚えたりするんですが(^^;
# WSH以外からの使用もあるでしょうし。
DoMacro.Helper とかはどうっすか?

あ、そうそう。
TP.ProcessIDの実装を強く希望します。
Win32_ProcessやWshShell.AppActivateに渡すことができて、いい感じだと思うので。

TP.Activateとか、TP.Minimizeとか、TP.SetWindowPos x,yとかもあった方が
いいのかな?

土屋 さん 2001年 12月 24日 12時 46分 18秒

Dear むたぐち さん

> LenA関数ってどっかで見たことあるような気がするんですが、気のせいかなあ。

私もそう思います。
やはりこの場合はCOM化してDelphiでやった方が簡単ですね。
たとえば、COM経由の文字は1文字2バイトのWideString型で受け渡ししているんですが、
その文字列をs(="abcdeあいうえお")とすると、
Length(s)で10、
Length(String(s))で15とカウントできます。

> ところで、前に書いた要望ですが、もしかして選択文字列以外の文字列を
> 取ってくることとか、現在のカーソル位置(行・列)を取得したりはできないんでしょうか?

できます。それも取り掛かればすぐできると思います。(^^;;;;;;;
実は文字列をTeraPadとやりとりするときに使っているSendMessage APIの中のWM_GETTEXTは、
65534までという制限がありまして、(TeraPadに限ったことではないんですが)
これを超える場合はクリップボードを経由するなりしないといけないんですよね。
最近は、この大容量の文字列のやりとり問題にはまっていまして、
肝心のDoMacroの整備の方まで手が回っていないところでした。
現在、TeraPadの技術系MLの方で、共有メモリを使った方法が提案されまして、
年明けにはTeraPadに実装されそうということなので、
そっちの方もいろいろ調べているところです。

> OnKeyDownイベント
これはライブラリ(DLL)形式のCOMサーバーがイベント処理をどうしているか、
(そもそもできるのか)がわかってないので、今のところはどうすればいいかわかりません。
TeraPadにも昔キーボードマクロの記録・実行機能があったのですが、
あまりうまくいかなかったということで、現在はなくなっています。

> MenuExecメソッド
TP.MenuExec 1,1
で1番目のメニューの1番目のサブメニュー(新規作成)を実行、
というのではどうでしょうか。これなら実装できました。

> Linesプロパティ
ようやくとりかかろうとしております。
実装の方法自体はおおよそめどはついてきましたが、
ネーミングをどうしようかと、そちらの方で時間がかかってたりして、、、

> その他
TeraPad操作系以外に、WSH Plus的な部分をいれようと思っています。
クラスを分けて、
Set Plus = CreateObject("DoMacro.WSHPlus")
てな感じで、、、
 LenA
 OpenDialog
 SaveDialog
 ToClipboard
 FromClipboard
 OpenURL(直接HTTPリクエストを送る)
こちらの方はまだちょっと先ですが、、、

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 24日 07時 34分 18秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 土屋 さん

> > TearPadにDoMacroを使うと、WSHにInputBox以外で文字を渡したり、
> > WSHの処理をデバッグすることだってできるわけですね。
>
> なるほど、高機能コンソールとして使えますね。

メニューの「編集-書き換え禁止」を使えば、よりデバッグモードらしく
使えますね。というわけでやっぱりMenuExecメソッドが欲しい!

デバッグの停止には、OnKeyDownイベントの実装が必須になりますね。
というわけで、こちらもぜひご検討を。

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

To: 土屋 さん

> TearPadにDoMacroを使うと、WSHにInputBox以外で文字を渡したり、
> WSHの処理をデバッグすることだってできるわけですね。

なるほど、高機能コンソールとして使えますね。

> 半角を1、全角を2で文字を数えたい時ってどうするんでしょう。
> LenBだと全部2で数えてしまうし。

この話題は以前ありましたよね。
28-15 28-11 28-10 28-08 28-07 27-50 27-43 27-38 27-37 27-33
この辺です。

> やはりそういう関数をDoMacroに実装してしまうのが簡単なのかなあ。
> (LenAってのはどうでしょう。AはASCIIということで)

LenA関数ってどっかで見たことあるような気がするんですが、気のせいかなあ。

ところで、前に書いた要望ですが、もしかして選択文字列以外の文字列を
取ってくることとか、現在のカーソル位置(行・列)を取得したりはできないんでしょうか?
TeraPadのエディタ部分のコントロールは、ソースが公開されていたと思うので、
これを参考にすればなんとかなるかな、とか思ったんですが…。



To: アオタ さん

> > 話は変わって、以前出た英和翻訳です。
> こういう方法もあります
> 翻訳することばは[strTranslate]に代入してください

これもいいですねえ。土屋さんとアオタさんの方法は、文字コードの
問題が出なくていいですね。
JScript+XMLHTTP版はこちら。
52-26 Lib30 さん 2001/11/19 00:05

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 23日 20時 22分 04秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

タブブラウザなんですが、個人的に決定版かなあと思うのが
ありましたのでご紹介。

DonutP
http://www18.u-page.so-net.ne.jp/rc5/camegon/

これ、もともとDonutRのソースをもとにして作られているのですが、
今回のバージョンアップ(ver 3.0)でついに本家を超えたんじゃ
ないかという気がします。ちゃんと「進む」「戻る」にタイトル
つきで履歴が出ますしね。
検索バーもついていますので便利です。キーワードのハイライト
表示もつく予定があるみたいで、楽しみです。
履歴の時間別表示とかもできますぞ。
DonutRのポップアップ抑止設定をそのままインポートできるので、
移行は楽でした(^^;

アオタ さん (no_tak@kcn.ne.jp) 2001年 12月 23日 15時 22分 12秒
URL:null

こんにちわ アオタです

To: 土屋さん
もとは土屋さんが考えられたものを少し変えただけなので、
私がどうこういうことではないので、どうぞお使いください

マクロの作成もがんばってください

土屋 さん 2001年 12月 21日 08時 28分 00秒

Dear アオタ さん

ありがとうございます。
ナイスです。うまくいきました。

実はこの方法は考えないでもなかったのですが、
GETだと2バイト文字やスペースがうまくいくかわかんないし、文字数制限もあるし、
VBScriptにはエンコードする関数ないし、、、なんて考えて、
いっそのこと、IEでそのままやってしまえ、と作ったのでした。
エンコードはIEにお任せってことで。
そしたらバナーの関係なのかStatus<>4だとうまくいかなかったので、busyだけにしたのでした。
でもGETでうまくいくんですね。(文字数制限はいいことにしよう)

で、お願いですが、
現在TeraPad上でWSHを動かすというマクロ化計画(WSHをTearPadのマクロ風に動かすわけです)のサンプル作成中なのですが、
その一部に使わせてください。
TeraPad上で文字列を選択して、右クリックまたはメニューからマクロを起動すると、
選択文字の下に翻訳された文が差し込まれる、というものです。

pokopon さん (pokopon@jomon.ne.jp) 2001年 12月 20日 23時 01分 12秒

To むたぐちさん

どうもありがとうございます。

>まあ、もともと結構アクロバティックというか無謀なことをしているので、
>クリップボード操作系のCOMコンポーネントを使った方が確実なのは確かです。
>(WshShellあたりに、このメソッドを入れたらいいのにね。さんざん要望が出ているにも
>関わらず、いまだ採用されないのはScripting Teamのこだわりか、ScriptXかAutoItに
>遠慮してのことか?)
やはり誤動作もあるのですね。ならば納得!! 上手くデータを拾えないのが残念ですが、他のコンポーネントを入れるのはちょっと躊躇します(いやだというのではなく、単にWinデフォルテで動く事を前提としているためでです)

別の方法も考えてみます。


アオタ さん (no_tak@kcn.ne.jp) 2001年 12月 20日 21時 02分 38秒
URL:null

こんばんは お世話になっております アオタです

To: 土屋 さん
> 話は変わって、以前出た英和翻訳です。
こういう方法もあります
翻訳することばは[strTranslate]に代入してください

'<ソース>
Option Explicit

Dim strTranslate, strURL, objIE, strRet

strTranslate = "Windows"
strURL = "http://www.excite.co.jp/world/text/?wb_lp=ENJA&before=" & strTranslate
' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
' リクエストに含めて送信します
' wb_lpに翻訳する言語を設定します
' 英→和ならENJA
' 和→英ならJAENにします

Set objIE = WScript.CreateObject("InternetExplorer.Application","IE_")

With objIE
Call .Navigate2( strURL )
.Visible = False

Do While .Busy Or .ReadyState<>4
Call WScript.Sleep( 100 )
Loop
strRet = strTranslate & "を翻訳すると…" & vbCrLf & .document.World.after.Value

Call .Quit()
End With
Set objIE = Nothing

Call MsgBox( strRet )
'</ソース>

> 非表示にしてるとIE.document.Worldのオブジェクトに失敗することがありますが、はて?
については記事番号[24-36]のむたぐちさんの記事が参考になります

土屋 さん 2001年 12月 20日 18時 30分 01秒

Dear むたぐち さん

そうかぁ。よく考えてなかったんですが(あのね>自分)、
TearPadにDoMacroを使うと、WSHにInputBox以外で文字を渡したり、
WSHの処理をデバッグすることだってできるわけですね。

現在、行単位の処理の実装を考えているのですが、
WSHだと湯にコード(おもしろい変換だったのでそのまま)で文字を数えるので、それはそれでいいのですが、
半角を1、全角を2で文字を数えたい時ってどうするんでしょう。
LenBだと全部2で数えてしまうし。
やはりそういう関数をDoMacroに実装してしまうのが簡単なのかなあ。
(LenAってのはどうでしょう。AはASCIIということで)


話は変わって、以前出た英和翻訳です。

URL = "http://www.excite.co.jp/world/text/"
Set IE = WScript.CreateObject("InternetExplorer.Application","IE_")
IE.Navigate2 URL
IE.Visible = True
While(IE.busy):Wscript.Sleep 100:Wend
IE.document.World.before.Value = "デスクトップ保守特別対策本部"
IE.document.World.elements("wb_lp")(1).click()
IE.document.World.submit()
While(IE.busy):Wscript.Sleep 100:Wend
MsgBox IE.document.World.after.Value
IE.Quit:Set IE = Nothing

かなり時間がかかりますが、こういうのはどうだべ。
TeraPadで選択した範囲を英訳するときに使おうかと。
非表示にしてるとIE.document.Worldのオブジェクトに失敗することがありますが、はて?

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 20日 04時 27分 22秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

返り値と戻り値の違い
http://pc.2ch.net/test/read.cgi/tech/1008663051/

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 20日 03時 46分 56秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 土屋 さん

> 実は、今TeraPad上で、WSHで作ったマクロを動かすという、
> 壮大な試みをひっそりとおこなっているところです。

うーん。いいですねえ。
TeraPadって今までマークしてなかったんですが、何気に例のスクリプト4か条を
満たしているし、結構いいですね。外部コマンドが呼び出せるのがポイントでしょうか。

TeraPad+DoMacro.dllで、WSH使いにとって最強のエディタになる可能性が…。

要望というかアイデアをいくつか。

・OnKeyDownイベントとSendKeysメソッドがあれば、キーマクロが作れますね。
また、それとは別にメニューを実行可能なMenuExecメソッドもあったほうがいいと思います。

・現在のカーソル位置(列・行)を示す書き換え可能なプロパティがあれば、
いろいろ応用が効きそう。スタート行と列、選択文字数を指定できるSelectメソッドもほしいですね。
行と列、選択文字数を指定できるGetText/SetTextメソッドもいいなあ。
となると行数を示すLinesプロパティとか。指定行の文字数を返すメソッドとか。

これだけあったら、とりあえずマクロとして十分なものが書けるんじゃないでしょうか。
ベースとしてVBS+いろんなCOMコンポーネントが使えるだけに、実装するのはエディタとの
通信部分だけでいいわけですしね。



To: ひょん さん

> 私もスクリプト関係のページを
> 最近なんですが開いてしまったので
> むたぐちさんのページをリンクさせてもらいました
> よかったら相互リンクしてください

リンクありがとうございます。
おお、これはまた濃ゆいぺーじですね。次回更新時にリンクをはらせてもらいます。
(個人的メモ。バナーを替えるのを忘れぬよう)

HTAをタスクトレイに入れることができるActiveX コントロール、TrayErが
いい感じですね。
これを使えばHTAで常駐アプリができますね。
# ポップアップを出すコントロールのありか、ご存知ないですか?

他にもいろいろ有用なコントロールが公開されてますので、みなさまも
行ってみて下さい。



To: pokopon さん

> ところで、このクリップボードって、Win内に複数あるのでしょうか?
>
> あるアプリで、直接にクリップボードに書き込みできるのですが、そのアプリで書き込まれた内容を、別のWHSで処理し(裏でこそこそ動いて)、さらにクリップボードを書き換え、そのアプリにデータを渡すゥゥなんてことを考えているのですが、WHSで書き込まれたクリップボードの内容が、アプリで読み込まれません。

どうなんでしょうね。私もよくわからないのですが、WSHからIEを介して
クリップボードを操作するとき、たまに反映されなかったり変なことになるようです。
まあ、もともと結構アクロバティックというか無謀なことをしているので、
クリップボード操作系のCOMコンポーネントを使った方が確実なのは確かです。
(WshShellあたりに、このメソッドを入れたらいいのにね。さんざん要望が出ているにも
関わらず、いまだ採用されないのはScripting Teamのこだわりか、ScriptXかAutoItに
遠慮してのことか?)



To: あんのうん さん

> 以前、ここでADSLでルータタイプモデムに振られるグローバル
> IPの取得法が話題に上がっていましたが、OCN(ACCA 8M)、

53-04 管理人むたぐち 2001/11/25 00:37 ですね。

> SONET等で使われている富士通のルータタイプモデム「FC3521RA1」
> でWAN側アドレスを取得するサンプルを作ってみました。

参考になります。
あまりお勧めはしませんが、ルータのLAN外部からのアクセスを許可
しておけば、外出先からルータのグローバルIPアドレスを調べることも
でき…るかも。



To: ゴン さん

> 早速ですが、今、サスペンドから指定時間間隔でレジュームさせてメールを送受信させるというものを作成しようかと思っているのですが、サスペンドから自動的にレジュームさせる方法が分からずに困ってます。どこを参照してもわからなかったので分かるかたがいましたら教えてください。よろしくお願いします。

うーん。サスペンドからの復帰って、ソフトウェア的には不可能だと思うんですが。



To: 土屋 さん

> Set NS = WScript.CreateObject("Mozilla.Browser.1","NS_")
> でとりあえずインスタンスは作成できましたが、
> その後イニシャライズしないうちに次の処理しちゃだめよというメッセージが出て、
> その後うまくいっていません。

ActiveXコンテナになるホストからじゃないと呼び出しできないというパターンでは?
そう言えば、mozillaコントロールが使えるタブブラウザがあったような気がする…。



To: ひがのり さん

> WSHでプロセスを起動し、その起動したプロセスが正常に立ち上がったかを確認して、「正常に立ち上がったよ!」か「失敗してるよ」というログに結果を書きたいのですが・・・・

WshShell.Runの返り値が0だったら正常起動、それ以外なら異常ということになります。
WshShell.Execの場合は、返り値のWshScriptExecオブジェクトのExitCodeプロパティが
終了コードです。
ログ書き込みはWshShell.LogEventか、FileSystemObjectを使って書き込んでください。

> あと、プロセスID等でプロセスを指定して、KILLする事は出来るのでしょうか?

WMIのWin32_Processクラスを使えば可能です。詳しくは過去記事をあたってください。

ひがのり さん (higanori@hotmail.com) 2001年 12月 19日 19時 22分 33秒

はじめまして、WSH初心者のひがのりです。

WSHでプロセスを起動し、その起動したプロセスが正常に立ち上がったかを確認して、「正常に立ち上がったよ!」か「失敗してるよ」というログに結果を書きたいのですが・・・・

あと、プロセスID等でプロセスを指定して、KILLする事は出来るのでしょうか?

宜しくお願いします。

土屋 さん 2001年 12月 19日 18時 43分 03秒

Netscape6をはじめてインストール。
そこで関心はWSHからの操作なわけなんですが、
インストールされたフォルダにmozctl.dllとmozctlx.dllがあるので、
これをレジストリに登録してオブジェクトブラウザで見てみると、
おおっ、なんだかメソッドなんかがIEとそっくりだぞぉ。

でも、
Set NS = WScript.CreateObject("Mozilla.Browser.1","NS_")
でとりあえずインスタンスは作成できましたが、
その後イニシャライズしないうちに次の処理しちゃだめよというメッセージが出て、
その後うまくいっていません。
NSは、まだ正式対応していないのかなあ。
どなたかうまくいってる人います? いってたら教えて〜

ゴン さん 2001年 12月 19日 10時 49分 16秒

はじめまして、WSh初心者なもので常に壁にぶち当たっている日々です。
早速ですが、今、サスペンドから指定時間間隔でレジュームさせてメールを送受信させるというものを作成しようかと思っているのですが、サスペンドから自動的にレジュームさせる方法が分からずに困ってます。どこを参照してもわからなかったので分かるかたがいましたら教えてください。よろしくお願いします。

あんのうん さん 2001年 12月 19日 08時 34分 55秒

いつも参考にさせていただいてます。

以前、ここでADSLでルータタイプモデムに振られるグローバル
IPの取得法が話題に上がっていましたが、OCN(ACCA 8M)、
SONET等で使われている富士通のルータタイプモデム「FC3521RA1」
でWAN側アドレスを取得するサンプルを作ってみました。
LAN側のユーザID、パスワード、IPアドレスはデフォルトです。
WIN98+WSH2.0で一応、動作確認しました。

急いで強引に作ったので正規表現辺り含めて「へたれ」かも
知れません。

私はこれから隠しサーバを立ててインターネット越しにSOAP
の実験をしてみたいなぁと思ってます。

'*******************************************************************
'FUJITSU ADSLルータからWAN側IPアドレスを取得するサンプル
'*******************************************************************
'ルータLAN側
const C_ROUTER_PIP = "admin:admin@192.168.0.1"

'***WAN側IPアドレス取得
Function GetIPAdress()
Dim lo_regEx, lo_Match, lo_Matches,ls_pat
Dim lo_IE
Dim li_cnt,ls_HTML
'HTML取得
Set lo_IE = WScript.CreateObject("InternetExplorer.Application","IE_")
lo_IE.Silent=True
lo_IE.Visible=False
lo_IE.Navigate "http://" & C_ROUTER_PIP & "/html/devicePanel.html"
Do
WScript.Sleep 1000
Loop while lo_IE.Busy
For li_cnt = 0 To lo_IE.Document.Scripts.Length -1
ls_HTML = ls_HTML & lo_IE.Document.Scripts(li_cnt).InnerHTML
Next
'正規表現を使ってIPを抜く
Set lo_regEx = New RegExp
ls_pat = "var sIpAddress= ""(.*)\.(.*)\.(.*)\.(.*)"""
lo_regEx.Pattern = ls_pat
lo_regEx.Global = True
Set lo_Matches = lo_regEx.Execute(ls_HTML)
For Each lo_Match in lo_Matches
GetIPAdress = lo_regEx.Replace(lo_Match.Value,"$1.$2.$3.$4")
Exit For
Next
lo_IE.Quit
Set lo_IE = Nothing
Set lo_regEx = Nothing
End Function

MsgBox("WAN側アドレス:" & GetIPAdress())

土屋 さん 2001年 12月 19日 02時 45分 17秒

TeraPadマクロ化計画のお話です。

WSH(Windows Script Host)をTeraPadのマクロとして動作させるためのDLLのテス
トバージョンを以下にアップしました。

http://csx.jp/~tsuchiya/DoMacro.lzh (95kb)

■インストール
 ◇圧縮ファイルを任意のフォルダに解凍します。
 ◇フォルダ内のDoMacro.dllを、「ここにドラッグして登録.vbs」にD&Dして完了。

■アンインストール
 ◇DoMacro.dllを、「こちらにドラッグして登録解除.vbs」にD&D。
 ◇フォルダごと削除して完了。

■使用方法
 ◇拡張子vbsで保存したマクロ実行ファイルをTeraPadのツールに登録。
 ◇名前を適当につけて、実行ファイルにこのvbsファイルを指定して実行。

■とりあえずできるTeraPad操作
 ◇関数
  GetAllText  すべてのテキストを取得
  GetSelText  選択範囲のテキストを取得
  GetExePath  TeraPadのフルパスを取得
  GetTitle   タイトルバーのテキストを取得
 ◇手続き
  SetSelText text  選択範囲にtextを入れ替える
  SetAllText text  テキスト全体をtextと入れ替える
  SelectAll     すべてのテキストを選択する
  GetSel start,end  選択範囲の最初と最後の位置を取得
  SetTitle text   タイトルバーの文字をtextに変更
 (今後、行操作や、クリップボード操作などを入れる予定です)

■基本例文
  Set TP = WScript.CreateObject("DoMacro.TpMac")
  MsgBox TP.GetSelText
  TP.SetSelText "入れ替え用テキスト"
  Set TP = Nothing

pokopon さん (pokopon@jomon.ne.jp) 2001年 12月 18日 14時 02分 19秒

さて別件です。
クリップボードへのアクセスについてですが、以前にIEを経由してのWHSからのアクセスが紹介されていました。
ところで、このクリップボードって、Win内に複数あるのでしょうか?

あるアプリで、直接にクリップボードに書き込みできるのですが、そのアプリで書き込まれた内容を、別のWHSで処理し(裏でこそこそ動いて)、さらにクリップボードを書き換え、そのアプリにデータを渡すゥゥなんてことを考えているのですが、WHSで書き込まれたクリップボードの内容が、アプリで読み込まれません。
メモ帳とかで貼り付けて見ると、書き込まれているはずのデータがありません(元のままです)。WHSで読み込みはできているようです。
この挙動は常に起こるのではなく、マウスが当たったウィンドウに応じて(順番で)、不確実に起こります。WHSでの読み込みも不確実です。

Wordでも、複数クリップボードを使っているようですので(これは、アプリ側で管理しているだけかと思いますが)、もしかしたら、複数あるのかな?
なんて、思っていますがゥゥッ韻覆觚軻虻遒世韻C癲ゥ

クリップボードに関して、何か情報がありましたら、教えてください。


pokopon さん (pokopon@jomon.ne.jp) 2001年 12月 18日 13時 53分 38秒

To 土屋さん
ご助言ありがとうございました。

>AppActivateには、やはり誤爆がつきものなのでは。
>5.6のShellオブジェクトのExecを使うと、98系でもProcessIDが取得できるので、
>これを指定してAppActivateするのが一番確実かとは思います。
はい、この点は以前にむたぐちさんに教わりましたが、WHSからのアプリの起動は考えてはいませんで、別途に開いたアプリで作られた、別のウィンドウに対してsendkeysしたいという思惑があります。
ですので、わかるのは「ウインドウタイトル名」だけなのです。
特定のウィンドウに対するProsessIDが拾えればよいのですが、それさえも「誤爆」されては元も子もありません。
ということです。 (^^ゞ

うまくいきませんですね〜。

もう少し検討してみます。


ひょん さん 2001年 12月 18日 06時 58分 49秒
URL:http://isweb36.infoseek.co.jp/computer/hyons/

ひょんといいます
私もスクリプト関係のページを
最近なんですが開いてしまったので
むたぐちさんのページをリンクさせてもらいました
よかったら相互リンクしてください

土屋 さん 2001年 12月 18日 03時 28分 35秒

実は、今TeraPad上で、WSHで作ったマクロを動かすという、
壮大な試みをひっそりとおこなっているところです。

実際には、TeraPadと対話するオートメーションCOMを作成して、
これをCreateObjectして使うスクリプトを、TeraPadに登録して使うというものです。

とりあえず、TeraPad上の選択テキストを取得したり書き換えたり、
ということはWSHからできるようになりました。
でも、それだけなのと、仕様書やらヘルプやらを作ろうというマメさに欠けているので、
一般公開は先かなあ。
(でもオブジェクトブラウザで中身をみてスクリプトが組める人のために、
 早急に公開すべきでしょうか)

それで、なにかこういうことができたら便利っていうことってないでしょうか?
大募集中。(できれば参考スクリプトもあるとうれしい)

たとえば、
<B>あああ</B>
と書いた文章を、ワードに太字で送れるようにするとか。
(IEにまず送って、それをコピーしてワードに貼り付けてみたんですが、
 貼り付けに以外と時間がかかりますね。)

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 18日 00時 49分 56秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

…。
2ちゃんねるのfushianasanトラップ同時多発テロ、うちにあった「WSHLab.掲示板専用書き込みツール」が悪用されたんじゃないだろか、と思ってみるテスト。
http://teri.2ch.net/test/read.cgi/accuse/1008597418/

初心者 さん 2001年 12月 17日 11時 36分 18秒

To: むたぐち さん

>スクリプトを2個用意して、・・・

こうすれば確実に子プロセスの異常終了を認識できますね。
使ってみます。ありがとうございました。

土屋 さん 2001年 12月 17日 09時 21分 10秒

ようやく風邪が快復傾向です。
古い話へのレスから、、、


Dear むたぐち さん

> もう一つのページとは、今後使い分けされていくのでしょうか?
> (スクリプト関係は新ページに移動とか)

実はさらにもう一つあったりするので(現在ASPの実験用です)、
今後考えていかないといけないですね。


Dear Lib30 さん

PCの調子はいかがでしょうか。

> そういうわけで、ちょっとNortonは常駐をはずせません。> 土屋 さん

McAfeeさんで試してみるとか、、、
私はシステムを守る常駐ソフトがクラッシュして、データを消された経験があって、
どうも常駐したがるソフトを疑ってしまうのです。

MDMとは、Machine Debug Managerで、システムフォルダにあるMDM.exeです。
VSのインストールの時に入り込んだんじゃなかったのかなあ。
これの常駐をはずしたら、WinMEがフリーズせずに終了してくれるようになりました。


Dear むたぐち さん

> DynaCallを使えばあるいは可能か?

実は私はこれを使う勇気がいまだにないのです。
APIを使う場合は、DelphiでCOM化した方が・・・と考えてしまいますね。


Dear ファイン さん

> 秀丸でVBSを書いているのですが、エディタからVBSを直接実行するには
> どうしたらよいのでしょうか??マクロを使用するのでしょうか??

やはりマクロですよね。
結構公開されているマクロが多いので、すぐ見つかってもよさそうな感じですが。
秀丸は確かここにもユーザーの方がいらっしゃったはずですので、
そのうちレスが期待できるかも。(でもなかなかでないですね)


<余話>
ちなみにTeraPadだとツールの設定で、マクロを使うまでもないです。
WZ Editorは過去ログに拙作のマクロがあったりします。

VBチックなマクロが使えるエディタってないかなって調べたんですが、
有名どころでは、DanaとQXがVB似のスクリプトでした。
公開されているマクロの量・質から見ると、QXが圧倒的ですね。

QXって起動は速いし、カスタマイズも思いっきりできるし、
いろいろ面白い機能満載ですごいエディタだと思うんですが、、、
あとは、インストールして最初に立ち上げた時のあの画面の趣味にはどうしてもついていけなくて、メインのエディタにはしていないのでした。

個人的にはFilerで色分けつきプレビューができてしまうWZ Editorがメインです。
(このこと何度も言ってたりして、、、)
</余話>


Dear pokopon さん

AppActivateには、やはり誤爆がつきものなのでは。
5.6のShellオブジェクトのExecを使うと、98系でもProcessIDが取得できるので、
これを指定してAppActivateするのが一番確実かとは思います。

Set WshShell = CreateObject("WScript.Shell")
Set objCalc = WshShell.Exec("calc")
WScript.Sleep 500
WshShell.AppActivate objCalc.ProcessID

みたいな感じで。

pokopon さん (pokopon@jomon.ne.jp) 2001年 12月 15日 20時 40分 02秒

To むたぐちさん
>WshShell.SendKeysをウィンドウタイトルを引数に指定して使っている限りは無理でしょうね。

がび〜ん。 ぐしゅん。 (;_;)

有難うございました。別の手立てを考えます。 m(__)m


管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 12月 15日 00時 31分 41秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

だいぶ間があいてしまった。



To: 初心者 さん

> 26-36 の場合に、コマンドプロンプトから実行し notepad を開いた後で
> コマンドプロンプト上でCntl-cを打ち込むとスクリプトの中断処理に
> 移るようなものが欲しかったのです。

なかなか難しいかもしれませんね。
スクリプトを2個用意して、

a.vbs
…起動すると、WshShell.Exec "cscript b.vbs"する。WshScriptExecオブジェクトのStatusプロパティを
ループをまわして監視し、b.vbsの終了を確認したらループを抜けて中断処理に。
a.vbs自体はウィンドウなし、つまりwscript.exeで実行する。

b.vbs
…実際の処理を記述する。

というのはどうですか?



To: はーと さん

> 'Dim netdriv As New IWshRuntimeLibrary.IWshNetwork_Class
> 'netdriv.MapNetworkDrive "X:", "\\server\共有"
>
> ここにserverというコンピューターがあるのですが、このコンピューター
> にアクセスするためにパスワードがかかっています。IDはmizu
> passはtbr505です。これをwshで指定することは可能でしょうか??

ヘルプを読んでほしいです。
MapNetworkDriveメソッドの3つめと4つめの引数が該当します。

あと、パスワードなんか書いちゃって大丈夫ですか?



To: ファイン さん

> 秀丸でVBSを書いているのですが、エディタからVBSを直接実行するには
> どうしたらよいのでしょうか??マクロを使用するのでしょうか??

えっと、マクロを使用するんじゃないでしょうか。
私は秀丸を使わないのでわからないです。
でもWz Editorにできるんだから、秀丸でもできるんじゃないでしょうか。
参考: 51-13 土屋 さん 2001/11/04 09:48



To: pokopon さん

> 最初のスキャンで「同一がなければ」次に「先頭一致が」となっていますが、
> 完全に同一でなければキャンセルするようなスクリプトにしたいと思っています。
> 例えばウインドウタイトル名が
> A A-1 A-2 A-3 ゥゥ・
> と先頭が同じウインドウが複数あったとき、「A」だけをタイトル名としてAppActivateした時、仮に「A」がなかった時に、次の「A-1、A-2」を拾わずに「ウインドウがない」とsendkesをあきらめさせたいのですが。
>
> どのような方法がありますでしょうか? ご教授いただければ幸いです。

WshShell.SendKeysをウィンドウタイトルを引数に指定して使っている限りは無理でしょうね。

> (OSがWin9Xでも対応できるようにです)

WSH5.6はWin95でこそ対応外みたいですが、Win98ならOKです。

> Win2Kなら、プロセス番号を拾えれば解決できるかと思うのですけど、Win9Xでも対応するためには、どうすれば良いでしょうか。

Win9x用のWMIコアコンポーネントをインストールすればいいのではないでしょうか。
そのためだけにインストールするのもアレかもしれませんけど。

> また、ウインドウが「最小化されているかどうか」を確かめる関数とか方法はありませんか?
> 最小化されている場合には、sendkeys "% R"をさせたいのですけど、通常の大きさなら、何も送信させないように制御したいのですが。

これも無理なんじゃないかなあ…。

以上のことはたぶんAPIを使えば可能だと思うんですが、DynaCallを入れなきゃならないし…。



To: /tty さん

> WSH環境下でWindowsのEvent Logを読み出して、処理を(テキスト、CSV,etcにかき出す)にはVBSではどうすればよいのでしょうか?
> 書き込むには WshShell.LogEventがつかえるのですが....

WMIのWin32_NTLogEventクラスを使って読み出し、FileSystemObjectを使ってテキストに
書き出せば良さそうです。
以下、参考例。
http://www.users.gr.jp/ml/archive/ASP/13518.asp
http://www.microsoft.com/japan/developer/thisweek/wmi/koj990811.asp

/tty さん (ttoba@nifty.com) 2001年 12月 14日 12時 43分 44秒

WSH環境下でWindowsのEvent Logを読み出して、処理を(テキスト、CSV,etcにかき出す)にはVBSではどうすればよいのでしょうか?
書き込むには WshShell.LogEventがつかえるのですが....


pokopon さん (pokopon@jomon.ne.jp) 2001年 12月 13日 22時 33分 00秒

みなさま、またお邪魔します。 また、つまずいてしまいました。

今、AppActivate ステートメントでウィンドウをアクティブにし、そこにsendkeysでキーを送る事をしていますが、毎度の事ながら「AppActivate誤爆」が起きます。
特にウィンドウ名の先頭が同じ複数のウィンドウがある場合に、多発します。
ヘルプには
「実行中の各アプリケーションのタイトル文字列を title と比較することで、どのアプリケーションがアクティブになるかが決まります。完全に一致するタイトルが見つからない場合、タイトル文字列の先頭が title と一致するアプリケーションがアクティブになります。そのようなアプリケーションが見つからない場合、タイトル文字列の最後が title と一致するアプリケーションがアクティブになります。名前が title と一致するアプリケーションのインスタンスがいくつかある場合、アクティブになるインスタンスは不定です。」
とありますが、
最初のスキャンで「同一がなければ」次に「先頭一致が」となっていますが、
完全に同一でなければキャンセルするようなスクリプトにしたいと思っています。
例えばウインドウタイトル名が
A A-1 A-2 A-3 ゥゥ・
と先頭が同じウインドウが複数あったとき、「A」だけをタイトル名としてAppActivateした時、仮に「A」がなかった時に、次の「A-1、A-2」を拾わずに「ウインドウがない」とsendkesをあきらめさせたいのですが。

どのような方法がありますでしょうか? ご教授いただければ幸いです。
(OSがWin9Xでも対応できるようにです)
Win2Kなら、プロセス番号を拾えれば解決できるかと思うのですけど、Win9Xでも対応するためには、どうすれば良いでしょうか。


また、ウインドウが「最小化されているかどうか」を確かめる関数とか方法はありませんか?
最小化されている場合には、sendkeys "% R"をさせたいのですけど、通常の大きさなら、何も送信させないように制御したいのですが。

ヘルプとにらめっこですが、見つけられずにいます。


ファイン さん 2001年 12月 13日 09時 28分 27秒

秀丸でVBSを書いているのですが、エディタからVBSを直接実行するには
どうしたらよいのでしょうか??マクロを使用するのでしょうか??
よろしくお願いします。

はーと さん 2001年 12月 12日 18時 02分 43秒

はじめまして。

VBAでネットワークの割り当てをしています。

'Dim netdriv As New IWshRuntimeLibrary.IWshNetwork_Class
'netdriv.MapNetworkDrive "X:", "\\server\共有"

ここにserverというコンピューターがあるのですが、このコンピューター
にアクセスするためにパスワードがかかっています。IDはmizu
passはtbr505です。これをwshで指定することは可能でしょうか??

どなたか教えてください。

ぴろくん さん 2001年 12月 11日 12時 49分 57秒

To:mira さん
早速の回答ありがとうございます。

では、ASPに記述せず、vbsファイルをして作成し、ASPから
この作成したvbsファイルをキックしたほうがいいのでしょうか?

mira さん 2001年 12月 11日 12時 37分 20秒

To: ぴろくんさん
> ASPからWSHを使用してネットワークドライブをマッピングしようとしているのですが
> どうもうまいこといきません。

IISからネットワークドライブをアクセスするのはセキュリティの問題で
できないようになっていたように思います。(以前やろうとして失敗しました)

ぴろくん さん 2001年 12月 11日 12時 17分 55秒

ASPからWSHを起動する際の質問
みなさんはじめまして。

ASPからWSHを使用してネットワークドライブをマッピングしようとしているのですが
どうもうまいこといきません。

↓以下ソースです
Option Explicit
Dim strDriveLetter '選択したドライブ名
Dim strNetworkPath 'ネットワークパス
Dim strNetworkUser '接続するユーザ名
Dim strNetworkPWD '接続するユーザ名のパスワード
Dim blnReConnect '再接続?
Dim strMethod
Dim objArgs,nArg '引数
Dim WshellNetwork

Set objArgs = Wscript.Arguments '引数の取得
For nArg = 0 To objArgs.Count - 1
If nArg = 0 Then strDriveLetter = """" & objArgs(nArg) & """"
If nArg = 1 Then strNetworkPath = """" & objArgs(nArg) & """"
If nArg = 2 Then blnReConnect = objArgs(nArg)
If nArg = 3 Then strNetworkUser = """" & objArgs(nArg) & """"
If nArg = 4 Then strNetworkPWD = """" & objArgs(nArg) & """"
Next

Set WshellNetwork = CreateObject("WScript.Network")

Wscript.Echo strDriveLetter
Wscript.Echo strNetworkPath
Wscript.Echo blnReConnect
'メソッドへ送る文字列の組み立て

'If strNetworkUser <> "" Then strMethod = strMethod & "," & strNetworkUser
'If strNetworkPWD <> "" Then strMethod = strMethod & "," & strNetworkPWD

WshellNetwork.MapNetworkDrive strDriveLetter,strNetworkPath,blnReConnect

' WshellNetwork.MapNetworkDrive "F:","\\express58d\d",false

Set WshellNetwork = Nothing

エラーは
WshellNetwork.MapNetworkDrive
のところで
指定されたデバイス名は無効です。
とでます
直打ちだとですのにぃぃぃ。

よろしくお願いします。

管理人むたぐち さん 2001年 12月 09日 01時 06分 41秒

To: kamesanさん

連絡どうもありがとうございます。
まさかこっち経由で連絡が来るとは思いませんでしたよ。
彼にも連絡しときます。


To: All

私用で申し訳ないです…。

kamesan さん 2001年 12月 09日 00時 17分 41秒

12/9のyanさんの発表練習は午後1時からだよーん。
T君にも連絡よろしく。

初心者 さん 2001年 12月 07日 13時 21分 57秒

To: 管理人むたぐち さん

回答ありがとうございます。

>これもWMIでできますね。たぶん。
>26-36 管理人むたぐち 2000/12/19 02:28 とかを参考にしてください。
>WSH5.6のWshScriptExecオブジェクトを使う手もあります。

早速試してみましたが、私の要望と少しニュアンスが違うようです。
26-36 の場合に、コマンドプロンプトから実行し notepad を開いた後で
コマンドプロンプト上でCntl-cを打ち込むとスクリプトの中断処理に
移るようなものが欲しかったのです。
oWshExec.Status ではExecするプロセス毎に監視しなければならず、
プロセス数が多いと負担になります。
またExecを使わない場合に、自分自身の長時間処理の途中 Kill の
割り込みイベントも受け取りたいのです。


shozi さん 2001年 12月 07日 12時 51分 34秒

回答ありがとうございます。
何をしたかったかというと、まずNICを二枚挿して現用と予備とします。
現用がハード的に故障した場合は予備に切り替えるという処理をWSHでできるかなと、考えていたところでした。
助かりました。感謝です。

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

To: SIGNAL9 さん

> >・Efx_Capture.vbsが「パラメータが間違っています」というエラーになります。
> げげ。いちおうチェックはWinNT4.0SP6SRPとWin2KSP2SRPで行ってるんですが。
> むたぐちさん、OSは何をお使いでしたっけ。

Win2000sp2です。
エラーの原因がわかりました。
スクリプトの最初の方にある、WScript.Echoで表示されるダイアログが、消えてもなお
アクティブ状態にある(?)みたいで、他のウィンドウがアクティブにならないためでした。
WshShell.AppActivateでCaptureWindowの前に該当ウィンドウをアクティブ化しようと
したんですが、そもそもWScript.Echoの後は、どうやっても他のウィンドウを
アクティブ化できないみたいです。(タスクバーのウィンドウタイトルが点滅するだけ)
WScript.Echoをやめたら無事キャプチャできました。@ACTIVE以外はWScript.Echoが
あっても動作しました。

アクティブウィンドウの振る舞いに関しては、Tweak UIなどでも設定できますが、
設定によってはうまくいかないのかな?
私の設定は、「アプリケーションにフォーカスを横取りさせない」→未チェック
となっています。

(ウィンドウの上にウィンドウがオーバーラップしているとき、そのウィンドウが写りこむ
のはやっぱり仕様ですか? AppActivateもついでにやってくれるとありがたいんですが…)

> やっぱり書き込んだほうがよろしいでしょうか。

それなら、書き込みたい人は、自分でWshShell.RegWriteでも使って書き込めばいいかも
しれませんね。
レジストリキーをヘルプに書いておけば問題ないかと。

> これなんですが、デコードはよしとしてもエンコードが問題なんで…。GIFのRLEという
> 手もある(実際には内部的には使える状態にはした)んですが、どーも互換性の問題も
> ありまして、ああいう玉虫色にさせてもらってます。

あ、そっか。デコードしか頭になかったっす。

> #最近、MS系の洗脳ぢゃない技術セミナーなんかいくと
> #「COMはもう終わりね。今からなんか作るんなら.NETにしてちょ」と言われまくって
> #るんで。

やはり。ある意味洗脳じゃないのかな。



To: noir さん

> WshScriptExec オブジェクトの StdOut プロパティのヘルプには
> そのあたりの説明はないんですよね…。

うーん。両者は別物だから、WshScriptExecオブジェクトのStdOutプロパティの
説明文に罪はないと思いますが…。



To: Lib30 さん

> さいきん W32.Badtrans.B というウイルスがはやっていますが、
> うちにもメールに載ってやってきました。しかも4回も。

私のところにもいっぱい来てますよ。
ウィルスつきメールなんかこれまでもらったことがなかったので、
なんか楽しかったかも。

> # 噂によれば、マウスである図形を描く(マウスジェスチャー)ことによって
> # 戻るや更新ができるらしい。

そうらしいですね。
昔、マウスをぐるぐる回転することで、アプリを起動したりするユーティリティが
あったことを思い出しました。

ところでWSH派タブブラウザと言えば、やっぱりBugBrowserじゃないですかねえ。
http://www.kit.hi-ho.ne.jp/tomo-sg/
OLEオートメーション対応なのが強い。でも、IEみたいにイベントのバインドが
できないので今一歩かな。



To: 土屋 さん

> Opera6.0も使ってみたんですが、これって軽快ブラウザっていうわりには、
> 起動にIEの何倍もの時間がかかったりしてます。

立ち上がってからがすごいんだぞ。と言ってました。(誰がやねん)

やっぱ、IEは反則ですよ。OSの一部としてWindows起動時から大多数の
コンポーネントを読み込んでるわけだし。

> WSHだとSendMessageなどのAPI使うわけにもいかないので、

DynaCallを使えばあるいは可能か?

> ところで、出てきたついでといってはなんですが、
> 例のOWCを使うスクリプトの例です。

すごいすごい。これはブラウザから呼び出した例ですね。
ちゃんとインターフェースもあるんだ。

SIGNAL9さんのスクリプト、WSHでもそのまま動きましたよ。
これはまた面白いおもちゃを見つけてしまったなあ。
これまでこの掲示板とかで出てきたExcelのスクリプト、
ほとんどOWCバージョンにリライトできるんじゃないでしょうか。



To: shozi さん

> win2kのコンパネ→ネットワークとダイヤルアップ接続にある
> ローカルエリア接続を無効/有効にするスクリプトをWSHで書けるでしょうか。

たぶんWMIを使えば可能です。と思ったんですが、
Win32_NetworkAdapterConfigurationクラスのメソッドをざっとみたところ、
それらしいメソッドがないような気がします。
IPアドレス等の値を設定するメソッドはいっぱいあるんですけどね。

アナログなスクリプトですが、こんなんどうですか。
タイミングがわりとシビアで、ちゃんと動作しないこともあるかもしれません。

Set Shell = WScript.CreateObject("Shell.Application")

For Each oItem In Shell.NameSpace(3).Items
If oItem.Name="ネットワークとダイヤルアップ接続" Then
For Each oSubItem In oItem.GetFolder.Items
If oItem.GetFolder.GetDetailsOf(oSubItem,1)="LAN" Then
If oItem.GetFolder.GetDetailsOf(oSubItem,2)="有効" Then
oSubItem.InvokeVerb "無効にする(&B)"
WScript.Sleep 1000
ElseIf oItem.GetFolder.GetDetailsOf(oSubItem,2)="無効" Then
oSubItem.InvokeVerb "有効にする(&A)"
WScript.Sleep 1000
End If
Exit For
End If
Next
Exit For
End If
Next



To: 初心者 さん

> UNIXシェルではプログラムの中断(Cntl-C等)を認識できますが、
> WSHにはこれに相当するコマンドは無いのでしょうか。
> UNIXシェル例)
> trap "echo SIGNAL traped; rm -f tmp$$.* ; exit 10" 1 2 15
> のようにして中断終了時に一時ファイルを削除したいのです。

これもWMIでできますね。たぶん。
26-36 管理人むたぐち 2000/12/19 02:28 とかを参考にしてください。

WSH5.6のWshScriptExecオブジェクトを使う手もあります。
47-07 管理人むたぐち 2001/09/18 01:36

oWshExec.Status = 0 のときはプログラムが実行中、
oWshExec.Status = 1 のときは終了した、という意味になります。



To: たる さん

> ここのスクリプト中のURLに書いてあることを読めば何故なのかはLib30さんなら納得いくかと思います。

なるほど、そりゃ知らん人からメールがくるわけだ。
でもうちのページの読者である可能性が高いわけだなあ。あまり邪険に扱うもんじゃないかもね。

> ところで質問があります。"%sysdir%\kernel32.exe"というプログラムが提供するサービス(名前は分かりません)を殺したいのですが、
> どうやったら出来ますでしょうか?

これまたWMIを使えばいけそうです。
Win32_Serviceクラスには、PathNameプロパティがあるので、そのサービスを
WQLで絞り込んで、あとはStopServiceメソッドで殺せると思います。

> あと"%sysdir%\kdll.dll"というDLLの常駐も殺したいです。
> こういったものは名前がわからないと無理なんでしょうか。

プロセスだったら、Win32_Processクラスを、ExecutablePathプロパティで絞り込んで、
あとはTerminateメソッドで殺せばいいのではないでしょうか。
でも、DLLの常駐ってプロセス扱いだっけ?



To: おはつ さん

> Win9xで、ドメインにログインしたときの
> ドメインサーバー名を取得する方法って
> 誰かご存じですか?
> WinNTは分かるのですが・・・

WshNetworkオブジェクトのUserDomainプロパティじゃダメなんでしたっけ?
あ、ヘルプに
>UserDomain プロパティが Windows 98 および Windows ME 上で動作するには、USERDOMAIN 環境変数が設定されている必要があります。この変数は既定では設定されていません。
と書いてある…。

ドメイン名に関しては、過去にも話題になってましたね。ここらへんを参考にしてみてください。
43-23 pokopon さん 2001/08/15 18:19
43-17 管理人むたぐち 2001/08/13 17:49
43-06 pokopon さん 2001/08/10 13:07
43-03 pokopon さん 2001/08/10 04:00
43-02 管理人むたぐち 2001/08/10 01:40
42-39 pokopon さん 2001/08/09 03:48
42-37 管理人むたぐち 2001/08/09 01:12
42-36 pokopon さん 2001/08/08 22:54



To: ひろすけ さん

> あわててSP2をアンインストールしたのですが、回復していないのです。
> 一体どうしたら回復できるのでしょうか?

ん、WSH5.6を再インストールすればいいだけの話では?
COMコンポーネントが動作しない原因は、たいていレジストリ上の
登録情報が壊れているためです。
手動で直すのもたるいですから、普通はコンポーネントを再インストールして
直してやります。

> また、このときwsh5.6 for2000.zipも一緒にインストールしたのですが
> どちらが原因かもわかりません。ただ、以前に別のPC(W2k Server)
> にwsh5.6 for2000.zipをインストールしましたが、なんら問題は起きませんでした。

なんかファイル名が怪しくないですか…?
Win2000用WSH5.6は、"scriptjp.exe"ですよ。

ひろすけ さん 2001年 12月 07日 01時 19分 16秒

こんばんわ、ひろすけです。

ちょっとトラブルになってしまい。
アドバイスを頂きたいのですが?

先日 W2k proにsp2をインストールしたところ

Set objWshShell=WScript.CreateObject("WScript.Shell")
が実行できなくなってしまい、
ClassFactryは要求されたクラスを提供できません
code 80040111
Source (null)
となってしまいました。

あわててSP2をアンインストールしたのですが、回復していないのです。
一体どうしたら回復できるのでしょうか?

また、このときwsh5.6 for2000.zipも一緒にインストールしたのですが
どちらが原因かもわかりません。ただ、以前に別のPC(W2k Server)
にwsh5.6 for2000.zipをインストールしましたが、なんら問題は起きませんでした。

情報提供をよろしくお願いします。

Return